2D项目中控制角色移动(按帧率)
1.不涉及物理效果
using UnityEngine;
public class ControlScripts : MonoBehaviour
{
// 将速度暴露出来,使其可调
public float speed = 0.1f;
// 每帧调用一次 Update
void Update()
{
// 固定写法,获取当前水平轴的输入
float horizontal = Input.GetAxis("Horizontal");
// 固定写法,获取当前垂直轴的输入
float vertical = Input.GetAxis("Vertical");
// 获取当前2D对象的坐标(x,y)保存到变量position中
Vector2 position = transform.position;
// 当前坐标+速度*水平轴输入*每一帧渲染需要的时间(按帧率来计算位移距离确保不同帧率的情况下位移距离一致)然后赋值给当前对象的x坐标
position.x = position.x + speed * horizontal * Time.deltaTime;
// 同上
position.y = position.y + speed * vertical * Time.deltaTime;
// 把更改后的坐标重新赋值给当前2D对象 实现位移
transform.position = position;
}
}
2.有物理效果(碰撞)去除碰撞颤抖
using UnityEngine;
public class ControlScripts : MonoBehaviour
{
// 声明一个刚体对象
Rigidbody2D rigidbody2D;
public float horizontal;
public float vertical;
public float speed = 0.1f;
private void Start()
{
rigidbody2D = GetComponent<Rigidbody2D>();
}
// 每帧调用一次 Update
void Update()
{
// 固定写法,获取当前水平轴的输入
horizontal = Input.GetAxis("Horizontal");
// 固定写法,获取当前垂直轴的输入
vertical = Input.GetAxis("Vertical");
}
// 按固定时间间隔刷新
private void FixedUpdate()
{
// 获取当前2D对象的坐标(x,y)
Vector2 position = transform.position;
// 当前坐标+速度*水平轴输入*每一帧渲染需要的时间(按帧率来计算位移距离确保不同帧率的情况下位移距离一致)然后赋值给当前对象的x坐标
position.x = position.x + speed * horizontal * Time.deltaTime;
// 同上
position.y = position.y + speed * vertical * Time.deltaTime;
// 把更改后的坐标重新赋值给当前2D刚体对象 实现位移(这种方式碰撞不会颤抖)
rigidbody2D.position = position;
}
}

浙公网安备 33010602011771号