Unity3d 使用循环行为逐个显示10个单独的网格以创建;动画";空的游戏对象?

Unity3d 使用循环行为逐个显示10个单独的网格以创建;动画";空的游戏对象?,unity3d,mesh,gameobject,Unity3d,Mesh,Gameobject,我有10个网格,每个基本上都是鲸鱼游泳动画的“定格帧” 如果我循环显示这些网格,那么它将创建一个伪动画,这就是我想要的 如何做到这一点?目前我有GameObjectAnimTest,我已经将10个mesh.obj文件作为子文件放到了它上面。我已经在游戏对象的脚本changeMeshes中使用了以下代码: using System.Collections; using System.Collections.Generic; using UnityEngine; public class chan

我有10个网格,每个基本上都是鲸鱼游泳动画的“定格帧”

如果我循环显示这些网格,那么它将创建一个伪动画,这就是我想要的

如何做到这一点?目前我有GameObject
AnimTest
,我已经将10个mesh.obj文件作为子文件放到了它上面。我已经在游戏对象的脚本
changeMeshes
中使用了以下代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class changeMeshes : MonoBehaviour
{
     //Create array of the meshes
    public float[] currentMesh; 

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        for (int i = 0; i < 10; i++)
        {
            currentMesh[i].gameObject.GetComponent<MeshRenderer>().enabled = true;
        }
    }
}

现在的结果是,只有最后一个网格被永久渲染,而不是脚本在循环中循环通过网格。如何使网格循环?

嗯。。浮点数没有属性
。gameObject
。。甚至
Mesh
也不会

既然你说这些对象是这个组件的子对象,你可以简单地遍历它们

然后我只需激活和停用整个
游戏对象

听起来你想做的是

public类changeMeshes:monobhavior
{
//切换到下一个网格之前,一个网格应显示多长时间
[SerializeField]专用浮点timePerMesh=0.2f;
公共单位事件;
私有IEnumerator Start()
{
//获取此对象的直接子对象的数量
var childCount=transform.childCount;
//生第一个孩子
var currentChild=transform.GetChild(0);
//遍历所有直接子级
foreach(变换中的变换子对象)
{
//将除第一个子对象以外的所有对象设置为非活动
child.gameObject.SetActive(child==currentChild);
}
//遍历其余的直接子级
对于(变量i=1;i
这是因为您正在使用一个浮点数组并调用其中不存在的.gameObject。我继续,并对代码进行了更好的尝试。我编辑了这篇文章来展示这个新代码。基本上,我试图在循环中一个接一个地显示网格。我创建了函数
CycleLoop
,希望它能使网格启用当前[I]网格(并关闭以前启用的网格),但由于某种原因,当我点击
Play
时,只启用阵列中最后一个网格。根本没有循环行为。有什么办法解决这个问题吗?好的,现在很酷。它非常有效,而且是一种非常容易理解的方法。谢谢你在这个问题上提出了很好的解决方案!!很高兴看到它工作。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class changeMeshes : MonoBehaviour

{
    //Create array of the meshes
    public GameObject[] whaleMeshes;

    void FindWhales()
    {    
        whaleMeshes = GameObject.FindGameObjectsWithTag("WhaleMesh");    
        print(whaleMeshes.Length);
    }

    void CycleWhales()
    {
        for (int i = 0; i < whaleMeshes.Length; i++)
        {
            if (i > 0)
            {
                whaleMeshes[i - 1].gameObject.GetComponentInChildren<MeshRenderer>().enabled = false;
            }

            whaleMeshes[i].gameObject.GetComponentInChildren<MeshRenderer>().enabled = true;
        }
    }
    // Start is called before the first frame update
    void Start()
    {
        FindWhales();
    }

    // Update is called once per frame
    void Update()
    {
        CycleWhales();
        
    }
}