我在一个关卡中设置了多个敌人,所有敌人都使用相同的行为和动画脚本。当我击中或杀死其中之一时,所有人都被击中或杀死。我需要它们充当单独的实例。
我尝试仅引用脚本的一个实例:
private GoblinBehaviour goblin;
goblin = GetComponent<GoblinBehaviour>();
goblin.IncrementHits(1);
但这不起作用。出现错误,表明脚本无法使用实例访问,而需要一种类型。
点击检测脚本的代码:
public class RangedDetection : MonoBehaviour
{
private GoblinBehaviour goblin;
void OnTriggerEnter(Collider other)
{
//on colliding destroy rocks after its life time
Destroy(gameObject, rockLifeTime);
if (other.gameObject.tag.Equals("Enemy"))
//if (other.tag == "Enemy")
{
Destroy(other.gameObject);
}
else if (other.gameObject.tag.Equals("Goblin"))//goblin should play
death animation
{
goblin = GetComponent<GoblinBehaviour>();
goblin.IncrementHits(1);
GetComponent<BoxCollider>().enabled = false; //Removing hit
collider so it only hits target once.
}
}
}
地精脚本的简化代码:
public class GoblinBehaviour : MonoBehaviour
{
Transform player;
public static bool isDead;
public static bool isPunching;
public static bool isHit;
public GameObject particles;
public Animator anim;
public void IncrementHits(int hitCount)
{
isHit = true;
hits += hitCount;
if (hits >= 2) isDead = true;
}
void Die()
{
Instantiate(particles, transform.position, transform.rotation);
Destroy(gameObject);
}
void updateAnim()
{
anim.SetBool("Punch_b", isPunching);
anim.SetBool("hit", isHit);
}
}
事物应设置动画并分别执行操作,我不确定如何仅引用脚本的当前实例。
答案 0 :(得分:1)
虽然您的代码不完整,不能肯定地说出问题,但看起来您使用的是静态变量。
静态属性与实例无关。换句话说,所有地精实例共享任何静态属性(isPunching,isHit,isDead等)。将这些值设为静态可以使您直接引用它们,而不必获取受影响的实例,但是却导致您立即更新所有地精。
您的解决方案将涉及从GoblinBehaviour属性中删除静态修饰符,除非要在所有实例之间共享该属性。