换装基础(蒙皮渲染器)

效果,(此处使用了轮转图,随笔里面记的有,可以查看之前写的)

 

 

1,换装代码

 

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

public class ChangeOfOutfit : MonoBehaviour
{

public GameObject[] bodys;//合体数组
void Start()
{
ChangeOfOutfits();//封装一个方法目的是多次调用,因为每次更换GameObject之后都需要重新给赋值,不然不会有变化
}

public void ChangeOfOutfits()
{
//1,网格合并
Mesh mesh = new Mesh();
List<CombineInstance> combines = new List<CombineInstance>(); //合并实例数组
for (int i = 0; i < bodys.Length; i++)
{
CombineInstance combine = new CombineInstance();
combine.mesh = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().sharedMesh;//蒙皮网格渲染器 sharedMesh分开网格
combines.Add(combine);//存储到集合
}
mesh.CombineMeshes(combines.ToArray(), false, false);//CombineMeshes 结合网格 通过合并实例存储的网格 然后获取数组给mesh
GetComponent<SkinnedMeshRenderer>().sharedMesh = mesh;//重新赋值给蒙皮网格渲染器 此处是合并后的
//2.材质球
List<Material> materials = new List<Material>();//渲染集合存储渲染
for (int i = 0; i < bodys.Length; i++)
{
//注意:body如果已经实例化可以使用material,如果没有实例化就使用SharedMaterial,SharedMaterial是材质球的本体不是材质球的复制品
materials.Add(bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().sharedMaterial);//获取每一块的渲染
}
GetComponent<SkinnedMeshRenderer>().materials = materials.ToArray();//最后赋值给蒙皮网格渲染器
//3.骨骼
//找到自己的全部骨头
Transform[] allbones = GetComponentsInChildren<Transform>();//骨骼存放位置数组
//每块骨骼都有单独的名字,要使用名字相同的骨骼来匹配网格
//所以把骨骼以名称存储字典方便查找
Dictionary<string, Transform> dic = new Dictionary<string, Transform>(); //字典存储 骨骼的名字和对应位置
foreach (var bone in allbones)
{
dic.Add(bone.name, bone);//存入字典
}
//建立一个集合存储我需要使用的骨骼
List<Transform> mybones = new List<Transform>();
//循环所有部位,找到该部位要使用的骨骼,并将该骨骼对应名称的自己的骨骼存储集合
for (int i = 0; i < bodys.Length; i++)
{
//该部位要使用的骨骼
Transform[] bodybones = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>().bones;
for (int j = 0; j < bodybones.Length; j++)
{
if (dic.ContainsKey(bodybones[j].name))
{
//字典里的才是自己的骨骼
mybones.Add(dic[bodybones[j].name]);
}
}

}
GetComponent<SkinnedMeshRenderer>().bones = mybones.ToArray();//给骨骼赋值数组
}
}

2,此处的小人是通过照相机实现的

3,关于赋值实现换装  图1是惯性结束后获得对应得到的ID(下标) 然后赋值 图2 赋值完毕后确认,实现重新蒙皮网格渲染人物 实现换装

 

 

 

 

 

 

 实现方法 1,对应位置放入 Raw Image

 

 

2,需要一个照相机照到角色,然后创建  RenderTexture

 

 

 

 3,设置层级,层级自己添加

 

posted @   天分丶张三  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示