来自《Unity和C#游戏编程入门第五版》
角色移动的简单实现
玩家实体的创建
1.创建一个代表玩家的物体Player
2.为玩家物体增加Rigidbody组件,并选中Rigidbody组件内的Constraints属性Freeze Rotation的x、y选项框
获取玩家输入实现角色运动
1.在Scripts文件夹新建脚本PlayerBehavior
2.在脚本中设置左右控制方向(水平旋转),前后控制前进后退,保存并将脚本绑定代表玩家的物体Player
代码中Input.GetAxis("Vertical")
与Input.GetAxis("Horizontal")
的返回结果是0或1或-1,取决于按键的情况(什么按键与是否被按下)。在transform操作中*Time.deltaTime
是乘上一帧到现在这一帧的时间,以保证物体匀速运动。(因为Updata函数是每帧运行一次的,应该可以理解)
using UnityEngine;
public class PlayerBehavior : MonoBehaviour
{
void Start()
{
Debug.Log("PlayerBehavior is start");
}
public float moveSpeed = 10f;
public float rotateSpeed = 75f;
private float vInput;
private float hInput;
void Update()
{
vInput = Input.GetAxis("Vertical") * moveSpeed;
hInput = Input.GetAxis("Horizontal") * rotateSpeed;
this.transform.Translate(Vector3.forward * vInput * Time.deltaTime);
this.transform.Rotate(Vector3.up * hInput * Time.deltaTime);
}
}
3.运行,实现了角色运动
摄像机跟随
camOffset是摄像头距物体的偏移位置,LateUpdate在Update之后执行,TransformPoint用于返回相对位置的绝对位置,LookAt方法会使摄像机对准Player物体。
using UnityEngine;
public class CameraBehavior : MonoBehaviour
{
public Vector3 camOffset = new Vector3(0f, 1.2f, -2.6f);
private Transform target;
void Start()
{
target = GameObject.Find("Player").transform;
}
void LateUpdate()
{
this.transform.position = target.TransformPoint(camOffset);
this.transform.LookAt(target);
}
}
3.运行,实现了摄像机跟随