C# 在预设的单个实例上设置animator参数将为所有实例设置参数

C# 在预设的单个实例上设置animator参数将为所有实例设置参数,c#,animation,unity3d,C#,Animation,Unity3d,我创建了一个预置,目的是创建同一游戏对象的多个实例。然而,虽然我希望所有这些实例都使用相同的动画和动画控制器,但我希望能够独立地控制每个实例的状态 我的预设当前由精灵渲染器、脚本、框碰撞器2D和动画制作程序组成。动画师有一个动画控制器,该控制器有两个状态,使用布尔参数进行控制 该脚本包含以下代码: private Animator _animator; private bool _isAlive; private void Start() { _animator = gameObjec

我创建了一个预置,目的是创建同一游戏对象的多个实例。然而,虽然我希望所有这些实例都使用相同的动画和动画控制器,但我希望能够独立地控制每个实例的状态

我的预设当前由精灵渲染器、脚本、框碰撞器2D和动画制作程序组成。动画师有一个动画控制器,该控制器有两个状态,使用布尔参数进行控制

该脚本包含以下代码:

private Animator _animator;
private bool _isAlive;

private void Start()
{
    _animator = gameObject.GetComponent<Animator>();
}

void Update ()
{
    if (Input.GetMouseButtonDown(0))
    {
        var hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
        _isAlive = hit.collider == null;
    }

    _animator.SetBool("isAlive", _isAlive);
}
动画都是使用精灵图纸创建的

因此,在我的示例中,我希望动画师仅为已单击的游戏对象设置动画。点击检测部分工作正常,但当点击任何游戏对象时,游戏对象的所有实例都会产生动画。

感谢我通过更改以下内容解决了我的问题:

_isAlive = hit.collider == null;


我错误地认为光线投射是在游戏对象的上下文中,而不是在整个场景中。

你的问题实际上比这更简单。由于您构造更新函数的方式,该脚本的每个实例将在播放器每次单击时运行相同的检查。你有多个动画师,但你告诉他们做同一件事。修改你的支票;将其拉入另一个只针对一个对象的脚本中,或者让每个对象检查它是否被单击。创建预置实例时,脚本是否未在该实例的上下文中运行?例如,假设这些游戏对象不重叠,我希望上面的代码将所有未单击的对象设置为_isAlive=true,将单击的单个对象设置为_isAlive=false。是的,有点像。每个实例都在发射和评估自己的光线投射,但您告诉每个实例执行完全相同的操作。您可以做的最简单的更改是检查光线投射是否击中了我的碰撞器,是否与脚本实例相关。
_isAlive = hit.collider == gameObject.GetComponent<BoxCollider2D>();