预制实例不会单独控制

时间:2019-11-05 18:48:06

标签: c# unity3d instance animator

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

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

 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);

}

}

事物应设置动画并分别执行操作,我不确定如何仅引用脚本的当前实例。

1 个答案:

答案 0 :(得分:1)

虽然您的代码不完整,不能肯定地说出问题,但看起来您使用的是静态变量。

静态属性与实例无关。换句话说,所有地精实例共享任何静态属性(isPunching,isHit,isDead等)。将这些值设为静态可以使您直接引用它们,而不必获取受影响的实例,但是却导致您立即更新所有地精。

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