u3d简单的第三人称人物移动与相机跟随

前言:


最近在做ARPG游戏,由于没有涉及到鼠标控制镜头旋转的功能,故此脚本不适用于FPS游戏。

人物移动:

public class HeroMove : MonoBehaviour
{
    public float rotateSpeed = 10;
    public float moveSpeed = 10;

    private void Update()
    {
        //水平输入
        float hor = Input.GetAxis("Horizontal");

        float ver = Input.GetAxis("Vertical");
        
        //有水平或者垂直输入
        if (hor != 0 || ver != 0)
        {
            //水平输入对应X轴         垂直输入对应Z轴
            Vector3 dir = new Vector3(-hor, 0, -ver);
            MovementRotation(dir);
        }
    }

    private void MovementRotation(Vector3 dir)
    {
        Quaternion targetDir = Quaternion.LookRotation(dir);
        //插值:Lerp
        transform.rotation = Quaternion.Lerp(transform.rotation, targetDir, Time.deltaTime * rotateSpeed);
        
        transform.Translate(0, 0, Time.deltaTime * moveSpeed);
    }
}

相机跟随:

public class TheCameraFollows : MonoBehaviour
{
    public Transform player;
    public float moveSpeed = 2;
    //相对位置
    private Vector3 relativePosition;

    private void Start()
    {
        relativePosition = transform.position - player.position;
    }

    private void LateUpdate()
    {
        Vector3 cameraPos = player.position + relativePosition;
        transform.position = cameraPos; //始终在中心(不建议用Lerp)
    }
}

关于脚本中的一些3dMath知识:


Vector3 vect = t1.position - t2.position;    //大小:vect.Distance(t1.position - t2.position);  方向:指向t1

transform.rotation = Quaternion.Lerp(transform.rotation, targetDir, Time.deltaTime * rotateSpeed); 
//物体随着targetDir的变化而变化(旋转)

计算物体右前方50度,16m处坐标

 private void Update()
    { 
        //1. 前方 16m
        Vector3 vect = new Vector3(0, 0, 16);
       
        //2. vect向量随当前物体旋转而旋转
        vect = transform.rotation * vect;

        //3. 沿着 Y轴旋转40度
        vect = Quaternion.Euler(0, 40, 0) * vect;
         
        //4. 将右前方50度16m处坐标移动到当前物体
        vect = transform.position + vect;
    }

写在最后:


游戏中涉及很多3D数学的知识,比如两个物体的位置判定,人物的旋转,人物的移动等。所以在学u3d的同时学习点3D数学的知识还是很有必要的。

本人处于u3d学习中,欢迎各个小伙伴来拍砖呦~~让我们共同进步吧!

你可能感兴趣的:(unity3d)