unity避免相机穿墙
来源:互联网 发布:如何投诉淘宝小二 编辑:程序博客网 时间:2024/05/04 08:57
当采用第一人称相机时相机穿墙是一件很烦人的事情,避免相机穿墙有几种方法,比较常见的是采用characterController的第一人称角色控制器,但是这个比较麻烦的事情是它有3个子物体,还要有好几个的脚本,有时我们仅仅就是为了使相机具有刚体特性而不需要其他功能,显然使用第一人称角色控制器有点大材小用。所以这里我们可以换以一种方法,例如我们场景里的普通相机,我们如果想避免相机穿墙,可以给相机添加Character Controller组件即可。添加的方式为,选择你要添加组件的相机,点击inspector面板下方的add Component,选择physics->Character Controller,给相机添加完角色控制器后我们就可以通过代码控制相机在场景里漫游了。
具体的代码如下:
using UnityEngine;using System.Collections;using UnityEngine.UI;using System;using UnityEngine.EventSystems;using UnityStandardAssets.ImageEffects;public class shijiao : MonoBehaviour{ GameObject Cm; //方向灵敏度 public float sensitivityX = 10F; public float sensitivityY = 10F; //上下最大视角(Y视角) public float minimumY = -60F; public float maximumY = 60F; float rotationY = 0F; private float movespeed = 20; CharacterController ctrlor; void Start () { Cm = GameObject.Find("Mcam"); ctrlor = GetComponent<CharacterController>(); } void Update() { if (Input.GetMouseButton (1)) { //W键前进 if (Input.GetKey (KeyCode.W)) { Vector3 forward = transform.TransformDirection(Vector3.forward); ctrlor.Move(forward*movespeed*Time.deltaTime); } //S键后退 if (Input.GetKey(KeyCode.S)) { Vector3 back = transform.TransformDirection(Vector3.back); ctrlor.Move(back * movespeed * Time.deltaTime); } //A键移动 if (Input.GetKey(KeyCode.A)) { Vector3 left = transform.TransformDirection(Vector3.left); ctrlor.Move(left* movespeed * Time.deltaTime); } //D键后退 if (Input.GetKey(KeyCode.D) && gameObject.transform.position.y > 0) { Vector3 right = transform.TransformDirection(Vector3.right); ctrlor.Move(right * movespeed * Time.deltaTime); } //E键升高 if (Input.GetKey (KeyCode.E)) { Vector3 upward = transform.TransformDirection(Vector3.up); ctrlor.Move(upward * movespeed * Time.deltaTime); } if (Input.GetMouseButton (0)){ //根据鼠标移动的快慢(增量), 获得相机左右旋转的角度(处理X) float rotationX = transform.localEulerAngles.y + Input.GetAxis ("Mouse X") * sensitivityX; //根据鼠标移动的快慢(增量), 获得相机上下旋转的角度(处理Y) rotationY += Input.GetAxis ("Mouse Y") * sensitivityY; //角度限制. rotationY小于min,返回min. 大于max,返回max. 否则返回value rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); //总体设置一下相机角度 transform.localEulerAngles = new Vector3 (-rotationY, rotationX, 0); } }}
0 0
- unity避免相机穿墙
- Unity物体穿墙问题
- Unity3d 防止相机“穿墙”功能
- unity中摄像机跟随主角,摄像机穿墙,射线碰撞检测,摄像机穿墙跟随
- unity中摄像机跟随主角,摄像机穿墙,射线碰撞检测,摄像机穿墙跟随
- Unity 使用TextMesh解决3D文字穿墙的问题
- Unity 相机控制集合。。。。
- unity 相机跟随
- Unity平滑相机跟随
- 【Unity】 相机移动脚本
- 004.unity相机
- Unity相机截图
- Unity中相机跟随
- unity相机操作
- unity 相机截屏
- Unity相机摇动
- Unity基础,相机跟随
- unity icon 面向相机
- RecyclerView 下拉刷新、上拉加载更多
- 数据结构双语课->栈的链式实现
- python dataframe 输出结果整行显示
- AndroidStudio导入jar包或第三方开源工程库library
- ubuntu滚动屏幕长截屏,截取整个网页
- unity避免相机穿墙
- [Java]map按key或value排序
- 项目规划(手机聊天交友)
- JavaScript强化教程 —— 对象创建模式
- PHP|什么是CGI, FastCGI, PHP-CGI, PHP-FPM, Spawn-FCGI?
- test on Dynamically Linked "Shared Object" Libraries: (.so)
- Thread.currentThread.interrupt()
- RPM软件安装包-rpm指令操作
- Android视频播放框架UniversalVideoView