UNITY当玩家击中水时失去一个生命

问题描述:

我想改变玩家每次击中水时的生命数。我写了这个代码至今:UNITY当玩家击中水时失去一个生命

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次,直到他回到原来的位置(重生位置)。

任何人都可以帮助我吗?

+0

你想知道什么? – 2013-04-04 22:10:30

+0

基本上我怎么能防止呢?玩家在水中失去一次生命而不是50或100时有什么办法吗? – shieldcy 2013-04-04 22:11:18

+0

第一次打水时设置一个标志。只有在没有设置标志的情况下才能扣除寿命。确定你不是再次重复打水。或者,以某种方式重做你的代码,这样你就不会快速连续击中水100次,也许可以暂时移除玩家(他死了,对吗?)。 – 2013-04-04 22:12:12

,想到的第一件事是:

  1. 在你的水GameObject,添加Collider组件。我认为BoxCollider适合这种情况。不要忘记标记Is Trigger复选框。
  2. 在你的播放器GameObject上,同时添加一个RigidBody和一个CharacterController(因为它看起来像你使用的是CharacterController组件)。确保检查RigidBodyIs Kinematic复选框。此外,给你的GameObject一个有意义的标签,如“播放器”。
  3. 回到水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. 
        } 
    } 
    

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