我正在制作一个有两个角色的3D益智平台游戏。您可以使用输入在字符之间来回切换。我正在使用物理学来控制角色。我希望我的唯一一个角色能够一次在一个轴(X轴或Z轴)上推拉块。对于我正在设计的拼图,我还希望另一个角色站在方块上,以将他移动到更高的壁架上,但是除非对象是运动学的,否则我不能这样做。 (这意味着当角色站立在刚体上时不满足地面检查的要求)
我也做不了什么,所以跳到块上的字符成为对象的子代,因此它随对象一起移动。
我该怎么办?
我尝试在连接到播放器的Rigidbodies上使用Unity API中的以下代码,但还是没有运气。
还提供了我的物理控制器的地面检查。
public float pushPower = 2.0f;
void OnCollisionEnter(Collision hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
// no rigidbody
if (body == null || body.isKinematic)
return;
// We dont want to push objects below us
if (hit.transform.position.y < -0.3f)
return;
// Calculate push direction from move direction,
// we only push objects to the sides never up and down
Vector3 pushDir = new Vector3(hit.transform.position.x, 0, hit.transform.position.z);
// If you know how fast your character is trying to move,
// then you can also multiply the push velocity by that.
// Apply the push
body.velocity = pushDir * pushPower;
}
public virtual void Jump()
{
// conditions to do this action
bool jumpConditions = isGrounded && !isJumping;
// return if jumpCondigions is false
if (!jumpConditions) return;
// trigger jump behaviour
jumpCounter = jumpTimer;
isJumping = true;
// trigger jump animations
if (_rigidbody.velocity.magnitude < 1)
animator.CrossFadeInFixedTime("Jump", 0.1f);
else
animator.CrossFadeInFixedTime("JumpMove", 0.2f);
}
现在使用代码,一旦角色与对象碰撞,该对象就会滑开。