使用物理学拉/推3D统一对象

时间:2019-07-11 03:49:36

标签: c# unity3d physics collision rigid-bodies

我正在制作一个有两个角色的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);
        }

现在使用代码,一旦角色与对象碰撞,该对象就会滑开。

0 个答案:

没有答案