首页 文章

一次停止多个实例化对象

提问于
浏览
0

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

我目前拥有的设置:GameObject预制件一旦实例化,就会自动播放动画 . 大约两个GameObjects每秒被实例化,最多约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

    既然你没有在问题中提到脚本的名称,我会称之为 StopAnimationScript

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

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

    那么你需要在某个地方存储这个引用,比如 List<StopAnimationScript>

    myStopAnimationScripts.add(stopAnimationScript);
    

    按下按钮时,需要在每个实例上调用 StopAnimation

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

    好的,所以我实际上只是想出来了,现在我发布给任何可能需要它的人 . 所以基本上我删除了预制件上的脚本,然后转到附加到Stop按钮的“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();              
                }
            }
    }
    

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

    谢谢所有帮助过的人!

相关问题