[英]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.