赞
踩
在使用Unity开发的时候,移动是最最基础的一个需求,我来给大家简单的讲一下Unity中的几种常见的移动方法。
Transform移动就是修改物体的position
①修改位置
这里要注意:坐标分为世界坐标和本地坐标
//将物体的世界坐标修改为(1,1,1)
transform.position = new Vector3(1, 1, 1);
//将物体的本地坐标修改为(2,2,2)
transform.localPosition = new Vector3(2, 2, 2);
②使用Translate()函数
private void Update()
{
//以恒定的速度向x方向移动
transform.Translate(2.0f* Time.deltaTime, 0, 0);
}
Time.deltatime 是两帧之间的间隔。因为设备无法保证稳定的帧率,物体移动速度就会因帧率出现不同。所以要加Time.deltatime 确保每秒移动同样的距离
Rigidbody赋予了游戏对象一些运动学上的属性,模拟真实世界的运动,包括 质量、阻力、重力、 碰撞检测、 速度、受力、爆炸力等
刚体移动首先要添加Rigidbody组件。
Rigidbody属性
Mass: 物体的质量
Drag: 物体受到的空气阻力大小
Angular Drag: 物体旋转时,受到的旋转阻力大小
Use Gravity: 如果启用,物体将受到重力的影响
Is Kinematic: 如果启用,物体将不会由物理引擎驱动,只能由 Transform 组件操作
Interpolate: 物体运动位置的插值器
Collision Detection: 碰撞检测类型,当看到物体由于运动太快而穿墙时,可以增强碰撞检测频率
Constraints: 对刚体运动和旋转的限制,限制物体运动时在某个坐标轴上的分量保持不变
①使用velocity
public Rigidbody mRigidbody;
void FixedUpdate()
{
mRigidbody.velocity = new Vector3(100 * Time.fixedDeltaTime, 0, 0);
}
②使用AddForce
public Rigidbody mRigidbody;
void Update()
{
mRigidbody.AddForce(100 * Time.fixedDeltaTime, 0, 0);
}
③使用MovePosition
public Rigidbody mRigidbody;
void Update()
{
mRigidbody.MovePosition(transform.position + Vector3.forward * 0.2f);
}
刚体移动首先要添加CharacterController组件。
代码示例:
public float m_Speed = 5; public CharacterController controller; void Start() { controller = this.gameObject.GetComponent<CharacterController>(); } void Update() { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); Vector3 dir = new Vector3(h * m_Speed, 0, v * m_Speed); controller.SimpleMove(dir); }
CharacterController有用两种移动实现方式,SimpleMove和Move。
① SimpleMove
② Move
Transform:不带重力和碰撞,移动不受物理引擎控制。非单机的游戏基本都是使用Transform移动,因为位置都是服务器发送过来,然后客户端同步。
Rigidbody:适用于实现真实的物理行为,可以模拟重力、惯性等效果。
CharacterController:适用于控制角色的移动和碰撞检测,但不受物理引擎的影响。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。