• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Unity第三人称让人物始终朝向相机方向移动

武飞扬头像
大马叔
帮助1

不知道如何制作简易第三人称相机的同学可以看我的这篇文章:Unity如何实现第三人称相机跟随

我们在开发第三人称游戏过程中很容易遇到:我们的玩家角色,他面对北方,背后有一台摄像机,正巧也是面对北方。现在,他向右转90度,面对东方。此时如果让他向前走,那么会出现两种情况。
1.以自身坐标系向前走。他将会向眼睛直视的方向走,实际上他是向东方走,摄像机看到他是向"右"。

2.以世界坐标系向前走。他将会向北方走,摄像机看到他是向"前"。
由此可见,如果相机旋转了的话,人物没有同步旋转,那么以自身坐标系进行移动往往会发生错误,所以在游戏中角色的移动一般都是以世界坐标系进行移动。以世界坐标系进行移动的话,是不考虑物体自身的旋转的。

由此可见,我们需求上的“向前”实际上是从摄像机的角度上出发的,所以势必需要考虑到摄像机的旋转角度,我们的目标是,让角色沿摄像机角度方向前进,从代码角度上来说,就是:Quaternion*Vector3。即四元数旋转的轴向与角度乘以向量,后面具体阐释,先上代码:

  1.  
    using System.Collections;
  2.  
    using System.Collections.Generic;
  3.  
    using UnityEngine;
  4.  
     
  5.  
    public class _Move : MonoBehaviour {
  6.  
     
  7.  
    public float moveSpeed = 3f;
  8.  
     
  9.  
    void Update()
  10.  
    {
  11.  
    float x = Input.GetAxis("Horizontal");
  12.  
    float z = Input.GetAxis("Vertical");
  13.  
     
  14.  
    Vector3 targetDirection = new Vector3(x, 0, z);
  15.  
    float y = Camera.main.transform.rotation.eulerAngles.y;
  16.  
    targetDirection = Quaternion.Euler(0, y, 0) * targetDirection;
  17.  
    transform.Translate(targetDirection * Time.deltaTime * moveSpeed, Space.World);
  18.  
    }
  19.  
    }
学新通

 以下三行代码初学者较难懂,我给出具体解释:

        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
系列文章
更多 icon
同类精品
更多 icon
继续加载