首页 > 其他分享 >通过组合的达到换装效果

通过组合的达到换装效果

时间:2022-12-30 18:57:30浏览次数:35  
标签:换装 组合 效果 List 网格 sk 子级 bones new

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

public class Huanzhaung1 : MonoBehaviour
{
//蒙皮网格渲染器
SkinnedMeshRenderer skinned;
public GameObject[] bodys;
Dictionary<string, Transform> dicbones = new Dictionary<string, Transform>();
// Start is called before the first frame update
void Start()
{
skinned = gameObject.AddComponent<SkinnedMeshRenderer>();//给骨骼添加蒙皮网格渲染器
Transform[] allbones = GetComponentsInChildren<Transform>();//获取所有子级的transform


for (int i = 0; i < allbones.Length; i++)//遍历所有子级
{
dicbones.Add(allbones[i].name, allbones[i]);//将所有子级添加进字典 方便后边查找
}
}
public void Huan()
{
List<CombineInstance> combines = new List<CombineInstance>();//创建动态合并对象集合
List<Material> materials = new List<Material>();//创建材质球集合
List<Transform> bones = new List<Transform>();//这是等会自身赋值的集合


for (int i = 0; i < bodys.Length; i++)//遍历你要换装的那个数组
{
SkinnedMeshRenderer sk = bodys[i].GetComponentInChildren<SkinnedMeshRenderer>();//将每个需要换装的身体部位的子级的蒙皮网格渲染器获取到
CombineInstance combine = new CombineInstance();//创建动态合并对象
combine.mesh = sk.sharedMesh;//将动态合并对象赋值
combines.Add(combine);//将动态合并对象添加到集合
materials.Add(sk.sharedMaterial);//添加材质球
for (int j = 0; j < sk.bones.Length; j++)//遍历你的获取到的子级的蒙皮网格渲染器里边的骨骼数组
{
if (dicbones.ContainsKey(sk.bones[j].name))//判断之前放入字典中的所有骨头有没有和需要换装的骨头的名称一致的
{
bones.Add(dicbones[sk.bones[j].name]);//如果有就把骨头放入等会给自身赋值的集合
}
}
}
Mesh mesh = new Mesh();
mesh.CombineMeshes(combines.ToArray(), false, false);//将所有网格进行合并
skinned.sharedMesh = mesh;//网格赋值
skinned.materials = materials.ToArray();//材质球赋值
skinned.bones = bones.ToArray();//骨骼数组赋值
}
// Update is called once per frame
void Update()
{

}
}

标签:换装,组合,效果,List,网格,sk,子级,bones,new
From: https://www.cnblogs.com/zanzz/p/17015636.html

相关文章

  • python 排列组合器
    可以求任意类型的组合笛卡尔乘积等itertools组合生成器无限迭代器有限迭代器组合生成器生成不重复的组合foriinitertools.combinations('ABCDE',4):......
  • RxJava 合并组合两个(或多个)Observable数据源
    关键词:合并ObservableRxJava系列教程:​​1.RxJava使用介绍​​​​【视频教程】​​​​2.RxJava操作符  ​​•CreatingObservables(Observable的创建操作符)​......
  • C# PPT 为形状设置三维效果
    在PPT中,形状是非常重要的元素。3-D形状,立体多元,给人耳目一新的感觉。在幻灯片中添加3-D效果形状,必然会为PPT的整体效果增色不少。为形状设置三维格式时,可设置棱台,轮廓线,表面......
  • 快捷键组合
    快捷键组合ctrl+c复制ctrl+v粘贴ctrl+a全选ctrl+x剪切ctrl+z撤销ctrl+s保存shift+delete永久删除(对比普通删除:进入回收站)ctrl+shift+esc打开任务管理器(最......
  • Luogu6620 组合数问题 - 第二类斯特林数 -
    题目链接:https://www.luogu.com.cn/problem/P6620题解:其实就一个式子证明可以利用这个式子找一下规律$$k\binom{n}{k}=n\binom{n-1}{k-1}$$回到原题,把多项式拆开之......
  • [JZOJ5215]【HEOI、SXOI2017】组合数问题
    Description求∑i=0ik+r≤nkCik+rnkmodp其中1≤n≤109,0≤r<k≤50,2≤p≤230−1Solution考虑组合数的实际意义有nk个物品,取的物品数模k等于r的方案数设Fi,j表示前i个物......
  • C#中组合快捷键的实现
     //方法一.在form_load的时候写上        // this.KeyPreview=true;         //表示窗体接受按键事件        //然后在KeyDown事件中写入......
  • 组合优于继承的理解
    前言首先,广为流传的“组合优于继承”的说法是一种不严谨的翻译,其来源如下:(众多设计模式强调的两个个最核心原则《DesignPatterns:ElementsofReusableObject-Oriented......
  • 文字效果
    多行文字垂直居中  <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scal......
  • 【实用】场景中缺乏几何信息的情况下,使用反射器标记来提高激光SLAM定位效果
    以下内容来自从零开始机器人SLAM知识星球每日更新内容点击领取学习资料→机器人SLAM学习资料大礼包论文#WhenGeometryisnotEnough:UsingReflectorMarkersin......