繁体   English   中英

统一3D脚本

[英]Scripting in unity 3d

我在Unity3D中遇到问题。 我拥有与玩家和敌人相同的健康脚本。 我想在玩家死亡时显示游戏结束消息,但问题是玩家和敌人死亡时都会出现游戏结束消息。

我的代码如下所示:

public class CharacterStats : MonoBehaviour 
{
    // Use this for initialization
    void Start () 
    {
    }

    // Update is called once per frame
    void Update () 
    {
        health = Mathf.Clamp (health, 0, 100);
    }

    public void damage(float damage)
    {
        health -= damage;
        if(health<=0)
        {
            Die();
            Application.LoadLevel(gameover);
        }
    }

    void Die()
    {
        characterController.enabled = false;
        if (scriptstodisable.Length == 0)
            return;
                 foreach (MonoBehaviour scripts in scriptstodisable)

                scripts.enabled = false;
                 if (ragdollmanger != null)
                     ragdollmanger.Raggdoll();
    }
}

当您同时为玩家和敌人使用1个脚本时。 您应该为这两者使用不同的类,并实现一个接口或从基类派生以实现运行状况:

public class Character : MonoBehaviour 
{
    public float Health;

    public virtual void Damage(float damageValue) 
    {
        Health -= damageValue;
    }

    public virtual void Die()
    {

    }
}

public Enemy : Character
{
    public override void Die()
    {
        // do enemy related stuff
    }
}

public Player : Character
{   
    public override void Die()
    {
        // do player related stuff.
        // like game over screen
    }
}

希望这可以帮助 :)

您可以使用bool来检查CharacterStats是否已附加到玩家,例如,通过在玩家游戏对象上添加一个名为”Player”的标签并检查gameObject.tag == “Player” ,或者可以等效地命名游戏对象如果需要,请”Player”并检查gameObject.name

然后,仅当游戏对象是玩家( isPlayer为true)时,才可以运行游戏结束消息功能。

public class CharacterStats : MonoBehaviour 
{
    bool isPlayer = false;

    // Use this for initialization
    void Start () 
    {
        if(gameObject.tag == “Player”) 
        {
            isPlayer = true;
        }      
    }

    // Update is called once per frame
    void Update () 
    {
        health = Mathf.Clamp (health, 0, 100);
    }

    public void damage(float damage)
    {
        health -= damage;
        if(health<=0)
        {
            if(isPlayer)
            {
                // Do Player-only stuff
            }

            // Do Stuff for both players and enemies
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM