【Unity】实现角色的移动、朝向以及摄像机跟随

实现效果

 

 1、角色移动和朝向

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour
{
    public float moveSpeed = 0.01f;      //角色移动速度
    private float h;
    private float v;
    private Vector3 dir;
    private void Update()
    {
        PlayerMove();
    }

    void PlayerMove()
    {
        h = Input.GetAxis("Horizontal");
        v = Input.GetAxis("Vertical");
        dir = new Vector3(h, 0, v);
        transform.LookAt(transform.position + dir);                 //角色朝向
        transform.Translate(dir * moveSpeed, Space.World);          //用Tranlate方法实现移动
    }
}

移动的实现方法很简单,用Input.GetAxis接收来自键盘的输入。

参数Horizontal代表水平方向,即A、D键,按下A\D键会持续返回一个0到-1/1之间的浮点数;Vertical代表垂直方向,即W、S键,按下W/S键同样会返回0到1/-1之间的浮点数。浮点数的大小取决于多久松开按键。

Horizantal、Vertical返回值图例

 

 将上图的D、S、A、W假设为东、南、西、北方向,原点是角色的位置,这样根据变量H、V,得到角色要移动的距离和方向。

实现移动时角色的朝向,就是以角色所在位置作为参考系,加上dir方向即可

 

2、摄像机跟随

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

public class CameraFollow : MonoBehaviour {

    private Transform p_tranform;
    private Vector3 CameraPos;

    private void Start()
    {
        p_tranform = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
        CameraPos = transform.position - p_tranform.position;                   //摄像机与跟随对象的距离
    }

    private void Update()
    {
        Vector3 Pos = CameraPos + p_tranform.position;
        transform.position = Vector3.Lerp(transform.position,Pos,0.05f);        //线性插值,实现摄像机跟随时的缓动
    }


}

 摄像机实现跟随,就是摄像机的位置 = 摄像机与跟随对象的距离 + 跟随对象的位置,摄像机与跟随对象的距离是固定的,可以由摄像机位置 - 跟随对象位置得到

Lerp方法,即线性插值,可以实现摄像机跟随时的缓动效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章