怎样更方便的控制unity loadscenescene里面的视角

拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3a70-ua98).
重新安装浏览器,或使用别的浏览器最近在弄AI,调试程序的时候总是要调整摄像机的视角。灰常不爽然后自己写了个脚本。比较习惯Scene窗口下的摄像机操作所以就仿造了一个一样的操作脚本。
首相我们要知道Scene下的摄像机的操作方式
1.WASD分别控制前后左右的位移,注意:位移是已当前视角为基准的。
2.QE分别控制上下,注意:这个是针对世界坐标的。
3.鼠标右键控制自由视角旋转。(难点)
对于第一条来说,主要的问题就是现在玩家朝向问题。我怎么知道我面向哪里。
Vector3 Face = transform.rotation * Vector3.
Face = Face.
这段代码就是玩家的朝向,把目前玩家的旋转角度乘上向量的前方,就是玩家的面朝方向,因为我们就要方向,所以单位向量化了。
下面就是关于第一条的控制方式。
Vector3 Face = transform.rotation * Vector3.
Face = Face.
Vector3 Left = transform.rotation * Vector3.
Left = Left.
Vector3 Right = transform.rotation * Vector3.
Right = Right.
if (Input.GetKey("w"))
transform.position += Face * Speed * Time.deltaT
if (Input.GetKey("a"))
transform.position += Left * Speed * Time.deltaT
if (Input.GetKey("d"))
transform.position += Right * Speed * Time.deltaT
if (Input.GetKey("s"))
transform.position -= Face * Speed * Time.deltaT
第二条就不用多说了吧。上代码
if (Input.GetKey("q"))
transform.position -= Vector3.up * Speed * Time.deltaT
if (Input.GetKey("e"))
transform.position += Vector3.up * Speed * Time.deltaT
最难的第三条。心思了半天有两种解决方法,但都有缺陷
1)统一转换成Vector来计算
2)统一转换成Quaternion来计算
1)旋转时有卡顿不流畅,但是到位快
2)旋转时比第一种流畅一些也有些许卡顿,但到位不快甚至不到位。
对于这两种方式,主要的思路都是取鼠标滑动的单位向量然后乘以速度。
这两种都设计到一个比较坑爹的问题。
鼠标向上下滑动时:
针对鼠标来说是y轴加减
针对rotation来说是x轴减加
同理鼠标左右滑动时:
针对鼠标来说是x轴减加
针对rotation来说是y轴减加
所以这段代码就很重要
//_Rot是物体当前rotation值,MovePos是修改的值,最后得旋转后的值
_Rot.x -= MovePos.y * 2; //*2是可以调节的速度,越大越快
_Rot.y += MovePos.x * 2;
_Rot.z += MovePos.z * 2;
然后对于第一种方式全部变为Vector处理我们就会用到Transform.eulerA
Vector3 Save = Input.mouseP
Vector3 MovePos = Save - MouseDownP
MovePos = MovePos.
Vector3 _Rot = transform.rotation.eulerA
_Rot.x -= MovePos.y * 2;
_Rot.y += MovePos.x * 2;
_Rot.z += MovePos.z * 2;
transform.eulerAngles = _R
Debug.Log(MovePos);
MouseDownPos = S
对于第二种方式全部变为Quaternion处理我们用Quaternion.Slerp
Vector3 Save = Input.mouseP
Vector3 MovePos = Save - MouseDownP
MovePos = MovePos.
Vector3 _Rot = transform.rotation.eulerA
_Rot.x -= MovePos.y * 2;
_Rot.y += MovePos.x * 2;
_Rot.z += MovePos.z * 2;
Quaternion MoveRot = Quaternion.Euler(_Rot);
transform.rotation = Quaternion.Slerp(transform.rotation, MoveRot, Time.deltaTime * 30);
MouseDownPos = S
最后给完整的Update代码
private float Speed = 5;
private Vector3 MouseDownP
void Update ()
Vector3 Face = transform.rotation * Vector3.
Face = Face.
Vector3 Left = transform.rotation * Vector3.
Left = Left.
Vector3 Right = transform.rotation * Vector3.
Right = Right.
//Debug.Log(transform.rotation * Vector3.forward + "," + transform.rotation * Vector3.left + "," + transform.rotation * Vector3.right);
if (Input.GetMouseButtonDown(1))
MouseDownPos = Input.mouseP
if (Input.GetMouseButton(1))
//Vector处理
Vector3 Save = Input.mouseP
Vector3 MovePos = Save - MouseDownP
MovePos = MovePos.
Vector3 _Rot = transform.rotation.eulerA
_Rot.x -= MovePos.y * 2;
_Rot.y += MovePos.x * 2;
_Rot.z += MovePos.z * 2;
transform.eulerAngles = _R
Debug.Log(MovePos);
MouseDownPos = S
//Quaternion处理
//Vector3 Save = Input.mouseP
//Vector3 MovePos = Save - MouseDownP
//MovePos = MovePos.
//Vector3 _Rot = transform.rotation.eulerA
//_Rot.x -= MovePos.y * 2;
//_Rot.y += MovePos.x * 2;
//_Rot.z += MovePos.z * 2;
//Quaternion MoveRot = Quaternion.Euler(_Rot);
//transform.rotation = Quaternion.Slerp(transform.rotation, MoveRot, Time.deltaTime * 30);
//MouseDownPos = S
if (Input.GetKey("w"))
transform.position += Face * Speed * Time.deltaT
if (Input.GetKey("a"))
transform.position += Left * Speed * Time.deltaT
if (Input.GetKey("d"))
transform.position += Right * Speed * Time.deltaT
if (Input.GetKey("s"))
transform.position -= Face * Speed * Time.deltaT
if (Input.GetKey("q"))
transform.position -= Vector3.up * Speed * Time.deltaT
if (Input.GetKey("e"))
transform.position += Vector3.up * Speed * Time.deltaT
阅读(...) 评论()你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
sprite 不知道为什么显示不出来了, 在unity的scene上可以看到 在game里面看不到
不在摄像机范围内?
在Scene里找到那个sprite,再在hierarchy里点选camera,按快捷键Shift+Ctrl+f,再会Game 里看看
要回复问题请先或
浏览: 1592
关注: 3 人}

我要回帖

更多关于 unity3d 视角控制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信