A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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方法,即线性插值,可以实现摄像机跟随时的缓动效果
---------------------
【转载,仅作分享,侵删】
作者:吾亦烦
原文:https://blog.csdn.net/Dawson_Ho/article/details/84863095
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马