[Unity基础]让物体朝摄像机观察方向移动(一)
2015-05-24 15:52
3003 查看
情景一:假设有一个人,他面对北方,他背后有一台摄像机,正巧也是面对北方。现在,他向左转90度,面对西方。此时如果让他向前走,那么有两种情况。
情况一:以自身坐标系向前走。他将会向眼睛直视的方向走,实际上他是向西方走,摄像机看到他是向"右"滴。
情况二:以世界坐标系向前走。他将会向北方走,摄像机看到他是向"前"滴。
由此可见,如果物体旋转了的话,那么以自身坐标系进行移动往往会发生错误,所以在游戏中角色的移动一般都是以世界坐标系进行移动滴。以世界坐标系进行移动的话,是不考虑物体自身的旋转的。
所以在角色移动的代码中经常会发现:
Transform.TransformDirection
从自身坐标到世界坐标变换方向。
Transform.forward
在世界空间坐标变换的蓝色轴。也就是z轴。
其中transform.TransformDirection(new Vector3(0, 0, 1));的简写方式是transform.forward;
情景二:假设有一个人,他面对北方,他左手边有一台摄像机。
此时如果他以世界坐标系向前走。他将会向北方走,摄像机看到他是向"左"的。这样是错误的,想让角色向前走的话,角色就要向东方进行移动。可见,此时的"前"是从摄像机的角度上来讲的,所以就要考虑到摄像机的旋转角度。
我们的目标是,让角色"沿摄像机角度方向,前进",从代码角度上来说,就是:Quaternion*Vector3,好了,直接给出我们的代码!
情况一:以自身坐标系向前走。他将会向眼睛直视的方向走,实际上他是向西方走,摄像机看到他是向"右"滴。
情况二:以世界坐标系向前走。他将会向北方走,摄像机看到他是向"前"滴。
由此可见,如果物体旋转了的话,那么以自身坐标系进行移动往往会发生错误,所以在游戏中角色的移动一般都是以世界坐标系进行移动滴。以世界坐标系进行移动的话,是不考虑物体自身的旋转的。
所以在角色移动的代码中经常会发现:
Transform.TransformDirection
从自身坐标到世界坐标变换方向。
Transform.forward
在世界空间坐标变换的蓝色轴。也就是z轴。
其中transform.TransformDirection(new Vector3(0, 0, 1));的简写方式是transform.forward;
情景二:假设有一个人,他面对北方,他左手边有一台摄像机。
此时如果他以世界坐标系向前走。他将会向北方走,摄像机看到他是向"左"的。这样是错误的,想让角色向前走的话,角色就要向东方进行移动。可见,此时的"前"是从摄像机的角度上来讲的,所以就要考虑到摄像机的旋转角度。
我们的目标是,让角色"沿摄像机角度方向,前进",从代码角度上来说,就是:Quaternion*Vector3,好了,直接给出我们的代码!
using UnityEngine; using System.Collections; public class PlayerControl : MonoBehaviour { public float moveSpeed = 2f; public float rotateSpeed = 2f; void Update () { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); if (h != 0 || v != 0) { Vector3 targetDirection = new Vector3(h, 0, v); float y = Camera.main.transform.rotation.eulerAngles.y; targetDirection = Quaternion.Euler(0, y, 0) * targetDirection; transform.Translate(targetDirection * Time.deltaTime * moveSpeed,Space.World); } if (Input.GetKey(KeyCode.J)) { transform.Rotate(-Vector3.up * Time.deltaTime * rotateSpeed); } } }
相关文章推荐
- Unity教程之-让物体朝摄像机Camera观察方向移动(一)
- Unity中让一个物体通过方向键来移动的操作
- 如何将照相机移动到空间中的一点,并且观察方向朝向某一物体
- Unity 物体不旋转方向 向自身0-360度方向移动
- Unity游戏开发的数学与物理 3 ( 让物体延任意方向移动 )
- 基础代码--物体向手指滑向的方向移动
- Unity鼠标出屏幕后 摄像机跟随鼠标方向移动
- 关于Unity中物体分别在本地和世界坐标系对应方向的移动
- [unity基础教程] Unity3D 一个物体在两个物体间移动
- Unity 碰撞检测,触发检测,方向键控制物体移动
- 【Unity 3D学习】获取鼠标滑动方向(上下左右)-控制摄像机围绕物体旋转
- unity基础开发--鼠标移动物体并判断是否移动
- unity 根据鼠标的移动来旋转物体Rotate
- Unity3D里实现物体移动到目标点,并且摄像机跟着移动的简单方案
- Unity中使用鼠标控制相机的视口方向以及移动
- Unity摇杆控制物体移动c#脚本
- unity 赛车相机跟随物体移动
- unity中物体移动的3种方法
- unity笔记 0 - 添加物体,预制体;施加力;移动物体,旋转物体;相机跟随;禁用物体
- Unity3D【脚本】点击物体后屏幕放大 - (射线、坐标的转换、摄像机的移动和改变属性)