unity 角色换装

unity角色换装的关键是更改角色部位上的物体的SkinnedMeshRenderer组件的属性:

更改mesh:mesh决定了部位的物体的外形,是主要的数据。

刷新骨骼:同一个部位下,不同的mesh受到的不同的骨骼的影响不同,因此更换mesh之后,还要更新SkinnedMeshRenderer下的骨骼列表的信息,也就是更换骨骼列表。

替换材质:一个SkinnedMeshRenderer下由多个材质作用,因此还需要更换材质列表。

 

操作过程为,从预制物体中获取的需要更换的相关部位的mesh,然后通过从预制物体的相关部位的SkinnedMeshRenderer下获取到影响该部位的骨骼列表,然后从场景角色的骨骼下获取到同名的骨骼列表,将该骨骼列表赋予到场景下角色的部位的SkinnedMeshRenderer下,并且获取到预制物体下该部位的材质列表,同样的将该列表赋予场景下角色的部位的SkinnedMeshRenderer下。

 

为了获取到更换的信息,需要由预制物体存储物体的相关信息。预制物体如下,每个部位下所有的物体都呈现,便于程序提取信息。

原模型如下:

场景下角色如下:

具体代码如下:

该脚本可以放在任何地方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AvatarSysDemo00 : MonoBehaviour
{public Transform role;//场景中的角色物体public GameObject rolePrefab;//预制物体public GameObject kuzi;//场景中角色物体下裤子物体public string[] kuziNames;//所有的用于替换的裤子的名字,用于再预制物体中找到相关的物体的信息public GameObject[] objs;//裤子相关的预制物体 int index = 0;//当前的装备索引public Transform[] hips;//角色的骨骼物体private void Awake(){hips = null;if (role)hips = role.GetComponentsInChildren<Transform>();//首先获取场景中角色下的骨骼列表for (int i = 0; i < kuziNames.Length; i++)//获取预制物体下的所有裤子物体
        {Transform kuziObj = rolePrefab.transform.Find(kuziNames[i]);objs[i] = kuziObj.gameObject;}}// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.Space))//设置为按下空格就切换一下裤子
        {Debug.Log(objs.Length);if (objs.Length == 0) return;index = (index + 1) % objs.Length;ChangeMesh(objs[index]);}}//换装public void ChangeMesh(GameObject part){SkinnedMeshRenderer smr = part.GetComponent<SkinnedMeshRenderer>();//获取预制物体下相关部位的SkinnedMeshRenderer//获取角色物体下与预制物体相关更换的Mesh部位下作用于该Mesh,再场景中与其同名的骨骼列表List<Transform> bones = new List<Transform>();foreach (Transform bone in smr.bones){foreach (Transform hip in hips){if (hip.name != bone.name){continue;}bones.Add(hip);break;}}kuzi.GetComponent<SkinnedMeshRenderer>().sharedMesh = smr.sharedMesh;//更改meshkuzi.GetComponent<SkinnedMeshRenderer>().bones = bones.ToArray();//更换(刷新)骨骼列表kuzi.GetComponent<SkinnedMeshRenderer>().materials = smr.sharedMaterials;//更换材质
    }
}

 

转载于:https://www.cnblogs.com/xiaoahui/p/unity.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop:pig 安装及入门示例

pig是hadoop的一个子项目&#xff0c;用于简化MapReduce的开发工作&#xff0c;可以用更人性化的脚本方式分析数据。 一、安装 a) 下载 从官网http://pig.apache.org下载最新版本(目前是0.14.0版本)&#xff0c;最新版本可以兼容hadop 0.x /1.x / 2.x版本&#xff0c;直接解压到…

LeetCode—289. 生命游戏

289. 生命游戏 题目描述&#xff1a; 根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初…

Java注解的基本概念和原理及其简单实用

一、注解的基本概念和原理及其简单实用 注解&#xff08;Annotation&#xff09;提供了一种安全的类似注释的机制&#xff0c;为我们在代码中添加信息提供了一种形式化得方法&#xff0c;使我们可以在稍后某个时刻方便的使用这些数据&#xff08;通过解析注解来使用这些数据&am…

LeetCode—295. 数据流的中位数(困难)

295. 数据流的中位数&#xff08;困难&#xff09; 题目描述&#xff1a; 中位数是有序列表中间的数。如果列表长度是偶数&#xff0c;中位数则是中间两个数的平均值。 例如&#xff0c; [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 3) / 2 2.5 设计一个支持以下两种操作的数…

android 中使用AsyncTask实现简单的异步编程

在开发移动客户端的时候往往要使用多线程来进行操作&#xff0c;我们通常会将耗时的操作放在单独的线程执行&#xff0c;避免其占用主线程而给用户带来不好的用户体验。但是在子线程中无法去操作主线程&#xff08;UI 线程&#xff09;&#xff0c;在子线程中操作UI线程会出现错…

LeetCode—52. N皇后 II(困难)

52. N皇后 II&#xff08;困难&#xff09; 题目描述&#xff1a; n 皇后问题研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。即令其中任意两个皇后都不同列、同行和在一条斜线上。 给你一个整数 n &#xff0c;返回 n 皇后问题不…

win10 子系统 ubuntu 16.04 安装 docker

2&#xff0c;更新系统软件 $ sudo apt-get update 3&#xff0c;安装依赖包 $ sudo apt-get install \apt-transport-https \ca-certificates \curl \software-properties-common 4&#xff0c;添加官方密钥 执行该命令时&#xff0c;如遇到长时间没有响应说明网络连接不到doc…

解析 Page.MaintainScrollPositionOnPostBack 属性

ASP.NET 的页面执行 PostBack 动作时&#xff0c;页面由伺服端重新传给客户端&#xff0c;而页面的垂直滚动条会跳回最上方&#xff0c;水平滚动条会跳回最左方。为了解决此情形&#xff0c;只要将 Page 的MaintainScrollPositionOnPostBack 属性设为True 时&#xff0c;页面就…

Maven 3-Maven依赖版本冲突的分析及解决小结

摘自&#xff1a; https://www.cnblogs.com/aspirant/p/8532962.html 举例A依赖于B及C&#xff0c;而B又依赖于X、Y&#xff0c;而C依赖于X、M&#xff0c;则A除引B及C的依赖包下&#xff0c;还会引入X&#xff0c;Y&#xff0c;M的依赖包&#xff08;一般情况下了&#xff0c;…

LeetCode—297. 二叉树的序列化与反序列化(困难)

297. 二叉树的序列化与反序列化&#xff08;困难&#xff09; 题目描述&#xff1a; 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;…

一个简单粗暴的前后端分离方案

项目背景 刚刚参加完一个项目&#xff0c;背景&#xff1a;后端是用java&#xff0c;后端服务已经开发的差不多了&#xff0c;现在要通过web的方式对外提供服务&#xff0c;也就是B/S架构。后端专注做业务逻辑&#xff0c;不想在后端做页面渲染的事情&#xff0c;只向前端提供数…

LeetCode—54. 螺旋矩阵

54. 螺旋矩阵 题目描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 考察重点&#xff1a;使用全局变量way数组&#xff0c;配合变量n记录走的方向&#xff1b;nowX&#xff0c;nowY记录当前位置&am…

iBATIS.NET 学习笔记(八)

在iBATIS.NET 学习笔记(五)中的DataGrid中加入删除功能&#xff0c;删除客户信息。修改Maps/Customers.xml,在statements标记中加入下面代码&#xff1a;<delete id"DeleteCustomer"parameterClass"string">delete from Customers where CustomerID#…

PowerShell实现批量收集SCVMM中虚拟机IP-续

因为本人技术提升了&#xff0c;所以这个脚本又改进了&#xff0c;得益于同事给我悉心教导c#语法&#xff0c;这个脚本更好用了。废话不多说&#xff0c;直接上代码。#powerd by 九叔 #批量从VMM和Hyper-V中获取IP地址&#xff0c;方便比对。更准确。 #转载必须注明出处&#x…

C/S框架-WebService架构用户凭证(令牌)解决方案

C/S框架-WebService架构用户凭证(令牌)解决方案 http://www.csframework.com/archive/5/arc-5-20110520-1504.htm C/S框架高级版引用WebService技术&#xff0c;WebService架构的应用系统不可忽视其安全性&#xff0c;WebServcie页面(*.asmx)提供了一组接口(WebMethod,Web方法)…

LeetCode—299. 猜数字游戏

299. 猜数字游戏 题目描述&#xff1a; 你在和朋友一起玩 猜数字&#xff08;Bulls and Cows&#xff09;游戏&#xff0c;该游戏规则如下&#xff1a; 写出一个秘密数字&#xff0c;并请朋友猜这个数字是多少。朋友每猜测一次&#xff0c;你就会给他一个包含下述信息的提示&…

有关集中用户的问题

集中用户应该有一个“所属管理插件”的字段&#xff0c;记录此用户的出处&#xff0c;比如“内部员工”&#xff0c;即由“内部控制台”插件管理。 那么用户 staff_tommy 的“所属管理插件”的字段值为“InternelWebControlPanel”. 系统内核插件提供一个扩展点为“UserPro…

mobile web retina 下 1px 边框解决方案

http://www.tuicool.com/articles/ZRv6bun 再谈mobile web retina 下 1px 边框解决方案 时间 2015-01-03 12:03:31 Hugo Web前端开发原文 http://www.ghugo.com/css-retina-hairline/主题 WebKit iOS CSS本文实际上想说的是ios8下 1px解决方案。 1px的边框在devicePixelRatio…

LeetCode—55. 跳跃游戏

55. 跳跃游戏 题目描述&#xff1a; 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 考察重点&#xff1a;由前至后遍历数组&#xff0c;maxPos记录我们当…

Rust下载和安装

2019独角兽企业重金招聘Python工程师标准>>> 1、在Linux和Mac上安装Rust&#xff1a; 在Linux和Mac上安装Rust(稳定的二进制)的一个简单的方法&#xff0c;只需要在shell中运行以下命令&#xff1a; $ curl -sSf https://static.rust-lang.org/rustup.sh | sh 一个…