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次,直到他回到原来的位置(重生位置)。
任何人都可以帮助我吗?
答
,想到的第一件事是:
- 在你的水
GameObject
,添加Collider
组件。我认为BoxCollider
适合这种情况。不要忘记标记Is Trigger
复选框。 - 在你的播放器
GameObject
上,同时添加一个RigidBody
和一个CharacterController
(因为它看起来像你使用的是CharacterController
组件)。确保检查RigidBody
的Is Kinematic
复选框。此外,给你的GameObject
一个有意义的标签,如“播放器”。 -
回到水
GameObject
,添加一个新的脚本,应该是这个样子:public class Water : MonoBehaviour { void OnTriggerEnter(Collider collider) { if(collider.CompareTag("Player")) { collider.SendMessage("Kill"); } } }
-
回到玩家
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有一些非常好的文档。”考虑到这一点,我强烈建议研究我提到的每一件事情。希望这可以帮助! =)
你想知道什么? – 2013-04-04 22:10:30
基本上我怎么能防止呢?玩家在水中失去一次生命而不是50或100时有什么办法吗? – shieldcy 2013-04-04 22:11:18
第一次打水时设置一个标志。只有在没有设置标志的情况下才能扣除寿命。确定你不是再次重复打水。或者,以某种方式重做你的代码,这样你就不会快速连续击中水100次,也许可以暂时移除玩家(他死了,对吗?)。 – 2013-04-04 22:12:12