首页 > 其他分享 >小人换装

小人换装

时间:2023-02-02 08:45:50浏览次数:37  
标签:换装 int List 小人 new bodys public Resources

//第一步是合并每个部件的网格

//第二步是合并材质球

//第三部是设置对应的骨头

//本脚本需挂载在对应avtar对象上,不然找不见对应骨头,无法实现效果

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

public class CombinePlayer : MonoBehaviour
{
public GameObject[] bodys;
public int touId = 2;
public int tuiId = 1;
public int yifuId = 1;
// Start is called before the first frame update
private void Awake()
{
gameObject.AddComponent<SkinnedMeshRenderer>();
//调用换装方法
ChangeSkirt();
}
void Start()
{

}

public void ChangeSkirt()
{
//数组中添加对应的头 衣服 腿

//通过Resources加载

//模型生成图片看博客内的《通过unity3D模型转出图片》
bodys[0] = Resources.Load<GameObject>("Body/tou" + touId);
bodys[1] = Resources.Load<GameObject>("Body/tui" + tuiId);
bodys[2] = Resources.Load<GameObject>("Body/yifu" + yifuId);

//所有骨头集合
Transform[] allbones = GetComponentsInChildren<Transform>();

//骨头存入字典
Dictionary<string, Transform> dicbones = new Dictionary<string, Transform>();

//找到并添加所有骨头
for (int i = 0; i < allbones.Length; i++)
{
dicbones.Add(allbones[i].name, allbones[i]);
}
List<Transform> bonds = new List<Transform>();

//合并的实例集合
List<CombineInstance> combines = new List<CombineInstance>();

//合并材质的集合
List<Material> materials = new List<Material>();
for (int i = 0; i < bodys.Length; i++)
{
CombineInstance combine = new CombineInstance();
combine.mesh = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().sharedMesh;
combine.transform = bodys[i].transform.localToWorldMatrix;
combines.Add(combine);
materials.Add(bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().sharedMaterial);
Transform[] bodybones = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().bones;
for (int j = 0; j < bodybones.Length; j++)
{
bonds.Add(dicbones[bodybones[j].name]);
}
}
Mesh mesh = new Mesh();
mesh.CombineMeshes(combines.ToArray());
GetComponent<SkinnedMeshRenderer>().sharedMesh = mesh;
GetComponent<SkinnedMeshRenderer>().materials = materials.ToArray();
GetComponent<SkinnedMeshRenderer>().bones = bonds.ToArray();
}
// Update is called once per frame
void Update()
{

}
}

标签:换装,int,List,小人,new,bodys,public,Resources
From: https://www.cnblogs.com/zanzz/p/17084725.html

相关文章

  • Unreal中的换装实现
    换装实现有两种思路,1. attach到相应的组件 2.拆分身体,衣服的部位和身体相连,对相应的身体部位的mesh进行替换第一种有些时候不方便,会有问题可以采用第2种方式。这里我......
  • 通过组合的达到换装效果
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassHuanzhaung1:MonoBehaviour{//蒙皮网格渲染器SkinnedMeshRender......
  • 「CSS畅想」好友想回忆童年,安排~为她做了一个果宝特攻的换装
    灵感来源昨天在群里回忆了一波童年动画,挺欢乐的。龙珠暂时没有画出来,好友说她想回忆童年,我可以找个别的动画先画着。之前有部动画,里面的角色形象都很可爱,而且有很多不同颜色......
  • 被小人陷害,该怎么办?
    我们平常在职场上,当然比拼的是能力和业绩,但偏偏有人比较倒霉,可能被小人陷害。这可不光是今天我们遇到的问题,战国时代的人一样会遇到类似的事情。 发生在战国时代的一个故事......
  • 2、CSS动画之行走的米兔、奔跑的小人
    米兔和奔跑的小人动画实现,利用css中的transition就可以实现,鼠标hover的时候,动态显示做的步骤如下:第一步:找到需要使用的米兔图片和小人图片,如下图: 第二部,右单击图片查看属性......
  • 君子周而不比,小人比而不周
    君子就是老板,他有实力,就要周遭地照顾大家。所以是周而不比。像我这样的程序员就是小人,小人有什么实力照顾大家呢?连自己都照顾不了。所以小人只有去依附别人,去追随别人。所......
  • CVPR2022| BodyMap可用于换装,Vision Transformers 又立功!
    整理:AI算法与图像处理CVPR2022论文和代码整理:https://github.com/DWCTOD/CVPR2022-Papers-with-Code-Demo欢迎关注公众号AI算法与图像处理,获取更多干货:大家好,  最近正在......
  • 厂用电快速切换装置
    厂用电快速切换装置适用范围     RSH-812厂用电快速切换装置,是基于我公司新一代嵌入式软硬件平台而研制的新型自动切换装置。是针对冶金、石化等行业用户的需求......