Unity第三人称让人物始终朝向相机方向移动
不知道如何制作简易第三人称相机的同学可以看我的这篇文章:Unity如何实现第三人称相机跟随
我们在开发第三人称游戏过程中很容易遇到:我们的玩家角色,他面对北方,背后有一台摄像机,正巧也是面对北方。现在,他向右转90度,面对东方。此时如果让他向前走,那么会出现两种情况。
1.以自身坐标系向前走。他将会向眼睛直视的方向走,实际上他是向东方走,摄像机看到他是向"右"。
2.以世界坐标系向前走。他将会向北方走,摄像机看到他是向"前"。
由此可见,如果相机旋转了的话,人物没有同步旋转,那么以自身坐标系进行移动往往会发生错误,所以在游戏中角色的移动一般都是以世界坐标系进行移动。以世界坐标系进行移动的话,是不考虑物体自身的旋转的。
由此可见,我们需求上的“向前”实际上是从摄像机的角度上出发的,所以势必需要考虑到摄像机的旋转角度,我们的目标是,让角色沿摄像机角度方向前进,从代码角度上来说,就是:Quaternion*Vector3。即四元数旋转的轴向与角度乘以向量,后面具体阐释,先上代码:
-
using System.Collections;
-
using System.Collections.Generic;
-
using UnityEngine;
-
-
public class _Move : MonoBehaviour {
-
-
public float moveSpeed = 3f;
-
-
void Update()
-
{
-
float x = Input.GetAxis("Horizontal");
-
float z = Input.GetAxis("Vertical");
-
-
Vector3 targetDirection = new Vector3(x, 0, z);
-
float y = Camera.main.transform.rotation.eulerAngles.y;
-
targetDirection = Quaternion.Euler(0, y, 0) * targetDirection;
-
transform.Translate(targetDirection * Time.deltaTime * moveSpeed, Space.World);
-
}
-
}
以下三行代码初学者较难懂,我给出具体解释:
Vector3 targetDirection = new Vector3(x, 0, z);
Unity默认方向:
首先我们需要获取到世界轴的正方向,即上面的Horizontal代表x轴,Vertical代表z轴,于是我们把获取到的世界轴方向先赋值给targetDirection
float y = Camera.main.transform.rotation.eulerAngles.y;
光知道方向显然不够,我们还需要获取到摄像机的旋转角度,我们拖动摄像机rotation属性可以轻松得知,我们左右视角的变换是由它的rotation里面y值决定的
targetDirection = Quaternion.Euler(0, y, 0) * targetDirection;
这一步尤为重要,它的几何含义是让先前的targetDirection向量绕y轴旋转y度,也就是实现让人物的方向向量随着摄像机的角度变化而发生变化。其中对四元数有兴趣的同学可以点进去具体了解。
最后一行移动代码里的Space.World可以提一下,我们平常可能会隐藏此参数不报错,因为不写会默认为Space.Self坐标系。
PS:World坐标系是固定的方向,不会随着物体的旋转而改变。
Self坐标系会随着自身的旋转而改变。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfkiiie
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24