我希望每次玩家击中水时都能改变生命的数量。我到目前为止编写了这段代码:
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 :(得分:0)
首先想到的是:
GameObject
上添加Collider
组件。我认为BoxCollider
适合这种情况。不要忘记标记Is Trigger
复选框。GameObject
上,添加RigidBody
和CharacterController
(因为看起来您正在使用CharacterController
组件)。务必检查RigidBody
的{{1}}复选框。另外,请为Is Kinematic
提供一个有意义的标签,例如“播放器”。回到水GameObject
,添加一个看起来像这样的新脚本:
GameObject
返回播放器public class Water : MonoBehaviour {
void OnTriggerEnter(Collider collider) {
if(collider.CompareTag("Player")) {
collider.SendMessage("Kill");
}
}
}
,添加一个看起来像这样的新脚本:
GameObject
这是事情的“主义”,或者至少应该让你开始。 Unity有一些非常好的文档,几乎你需要的任何东西都在那里,你只需要知道在哪里看。我不会深入研究上面提到的每一件事,因为正如我所说,“Unity有一些非常好的文档。”考虑到这一点,我强烈建议调查我提到的每一件事。希望这可以帮助! =)