首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当玩家落水时,团结就失去了一条生命。

当玩家落水时,团结就失去了一条生命。
EN

Stack Overflow用户
提问于 2013-04-04 22:08:51
回答 1查看 3.5K关注 0票数 0

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

代码语言:javascript
复制
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次水,直到他回到原来的位置(复活位置)。

有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2013-04-09 19:35:32

想到的第一件事是:

  1. 在您的水GameObject上,添加一个Collider组件。我认为在这种情况下可以使用一个BoxCollider。不要忘记标记Is Trigger复选框。
  2. 在播放机GameObject上,同时添加一个RigidBody和一个CharacterController (因为它看起来像在使用CharacterController组件)。确保选中RigidBodyIs Kinematic复选框。同时,给GameObject一个有意义的标签,比如"Player“。
  3. 回到water GameObject,添加一个新脚本,如下所示: 公共类水: MonoBehaviour { void OnTriggerEnter(对撞机对撞机){ if(collider.CompareTag("Player")) { collider.SendMessage("Kill");}}
  4. 返回到player GameObject,添加一个新脚本,如下所示: 公共类播放器: MonoBehaviour { public void (){//执行所有必要步骤杀死该播放器,例如.//减少1//播放死亡声音//等}

这是事情的“玩笑”,或者说这至少会让你开始。团结有一些非常好的文档,实际上你需要的任何东西都在那里,你只需要知道去哪里看就行了。我不打算对上面提到的每一件事进行深入的讨论,因为正如我说过的,"Unity有一些非常好的文档。“考虑到这一点,我强烈建议调查我提到的每一件事情。希望这有帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15822633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档