0

我想在玩家每次下水时改变生命的数量。到目前为止,我写了这段代码:

public var dieSound:AudioClip;
static var lives = 3;

function Start () {

}

function Update () {
if(lives == 0)
{
Application.LoadLevel("menu");
}
}

public function OnGUI()
{
GUI.backgroundColor = Color.blue;
GUI.Button (Rect (10, 10, 100, 30), "Lives: " + lives);
}

function OnControllerColliderHit (hit : ControllerColliderHit)
{
if (hit.collider.tag == "Water")
{
// play dying sound
audio.PlayOneShot(dieSound);

// show mission fail UI
GameObject.Find("MissionTXT").guiText.enabled = true;
// wait until it's ended
yield WaitForSeconds(dieSound.length + 0.01);
transform.position = GameObject.FindWithTag("Respawn").transform.position;

if (transform.position == GameObject.FindWithTag("Respawn").transform.position)
{
GameObject.Find("MissionTXT").guiText.enabled = false;
lives = lives - 1;
}
}
}

问题是当玩家下水时,生命值会从 3 变为 -120。我认为这是因为玩家在水面上停留了 6-7 秒。所以角色可能会打水 120 次,直到他回到原来的位置(重生位置)。

有人可以帮我吗?

4

1 回答 1

0

首先想到的是:

  1. 在你的水上GameObject,添加一个Collider组件。我认为 aBoxCollider适合这种情况。不要忘记标记Is Trigger复选框。
  2. 在您的 playerGameObject上,添加 aRigidBody和 a CharacterController(因为看起来您正在使用该CharacterController组件)。确保选中RigidBody'Is Kinematic复选框。另外,给你GameObject一个有意义的标签,比如“玩家”。
  3. 回到 water GameObject,添加一个应该如下所示的新脚本:

    public class Water : MonoBehaviour {
        void OnTriggerEnter(Collider collider) {
            if(collider.CompareTag("Player")) {
                collider.SendMessage("Kill");
            }
        }
    }
    
  4. 回到播放器GameObject,添加一个应该如下所示的新脚本:

    public class Player : MonoBehaviour {
        public void Kill() {
            //Perform all necessary steps to kill the player such as...
            //Reduce the amount of lives by 1
            //Play the death sound
            //etc. etc. etc.
        }
    }
    

这就是事情的“要点”,或者这至少应该让你开始。Unity 有一些非常好的文档,几乎你需要的任何东西都在那里,你只需要知道在哪里看。我不会深入讨论我上面提到的每一件事,因为正如我所说,“Unity 有一些非常好的文档。” 考虑到这一点,我强烈建议查看我提到的每一件事。希望这可以帮助!=)

于 2013-04-09T19:35:32.920 回答