四、角色视觉和旋转(朝向)

替换player的美术效果

在空对象“palyer”下的子集拖入角色模型即可。

控制角色转向

将下面这行代码加入到上一篇笔记中后,我们的角色就可以在运动过程中始终看向前方了。

transform.forward = moveDir;//有许多种使角色向前(向某个方向看)的方法,可在拓展中查阅。
完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{

    public float moveSpeed = 7f;//这个会在unity编辑器中增加一个move speed的输入框方便控制角色移动的速度。

//注意Update的首字母必须大写,相关的学习笔记在飞书中可以找到
 private void Update(){
    //声明一个2维向量,初始值为(0,0),x的值为0,y的值为0.
    Vector2 inputVector = new Vector2(0,0);
    //键入W
    if (Input.GetKey(KeyCode.W)){
       inputVector.y = +1;//当键入W时,向量中的y值+1
    }
    //键入A
     if (Input.GetKey(KeyCode.A)){
        inputVector.x = -1;//当键入A时,向量中的x值-1
    }
    //键入S
     if (Input.GetKey(KeyCode.S)){
        inputVector.y = -1;//当键入S时,向量中的y值-1
    }
    //D
     if (Input.GetKey(KeyCode.D)){
        inputVector.x = +1;//当键入A时,向量中的x值-1
    }

    inputVector = inputVector.normalized;//向量归一,在飞书文档中给出了详细的解释。

    Vector3 moveDir = new Vector3(inputVector.x, 0f, inputVector.y);//将原来二维向量中的xy的值分别赋予给三维向量中的x和z,y值为0.
    //transform 访问某个东西
    transform.position += moveDir * moveSpeed * Time.deltaTime;//跟transform.position = transform.position + moveDir是一个意思。 乘以Time.deltaTime是渲染一帧需要的时间。避免帧数较高时,角色跑到屏幕外找不到角色位置。

    transform.forward = moveDir;//有许多种使角色向前(向某个方向看)的方法,可在拓展中查阅。

}
}

使转向过程更加平滑

替换上一段控制角色转向的代码

transform.forward = Vector3.Slerp(transform.forward,moveDir,Time.deltaTime);//角色随着时间推移不断朝运动的方向转向。

角色转向速度过慢

经过测试你会发现角色转向的过程十分缓慢这个时候我们声明了一个变量让转向速度变快。

拓展

transform.eulerAngles

https://docs.unity.cn/cn/2020.2/ScriptReference/Transform-eulerAngles.html

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注