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
版权声明:本文为博主原创文章,转载请附上博文链接!
|
|