Unity3d 当玩家落水时,UNITY将失去一条生命
我想改变玩家每次落水时的生命数量。到目前为止,我编写了以下代码:Unity3d 当玩家落水时,UNITY将失去一条生命,unity3d,collision-detection,Unity3d,Collision Detection,我想改变玩家每次落水时的生命数量。到目前为止,我编写了以下代码: 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.B
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次,直到他回到原来的位置(重生位置)
有人能帮我吗?首先想到的是:
游戏对象
,添加一个碰撞器
组件。我认为BoxCollider
适合这种情况。不要忘记标记是触发器
复选框游戏对象
上,添加刚体
和角色控制器
(因为看起来您正在使用角色控制器
组件)。确保选中刚体
的为运动学
复选框。另外,给你的GameObject
一个有意义的标签,比如“Player”游戏对象
,添加一个新脚本,该脚本应如下所示:
public class Water : MonoBehaviour {
void OnTriggerEnter(Collider collider) {
if(collider.CompareTag("Player")) {
collider.SendMessage("Kill");
}
}
}
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.
}
}
GameObject
,添加一个新脚本,该脚本应如下所示:
public class Water : MonoBehaviour {
void OnTriggerEnter(Collider collider) {
if(collider.CompareTag("Player")) {
collider.SendMessage("Kill");
}
}
}
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有一些非常好的文档。”考虑到这一点,我强烈建议大家研究一下我提到的每一件事。希望这有帮助!=) 你想知道什么?基本上我怎样才能防止?当玩家落水时,有没有办法只失去一条生命,而不是50或100条生命?当你第一次落水时,挂上一面旗子。仅在未设置标志的情况下扣减寿命。在你确定你不再只是重复地撞到水上之后,清除旗帜。或者,以某种方式重新编写代码,这样你就不会连续100次快速落水,也许可以暂时移除玩家(他确实死了,对吧?)。我如何设置旗帜?你是说一个变量吗?感谢您的帮助,将尝试itA标志也被称为布尔变量。所以,当你失去生命时,将布尔值设为true,然后检查该布尔值,如果为true,则不扣除生命。如果布尔值为false,则减去一个life。