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