0

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

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");
   }
}

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

抱歉这个愚蠢的问题。

4

1 回答 1

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为 true 以使他开始下落。

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

于 2013-02-18T06:10:14.047 回答