一:相机跟随原理:

unity相机跟随是一个很常见的需求,这里的原理就是相机的位置和主角的位置有个差 值,一旦主角移动相机根据这个插值进行更新相机的位置就好了,另外需要平滑变化相机的角度。

 主要是利用了Vector3.Lerp对位置进行插值,Quaternion.Slerp适合对角度进行插值。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerFollowCamera : MonoBehaviour
{

    private Transform Player;

    public float speed = 1f;

    // Start is called before the first frame update
    void Start()
    {
        Player = GameObject.FindGameObjectWithTag("Player").transform;
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 targetPos = this.Player.transform.position + new Vector3(0, 2.42f, -2.42f);
        transform.position = Vector3.Lerp(transform.position, targetPos, speed * Time.deltaTime);
        // 这两个位置不能反哦
        Quaternion targetRotation = Quaternion.LookRotation(Player.position - transform.position);
        transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);
    }
}

 二:主角移动,利用Input.GetAxis()来获得主角来具体朝向哪个方向,通常由两个参数:“Horizontal”,“Vertical”,

这里记作:float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");

h > 0 方向是世界坐标系下x轴的正方向 v> 0 方向是世界坐标系下的z轴的正方向。

1: 转向: 

        利用transform.LookAt(dir); 但是这个点dir并不是主角的位置,而是主角的位置加上向量(h,0,v)

2:移动:利用的是unity自带的组件CharacterController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{

    private CharacterController cc;
    public float moveSpeed = 2f;
    // Start is called before the first frame update
    void Start()
    {
        cc = GetComponent<CharacterController>();
    }

    // Update is called once per frame
    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        if(Mathf.Abs(h) >= 0.01 || Mathf.Abs(v) >= 0.01)
        {
            Vector3 dir = new Vector3(h, 0, v);

            transform.LookAt(transform.position + dir);

            cc.SimpleMove(transform.forward * moveSpeed);
            
        }

    }
}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐