Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一次停止多个实例化对象_C#_Visual Studio_Unity3d - Fatal编程技术网

C# 一次停止多个实例化对象

C# 一次停止多个实例化对象,c#,visual-studio,unity3d,C#,Visual Studio,Unity3d,所以我一直在用c#和unity开发全息透镜应用程序,并且遇到了这个问题 我当前拥有的设置: 一旦实例化,自动播放动画的游戏对象预制。 每秒大约有两个游戏对象被实例化,最多有60个对象在被删除之前留在场景中 我想做的是: 单击按钮,停止每个游戏对象上的所有动画 我曾尝试使用以下方法在预制件上创建脚本,但均无效: public void StopAnimation() { anim = gameObject.GetComponent<Animation>(); anim.

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

我当前拥有的设置: 一旦实例化,自动播放动画的游戏对象预制。 每秒大约有两个游戏对象被实例化,最多有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);
}
public void StopAnimation()
{
anim=gameObject.GetComponent();
动画停止();
}
//也试过
公共void StopAnimation()
{
gameObject.GetComponent().Stop();
}
//甚至尝试过摧毁游戏对象
公共void StopAnimation(){
摧毁(游戏对象);
}

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

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

var stopAnimationScript = newInstance.GetComponent<StopAnimationScript>();
按下按钮时,需要在每个实例上调用
StopAnimation

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

好的,所以我实际上刚刚弄明白了,现在我把它发布给其他可能需要它的人。因此,基本上我删除了预置上的脚本,并转到“StopAnimationButtonScript”,该脚本附在Stop按钮上,并在按下按钮时插入以下代码:

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();              
            }
        }
}
public void StopAnimations()
{
foreach(GameObject.FindGameObjectsSwithTag(“*插入一个自定义标记,如“克隆”*”)中的GameObject CloneObject)
{
如果(CloneObject.name==“*在此处插入实际游戏对象名称*”)
{
CloneObject.GetComponent().Stop();
}
}
}
然后转到克隆预制,并在inspector面板中的对象名称正下方为其指定标记“克隆”或您自己的自定义标记


感谢所有帮助过你的人

如何从按钮中调用StopAnimation?“但没有一个成功”-这是什么意思?他们一直在做动画吗?它们消失了吗?他们一直在实例化吗?虽然这个答案有效,但对我来说似乎不是一个好的实践。最好将此类对象的列表存储在某个位置,并在创建对象时将其添加到此列表中。若要停止动画,请遍历列表并停止它们。对,但如果游戏对象达到某个点,我将销毁它,如果它们都相同,我如何知道或脚本如何知道要删除列表中的哪个实例?如果(__;in list){,您可以这样做。
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();              
            }
        }
}