没有物理的碰撞

时间:2013-02-17 07:12:56

标签: unity3d

我正在尝试用最简单的物理学制作最简单的平台游戏原型(重力下降,左右移动,(可能)跳跃)。例如:

void Move () {
   if (!isDying || !isDead || !isShooting || !isFalling)
   {
     float amountToMove = Time.deltaTime * Input.GetAxis("Horizontal") * playerSpeed;
     transform.Translate(Vector3.right * amountToMove);
   }
}

void ApplyGravity() {

   float amountToMove = Time.deltaTime * gravity;
   transform.Translate(Vector3.down * amountToMove);

}

问题是我不知道如何在没有物理的情况下进行碰撞并且启用isKinematic。我唯一知道的是使用OnTriggerEnter函数,所以在所有对象中添加了一个isTrigger并编写了(Hero.cs):

 void OnTriggerEnter (Collider otherGameObjectCollider) {
   if (otherGameObjectCollider.gameObject.tag == "ground") {
     Debug.Log("ground/wall collision");
   }
}

我知道我需要阻止我的英雄来防止摔倒(行走)穿过地面,但我真的想不出来。

抱歉这个愚蠢的问题。

1 个答案:

答案 0 :(得分:0)

您可以使用英雄的isFalling标志来判断他是否堕落。试试这样:

void ApplyGravity() {
   if (isFalling) {
     float amountToMove = Time.deltaTime * gravity;
     transform.Translate(Vector3.down * amountToMove);
   }
}

void OnTriggerEnter (Collider otherGameObjectCollider) {
   if (otherGameObjectCollider.gameObject.tag == "ground") {
     Debug.Log("ground/wall collision");
     isFalling = false;
   }
}

当你的英雄离开平台而不是跳跃时,你应该将isFalling设置为真,以使他开始堕落。

也许你想尝试看看Unity官方演示:3D Platformer Tutorial。我相信它包含了构建平台游戏所需的所有技巧和方法。祝好运。 :)