Unity Game窗口中还原Scene窗口摄像机操作 强化版
来源:互联网 发布:搜狐影音 mac版 编辑:程序博客网 时间:2024/06/05 15:58
之前写的那个版本看来真的是不行啊。最近研究了一下官方第一人称脚本,人家的平滑过渡真的是没得说。借鉴了一下,写出来了一个新的比较完美的控制。
之前我们的操作是通过鼠标输入的开始坐标和转动坐标。其实官方有一个函数~
float yRot = Input.GetAxis("Mouse X");float xRot = Input.GetAxis("Mouse Y");
这就分别能获取到鼠标的X轴操作和Y轴操作了。
那为什么用yRot获取X轴,xRot获取Y轴呢?
左面是鼠标的顶视图,右边是Unity中的三维坐标。可以观察到,鼠标X轴的平移对应的就是Unity中Y轴的旋转。Y轴同理。
但是还是不能照搬官方的写法,因为官方的写法针对的是自身坐标,就是Local。(注:LocalPosition并不等于物体的Local坐标)
Scene窗口的摄像机是针对World的旋转。
这里就需要转换一下。
首先我们先得到摄像机的目前旋转角度,我们在Start初始化一下
void Start(){ CameraR = Camera.main.transform.rotation.eulerAngles;}
在Update中用Vector3的形式修改旋转
//官方脚本float yRot = Input.GetAxis("Mouse X");float xRot = Input.GetAxis("Mouse Y");Vector3 R = CameraR + new Vector3(-xRot, yRot, 0f); //加上旋转距离CameraR = Vector3.Slerp(CameraR, R, 100f * Time.deltaTime);//平滑过渡transform.rotation = Quaternion.Euler(CameraR);
给出完整脚本
using UnityEngine;using System.Collections;public class CameraCotrel : MonoBehaviour { private float Speed = 100f; private Vector3 CameraR; void Start() { CameraR = Camera.main.transform.rotation.eulerAngles; } void Update () { Vector3 Face = transform.rotation * Vector3.forward; Face = Face.normalized; Vector3 Left = transform.rotation * Vector3.left; Left = Left.normalized; Vector3 Right = transform.rotation * Vector3.right; Right = Right.normalized; if (Input.GetMouseButton(1)) { //官方脚本 float yRot = Input.GetAxis("Mouse X"); float xRot = Input.GetAxis("Mouse Y"); Vector3 R = CameraR + new Vector3(-xRot, yRot, 0f); CameraR = Vector3.Slerp(CameraR, R, Speed * Time.deltaTime); transform.rotation = Quaternion.Euler(CameraR); } if (Input.GetKey("w")) { transform.position += Face * Speed * Time.deltaTime; } if (Input.GetKey("a")) { transform.position += Left * Speed * Time.deltaTime; } if (Input.GetKey("d")) { transform.position += Right * Speed * Time.deltaTime; } if (Input.GetKey("s")) { transform.position -= Face * Speed * Time.deltaTime; } if (Input.GetKey("q")) { transform.position -= Vector3.up * Speed * Time.deltaTime; } if (Input.GetKey("e")) { transform.position += Vector3.up * Speed * Time.deltaTime; } }}
0 0
- Unity Game窗口中还原Scene窗口摄像机操作 强化版
- Unity Game窗口中还原Scene窗口摄像机操作
- unity的2D中物体在Scene窗口中可以看到,但在Game窗口中看不到
- Unity在Scene窗口有显示,在Game窗口不显示
- unity3d中的物体,在Scene窗口中可以看到,而在Game窗口中看不到
- unity窗口最大化最小化及窗口还原
- 【Unity】game窗口调试Debug
- Unity之编辑器类将摄像机视图(targetTexture)绘制在窗口中
- unity 实现Game窗口的Stats
- 在myeclipse中, 如何还原默认窗口?
- 在myeclipse中, 如何还原默认窗口?
- 在myeclipse中, 如何还原默认窗口?
- Unity的Scene场景选中物体Hierarchy窗口无法锁定选中的物体的问题
- codeblocks窗口还原
- vs还原窗口布局
- [Unity]将摄像机移动到Scene视角位置
- Unity 小技巧:Scene视图 和 Game视图 中 视角(Camera)的控制
- Unity中摄像机
- 排成一条线的纸牌博弈问题
- 排序
- eclipse中出现Project ???is missing required library的解决方法
- mysql 中 union 的用法
- 浅析View工作原理
- Unity Game窗口中还原Scene窗口摄像机操作 强化版
- Properties的简单使用
- 死锁
- 做题时候的小技巧(长期更新)
- 层遍历二叉树
- 浏览器兼容
- 浅谈Java多线程(synchronized实现可见性)
- Linux软连接和硬链接
- 工厂模式(Factory)-设计模式(一)