当前位置: 首页 > 编程日记 > 正文

[Unity3D]Unity3D连衣裙实现游戏开发系统

大家好,我是秦培。欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei。

不知从什么时候開始,国产RPG单机游戏開始出现换装,仙剑系列中第一部实现了换装的游戏是仙剑奇侠传四,后来原上海软星团队。眼下的烛龙科技更是在/《古剑奇谭》中将换装发挥到了极致。

我们来看几组图片吧:



换装从某种意义上来说就是改变角色的外观。尽管没有什么特别有用的功能,但从视觉上能够打破以往PRG游戏一套行头走天下的尴尬局面,所以换装还是非常不错的。那么从技术上来讲,换装主要分为两类:

一、添加式换装

所谓添加式换装,就是指角色模型的身体是一个完整的网格。须要更换的部分仅仅是一个可拆卸的部件。因而换装实际上就是在特定的部位添加或者移除一个模型。这类换装通经常使用在角色的武器更换中,仙剑、古剑的武侠更换都是这样的类型,如图所看到的的鱼骨头仅仅是在手这个位置更换模型:


二、更新式换装

更新式换装是指角色拥有一个公共的骨骼网络和针对该模型的若干组贴图。

那么,此时的换装实际上就是将贴图贴到相应的位置实现角色外观的改变,仙剑四严格来讲应该不算是换装,它实际上是做了两套模型(琼华装/野人装)。

古剑奇谭的换装实际上就是这样的类型的换装。这里我们以以下的一个样例,来一起学习怎样实现这样的类型的换装。

首先我们创建一个Unity项目:

首先我们去下载官方提供的换装的样例,我们这里仅仅须要里面的模型。由于这个模型提供了多组贴图能够供我们使用。我们将模型拖拽到场景中,我们展开模型能够发现模型是有若干个部分组成的,每个模型都有一个SkinnedMeshRenderer组件,改变该组件的材质,我们就能够实现对特定部位的换装。由此。我们写出了以下的代码:

using UnityEngine;
using System.Collections;public class ChangeSkin : MonoBehaviour {//眼睛贴图public Texture2D[] TextureEyes;//面部贴图-前public Texture2D[] TextureFace1;//面部贴图-后public Texture2D[] TextureFace2;//头发贴图-前public Texture2D[] TextureHair1;//头发贴图-后public Texture2D[] TextureHair2;//下衣贴图-前public Texture2D[] TexturePants1;//下衣贴图-后public Texture2D[] TexturePants2;//上衣贴图-前public Texture2D[] TextureTop1;//上衣贴图-后public Texture2D[] TextureTop2;//鞋子贴图-前public Texture2D[] TextureShoes1;//鞋子贴图-后public Texture2D[] TextureShoes2;//与贴图相应的SkinnedMeshRendererSkinnedMeshRenderer MeshEyes;SkinnedMeshRenderer MeshFace1;SkinnedMeshRenderer MeshFace2;SkinnedMeshRenderer MeshHair1;SkinnedMeshRenderer MeshHair2;SkinnedMeshRenderer MeshPants1;SkinnedMeshRenderer MeshPants2;SkinnedMeshRenderer MeshTop1;SkinnedMeshRenderer MeshTop2;SkinnedMeshRenderer MeshShoes1;SkinnedMeshRenderer MeshShoes2;void Start () {//获取SkinnedMeshRendererMeshEyes=transform.Find("eyes").GetComponent<SkinnedMeshRenderer>();MeshFace1=transform.Find("face-1").GetComponent<SkinnedMeshRenderer>();MeshFace2=transform.Find("face-2").GetComponent<SkinnedMeshRenderer>();MeshHair1=transform.Find("hair-1").GetComponent<SkinnedMeshRenderer>();MeshHair2=transform.Find("hair-2").GetComponent<SkinnedMeshRenderer>();MeshPants1=transform.Find("pants-1").GetComponent<SkinnedMeshRenderer>();MeshPants2=transform.Find("pants-2").GetComponent<SkinnedMeshRenderer>();MeshTop1=transform.Find("top-1").GetComponent<SkinnedMeshRenderer>();MeshTop2=transform.Find("top-2").GetComponent<SkinnedMeshRenderer>();MeshShoes1=transform.Find("shoes-1").GetComponent<SkinnedMeshRenderer>();MeshShoes2=transform.Find("shoes-2").GetComponent<SkinnedMeshRenderer>();}void OnGUI(){if(GUILayout.Button("显示外装1",GUILayout.Height(30))){SetSkin(MeshEyes,TextureEyes[0]);SetSkin(MeshFace1,TextureFace1[0]);SetSkin(MeshFace2,TextureFace2[0]);SetSkin(MeshHair1,TextureHair1[0]);SetSkin(MeshHair2,TextureHair2[0]);SetSkin(MeshPants1,TexturePants1[0]);SetSkin(MeshPants2,TexturePants1[0]);SetSkin(MeshTop1,TextureTop1[0]);SetSkin(MeshTop2,TextureTop2[0]);SetSkin(MeshShoes1,TextureShoes1[0]);SetSkin(MeshShoes2,TextureShoes2[0]);}if(GUILayout.Button("显示外装2",GUILayout.Height(30))){SetSkin(MeshEyes,TextureEyes[1]);SetSkin(MeshFace1,TextureFace1[1]);SetSkin(MeshFace2,TextureFace2[1]);SetSkin(MeshHair1,TextureHair1[1]);SetSkin(MeshHair2,TextureHair2[1]);SetSkin(MeshPants1,TexturePants1[1]);SetSkin(MeshPants2,TexturePants1[1]);SetSkin(MeshTop1,TextureTop1[1]);SetSkin(MeshTop2,TextureTop2[1]);SetSkin(MeshShoes1,TextureShoes1[1]);SetSkin(MeshShoes2,TextureShoes2[1]);	}}private void SetSkin(SkinnedMeshRenderer mRenderer,Texture2D mTexture){mRenderer.material.mainTexture=mTexture;}}

       这里我们提供两套外装。

我们把脚本拖放到模型上。然后编辑贴图数组:


编辑好贴图后。我们就能够执行程序了,注意贴图要和模型网格匹配。

执行效果:



这样的方法须要设计者全然的了解角色身体的内部构造。所以须要和美工有良好的合作才干够实现,感觉效果还是不错的啊,哈哈

好了。这就是今天的博客了,希望对大家实用、希望大家喜欢!

每日箴言人的思想是了不起的,仅仅要专注于某一项事业。就一定会做出使自己感到惊讶的成绩来。——马克·吐温




喜欢我的博客请记住我的名字:秦元培。我的博客地址是:blog.csdn.net/qinyuanpei

转载请注明出处,本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/24393683


版权声明:本文博客原创文章,博客,未经同意,不得转载。转载请注明作者和出处,谢谢!

转载于:https://www.cnblogs.com/mengfanrong/p/4752192.html

相关文章:

python中nlp的库_单词袋简介以及如何在Python for NLP中对其进行编码

python中nlp的库by Praveen Dubey通过Praveen Dubey 单词词汇入门以及如何在Python中为NLP 编写代码的简介 (An introduction to Bag of Words and how to code it in Python for NLP) Bag of Words (BOW) is a method to extract features from text documents. These featur…

机器学习:计算学习理论

计算学习理论介绍 关键词&#xff1a; 鲁棒性 关键词&#xff1a; 【机器学习基础】理解为什么机器可以学习1——PAC学习模型--简书 关键词&#xff1a;存在必要性&#xff1b;从机器学习角度出发 PAC学习理论&#xff1a;机器学习那些事 关键词&#xff1a;不错的大道理 如果相…

HTML超出部分滚动效果 HTML滚动 HTML下拉 附效果图

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 H5 效果图 实现代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Bootstrap 实例 - 滚动监听&#xff08;Scrollspy&#xff09;…

编写高质量代码改善C#程序的157个建议——建议148:不重复代码

建议148&#xff1a;不重复代码 如果发现重复的代码&#xff0c;则意味着我们需要整顿一下&#xff0c;在继续前进。 重复的代码让我们的软件行为不一致。举例来说&#xff0c;如果存在两处相同的加密代码。结果在某一天&#xff0c;我们发现加密代码有个小Bug&#xff0c;然后…

求职者提问的问题面试官不会_如何通过三个简单的问题就不会陷入求职困境

求职者提问的问题面试官不会by DJ Chung由DJ Chung 如何通过三个简单的问题就不会陷入求职困境 (How to get un-stuck in your job search with three simple questions) 您甚至不知道为什么会被卡住&#xff1f; (Do you even know why you’re stuck?) Your job search can…

不能交换到解决jenkins用户的问题

su - jenkins始终有效&#xff0c;今centos无效&#xff0c;因为/etc/password在文档/bin/bash是yum当安装到/bin/false.之后可以改变。ubuntu安装包和yum安装包的行为不一致啊。版权声明&#xff1a;本文博主原创文章&#xff0c;博客&#xff0c;未经同意&#xff0c;不得转载…

HTML引用公共组件

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 在test.html引用footer.html 效果图 代码 test.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>引用demo</title><s…

Hadoop自学笔记(二)HDFS简单介绍

1. HDFS Architecture 一种Master-Slave结构。包括Name Node, Secondary Name Node,Data Node Job Tracker, Task Tracker。JobTrackers: 控制全部的Task Trackers 。这两个Tracker将会在MapReduce课程里面具体介绍。以下具体说明HDFS的结构及其功能。 Name Node:控制全部的Dat…

如何为Linux设置Docker和Windows子系统:爱情故事。 ?

Do you sometimes feel you’re a beautiful princess turned by an evil wizard into a frog? Like you don’t belong? I do. I’m a UNIX guy scared to leave the cozy command line. My terminal is my castle. But there are times when I’m forced to use Microsoft …

再谈Spring Boot中的乱码和编码问题

编码算不上一个大问题&#xff0c;即使你什么都不管&#xff0c;也有很大的可能你不会遇到任何问题&#xff0c;因为大部分框架都有默认的编码配置&#xff0c;有很多是UTF-8&#xff0c;那么遇到中文乱码的机会很低&#xff0c;所以很多人也忽视了。 Spring系列产品大量运用在…

UDP 构建p2p打洞过程的实现原理(持续更新)

UDP 构建p2p打洞过程的实现原理(持续更新) 发表于7个月前(2015-01-19 10:55) 阅读&#xff08;433&#xff09; | 评论&#xff08;0&#xff09; 8人收藏此文章, 我要收藏赞08月22日珠海 OSC 源创会正在报名&#xff0c;送机械键盘和开源无码内裤 摘要 UDP 构建p2p打洞过程…

Vue父组件网络请求回数据后再给子组件传值demo示例

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 这里demo使用延迟执行模拟网络请求&#xff1b;父组件给子组件需要使用自定义属性 Prop &#xff0c;下面是示例代码&#xff1a; <!DOCTYPE html> <html> <head> <me…

gulp-sass_如果您是初学者,如何使用命令行设置Gulp-sass

gulp-sassby Simeon Bello通过Simeon Bello I intern at a tech firm presently, and few days ago I got a challenge from my boss about writing an article. So I decided to write something on Gulp-sass. Setting it up can be frustrating sometimes, especially when…

MyEclipse快捷键

MyEclipse快捷键 Ctrl1 快速修复CtrlD: 删除当前行 CtrlQ 定位到最后编辑的地方 CtrlL 定位在某行 CtrlO 快速显示 OutLine CtrlT 快速显示当前类的继承结构 CtrlW 关闭当前Editer CtrlK 快速定位到下一个 CtrlE 快速显示当前Editer的下拉列表CtrlJ 正向增量查找(按下C…

关于UNION和UNION ALL的区别

今天在运行程序的时候发现个问题&#xff0c;就是计算和的时候两条数据一样的话自动去除重复的&#xff0c;可是我这个程序需要重复的数据也算进来呀&#xff0c;然后就找原因&#xff0c;最后在sql语句中找到了是union和union all的问题&#xff0c;简单总结一下下。 当使用到…

html 写一个日志控件 查看log

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 使用场景&#xff0c; 示例访问&#xff1a;https://weixin.njkeren.cn/test1.html?user12 得到的效果图 实现代码 <!DOCTYPE html> <html><head><meta charset&q…

python开源项目贡献_通过为开源项目做贡献,我如何找到理想的工作

python开源项目贡献by Utsab Saha由Utsab Saha 通过为开源项目做贡献&#xff0c;我如何找到理想的工作 (How I found my dream job by contributing to open source projects) One of the concerns I often hear about from my coding students is, “How am I going to land…

JSON解析与XML解析的区别

JSON与XML的区别比较 1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) &#xff0c;用于标记电子文件使其具有结构性的标记语言&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(d…

[matlab]Monte Carlo模拟学习笔记

理论基础&#xff1a;大数定理&#xff0c;当频数足够多时&#xff0c;频率可以逼近概率&#xff0c;从而依靠概率与$\pi$的关系&#xff0c;求出$\pi$ 所以&#xff0c;rand在Monte Carlo中是必不可少的&#xff0c;必须保证测试数据的随机性。 用蒙特卡洛方法进行计算机模拟的…

vue 网络请求 axios vue POST请求 vue GET请求 代码示例

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 1.安装 axios 和 vue-axios 和 qs &#xff08;qs是为了解决post默认使用的是x-www-from-urlencoded 请求&#xff0c;导致请求参数无法传递到后台&#xff09; $ npm install --save axio…

bff v2ex_语音备忘录的BFF-如何通过Machine Learning简化Speech2Text

bff v2exby Rafael Belchior通过拉斐尔贝尔基奥尔(Rafael Belchior) 语音备忘录的BFF-如何通过Machine Learning简化Speech2Text (The voice memo’s BFF — how to make Speech2Text easy with Machine Learning) Do you think recording voice memos is inconvenient becaus…

pat1094. The Largest Generation (25)

1094. The Largest Generation (25) 时间限制200 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueA family hierarchy is usually presented by a pedigree tree where all the nodes on the same level belong to the same generation. Your task is to …

web-view里面的网页能请求未配置的request域名吗

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 可以

.NET调用JAVA的WebService方法

调用WebService&#xff0c;最简单的办法当然是直接添加WEB引用&#xff0c;然后自动产生代理类&#xff0c;但是在调用JAVA的WebService时并没有这么简单&#xff0c;特别是对于SoapHeader的处理&#xff0c;在网上也有相关资料&#xff0c;但是都整理的不够清晰明了。根据网上…

适合初学者的数据结构_数据结构101:图-初学者的直观介绍

适合初学者的数据结构了解您每天使用的数据结构 (Get to know the data structures that you use every day) Welcome! Let’s Start with Some Vital Context. Let me ask you something:✅ Do you use Google Search? ✅ Do you use Google Maps? ✅ Do you use social med…

深入解析CSS样式层叠权重值

本文为转载内容&#xff0c;源地址&#xff1a;http://www.ofcss.com/2011/05/26/css-cascade-specificity.html 读到《重新认识CSS的权重》这篇&#xff0c;在文章最后给出了便于记忆的顺序&#xff1a; “important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 &…

VUE做一个公共的提示组件,显示两秒自动隐藏,显示的值父组件传递给子组件

需求&#xff1a;VUE做一个公共的提示组件&#xff0c;显示两秒自动隐藏&#xff0c;显示的值由父组件动态传给子组件。 效果图&#xff1a; 实现步骤&#xff1a; 1.创建一个子组件 Toptips.vue (它就是公共提示组件)&#xff0c; optips.vue代码如下&#xff1a; <temp…

Linux课堂随笔---第四天

用户账户简介 在Linux系统中有三大类用户&#xff0c;分别是root用户&#xff0c;系统用户和普通用户。 在Linux系统中&#xff0c;root用户UID为0&#xff0c;root用户的权限是最高的&#xff0c;普通用户无法执行的操作&#xff0c;root用户都能完成。所以也被称为超级用户。…

初级开发人员的缺点_作为一名初级开发人员,我如何努力克服自己的挣扎

初级开发人员的缺点by Syeda Aimen Batool通过Syeda Aimen Batool 作为一名初级开发人员&#xff0c;我如何努力克服自己的挣扎 (How I’m working to overcome my struggles as a junior developer) I believe the other name for coding is the “struggle”. And if you ar…

lintcode-136-分割回文串

136-分割回文串 给定一个字符串s&#xff0c;将s分割成一些子串&#xff0c;使每个子串都是回文串。 返回s所有可能的回文串分割方案。 样例 给出 s "aab"&#xff0c;返回 [ ["aa", "b"], ["a", "a", "b"] ] 标…