一次停止多个实例化的对象

时间:2018-07-11 14:25:04

标签: c# visual-studio unity3d

所以我一直在用c#和unity开发Hololens应用程序,并且遇到了这个问题。

我目前拥有的设置: 实例化的GameObject预制件会自动播放动画。 每秒大约实例化两个游戏对象,最多约有60个停留在场景中,然后再删除。

我正在尝试做的事情: 单击按钮后,停止每个游戏对象上的所有动画。

我尝试使用以下方法在预制件上创建脚本,但没有一个起作用:

public void StopAnimation()
{
    anim = gameObject.GetComponent<Animation>();
    anim.Stop();
}

//also tried
public void StopAnimation()
{
    gameObject.GetComponent<Animation>().Stop();
}

//and have even tried destroying the gameobject 
public void StopAnimation(){
    Destroy(gameObject);
}

2 个答案:

答案 0 :(得分:0)

由于您没有在问题中提及脚本的名称,因此我将其称为StopAnimationScript

实例化预制件时,需要从新创建的实例中获取StopAnimationScript组件。

var stopAnimationScript = newInstance.GetComponent<StopAnimationScript>();

然后您需要将此引用存储在某个地方,例如List<StopAnimationScript>

myStopAnimationScripts.add(stopAnimationScript);

按下按钮时,您需要在每个实例上致电StopAnimation

foreach(var stopAnimationScript in mytopAnimationScripts) 
{
    stopAnimationScript.StopAnimation();
}

答案 1 :(得分:0)

好的,所以我实际上只是想通了,现在正将它发布给其他可能需要它的人。因此,基本上,我删除了预制板上的脚本,并转到附加到“停止”按钮的“ StopAnimationButtonScript”,并在按下按钮时插入了以下代码:

public void StopAnimations()
{
        foreach (GameObject CloneObject in GameObject.FindGameObjectsWithTag("*insert a custom tag like 'Clone'*"))
        {
            if (CloneObject.name == "*insert actual game object name here*")
            {
                CloneObject.GetComponent<Animation>().Stop();              
            }
        }
}

然后转到您的克隆预制件,并在“检查器”面板中的对象名称的正下方为其添加标签“克隆”或您自己的自定义标签。

谢谢大家的帮助!