C# unity 3d中的脚本编写

C# unity 3d中的脚本编写,c#,unity3d,monodevelop,C#,Unity3d,Monodevelop,我在Unity3D中遇到了一个问题。我有相同的健康脚本附加到玩家和敌人。我想在玩家死亡时显示游戏结束消息,但问题是玩家和敌人死亡时都会显示游戏结束消息 我的代码是这样的: public class CharacterStats : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Up

我在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();
    }
}
公共类CharacterStats:MonoBehavior
{
//用于初始化
无效开始()
{
}
//每帧调用一次更新
无效更新()
{
健康=数学钳(健康,0,100);
}
公共空间损坏(浮动损坏)
{
健康-=损害;

if(health当您为玩家和敌人使用1个脚本时。您应该为这两个脚本使用不同的类,并实现一个接口或从基类派生来实现health:

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
    }
}


希望这对您有所帮助:)

因为您对玩家和敌人都使用了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”
,或者您可以将游戏对象等价地命名为“玩家”
,并选中
gameObject.name
,如果您愿意的话

然后,只有当游戏对象是玩家(
isPlayer
为true)时,才可以通过消息运行游戏功能

公共类CharacterStats:MonoBehavior
{
bool isPlayer=false;
//用于初始化
无效开始()
{
如果(gameObject.tag==“玩家”)
{
isPlayer=true;
}      
}
//每帧调用一次更新
无效更新()
{
健康=数学钳(健康,0,100);
}
公共空间损坏(浮动损坏)
{
健康-=损害;

如果(健康您可以使用bool检查玩家是否附加了
CharacterStats
,例如,向玩家游戏对象添加名为
“player”
的标记,并检查
gameObject.tag==“player”
,或者您可以将游戏对象等价地命名为“玩家”
,并选中
gameObject.name
,如果您愿意的话

然后,只有当游戏对象是玩家(
isPlayer
为true)时,才可以通过消息运行游戏功能

公共类CharacterStats:MonoBehavior
{
bool isPlayer=false;
//用于初始化
无效开始()
{
如果(gameObject.tag==“玩家”)
{
isPlayer=true;
}      
}
//每帧调用一次更新
无效更新()
{
健康=数学钳(健康,0,100);
}
公共空间损坏(浮动损坏)
{
健康-=损害;

如果(健康)您可以添加一个描述角色类型(玩家或敌人)的枚举,并且仅当枚举的值==玩家时才显示“死亡”消息您可以添加一个描述角色类型(玩家或敌人)的枚举,并且仅当枚举的值==玩家时才显示“死亡”消息标记是一个字符串,并且应该用双引号括起来,如下所示:
if(gameObject.tag==“Player”)
。谢谢@padonald。这是一个愚蠢的打字错误。它现在对你有用吗,@yasirkan?标签是一个字符串,应该用双引号括起来,如下所示:
如果(gameObject.tag==“Player”)
。谢谢@padonald。这是一个愚蠢的打字错误。现在对你有用吗,@yasirkan?