C# 预制件的实例是';我们不能单独控制

C# 预制件的实例是';我们不能单独控制,c#,unity3d,instance,animator,C#,Unity3d,Instance,Animator,我在一个关卡中设置了多个敌人,所有敌人都使用相同的行为和动画脚本。当我击中或杀死他们中的一个时,他们都会被击中或杀死。我需要它们作为单独的实例运行 我已尝试仅引用脚本的一个实例: private GoblinBehaviour goblin; goblin = GetComponent<GoblinBehaviour>(); goblin.IncrementHits(1); 事情应该分别进行动画和动作,我不确定如何仅引用脚本的当前实例。虽然您的代码不完整,而且

我在一个关卡中设置了多个敌人,所有敌人都使用相同的行为和动画脚本。当我击中或杀死他们中的一个时,他们都会被击中或杀死。我需要它们作为单独的实例运行

我已尝试仅引用脚本的一个实例:

 private GoblinBehaviour goblin;
  goblin = GetComponent<GoblinBehaviour>();
        goblin.IncrementHits(1);

事情应该分别进行动画和动作,我不确定如何仅引用脚本的当前实例。

虽然您的代码不完整,而且问题无法确定,但看起来您使用的静态不正确

静态属性是实例分析的。换句话说,您的所有地精实例都共享任何静态属性(isPunching、isHit、isDead等)。将这些值设置为静态可以让您直接引用它们,而无需获取您影响的实例,但会导致您一次更新所有地精


您的解决方案将涉及从GoblinBehavior属性中删除静态修饰符,除非这些属性要在所有实例中共享。

请提供您的GoblinBehavior脚本。看起来您使用的是静态方法,而不是实例方法。@Erik Edited,thanks@Lady您的“simplified”
GoblinBehavior
脚本不会产生有问题的错误:(“出现一个错误,该错误表示无法使用实例访问脚本,而需要一个类型”)。寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。看:你的“点击”属性也是静态的吗@女士
   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);

}

}