在运行时

时间:2016-04-19 09:39:10

标签: c# unity3d

我有一个包含多个元素的网格(如body,head等)。

我已将其保存为预制,显示某些元素并隐藏其他元素(基本上在网格的编辑器层次结构中,我取消选中"蒙皮网格渲染器",用于我想要隐藏的内容);因此,当我实例化预制件时,它看起来总是一样的(当然是预期的)。

现在,我想随机化显示的元素,并改善视觉多样性;虽然我有要求,例如:

  • 1个身体和1个头
  • 1套头发
  • 1套武器(斧头或剑和盾牌或工作人员......)

等等;提出一个想法。

我该如何处理这个问题?我想将网格的每个元素分配给一个脚本,使用公共变量并将其附加到预制件上;然后在该脚本中创建规则以仅显示我需要的内容,而其余部分禁用蒙皮网格渲染器。

这意味着在词典的层次结构中添加各种元素,因此我可以随机选择每个类别(衣服,身体,武器,头部等)的一个元素。

public class CreateRandomGuy : MonoBehaviour
{
    public GameObject body;
    public GameObject body2;
    public GameObject body3;
    public GameObject weapon1;
    public GameObject weapon2;

    List<GameObject> bodies; 
    List<GameObject> weapons;

    public void RandomizeGuy()
    {

         bodies = new List<GameObject>(){
             body1,
             body2,
             body3
         };
         weapons = new List<GameObject>(){
             weapon1,
             weapon2
         };

         body_to_show = rnd.next(0,2);
         weapon_to_show = rnd.next(0,1);

         // instantiate mesh with ResourceLoad
         GameObject randomguy = Instantiate(Resources.Load("theguy"));
         // enable the skinned mesh rendered for the random element
         bodies[body_to_show].GetComponent<SkinnedMeshRenderer>.Enable(true);
         weapons[weapon_to_show].GetComponent<SkinnedMeshRenderer>.Enable(true);

    }

}

在纸上它起作用,在实施之前我想看看替代方案,可能(当然?)比我的方法更好。

0 个答案:

没有答案