赞
踩
通常我自己制作玩家移动并且是物理的时候,我都喜欢自己去写。
这样就可以控制刚体跳跃,飞行等复杂多样的物理运动。对于移动来说可以直接设置刚体的速度。例如
在FixedUpdate中
r.velocity = 根据玩家输入的方向。
如果这时候如果碰到了墙壁,例如面向墙壁45度,这时候就被卡住了,游戏通常会用脸茨(贴)着墙壁移动。
那么这里需要判断,如果玩家按下了按键,并且不在地面的时候,物理材质给一个系统默认的刚体材质0.6,0.6,如果玩家在地面,那么需要给刚体一个Zero摩擦物理材质,这样可以降低移动中碰到墙体无法移动的问题。
可以借鉴FinalIK中的控制代码。如下:
if (r == null)
{
r = GetComponent<Rigidbody>();
r.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ;
}
if (zeroFrictionMaterial == null)
{
// Physics materials
zeroFrictionMaterial = new PhysicMaterial();
zeroFrictionMaterial.dynamicFriction = 0f;
zeroFrictionMaterial.staticFriction = 0f;
zeroFrictionMaterial.frictionCombine = PhysicMaterialCombine.Minimum;
zeroFrictionMaterial.bounciness = 0f;
zeroFrictionMaterial.bounceCombine = PhysicMaterialCombine.Minimum;
}
if (highFrictionMaterial == null)
{
highFrictionMaterial = new PhysicMaterial();
}
// Set the collider to high friction material
protected void HighFriction() {
capsule.material = highFrictionMaterial;
}
// Set the collider to zero friction material
protected void ZeroFriction() {
capsule.material = zeroFrictionMaterial;
}
//在FixedUpdate中还要加上
if (userControl.state.move == Vector3.zero && groundDistance < airborneThreshold * 0.5f)
HighFriction();
else
ZeroFriction();
这样就可以实现物理移动了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。