Unity3d 使用循环行为逐个显示10个单独的网格以创建;动画";空的游戏对象?
我有10个网格,每个基本上都是鲸鱼游泳动画的“定格帧” 如果我循环显示这些网格,那么它将创建一个伪动画,这就是我想要的 如何做到这一点?目前我有GameObjectUnity3d 使用循环行为逐个显示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
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();
}
}