C# unity 3d中的脚本编写
我在Unity3D中遇到了一个问题。我有相同的健康脚本附加到玩家和敌人。我想在玩家死亡时显示游戏结束消息,但问题是玩家和敌人死亡时都会显示游戏结束消息 我的代码是这样的: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
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?