大家好,我是秦培。欢迎关注我的博客,我的博客地址

">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; //与贴图相应的SkinnedMeshRenderer
SkinnedMeshRenderer MeshEyes;
SkinnedMeshRenderer MeshFace1;
SkinnedMeshRenderer MeshFace2;
SkinnedMeshRenderer MeshHair1;
SkinnedMeshRenderer MeshHair2;
SkinnedMeshRenderer MeshPants1;
SkinnedMeshRenderer MeshPants2;
SkinnedMeshRenderer MeshTop1;
SkinnedMeshRenderer MeshTop2;
SkinnedMeshRenderer MeshShoes1;
SkinnedMeshRenderer MeshShoes2; void Start ()
{
//获取SkinnedMeshRenderer
MeshEyes=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

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

[Unity3D]Unity3D连衣裙实现游戏开发系统的更多相关文章

  1. [Unity3D]Unity3D持久性数据的游戏开发PlayerPrefs采用

    大家好,我是秦培,欢迎关注我的博客,我的博客地址">blog.csdn.net/qinyuanpei. 博主今天研究了在Unity3D中的数据持久化问题.数据持久化在不论什么一个开发领 ...

  2. Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

    一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...

  3. Unity3D游戏开发从零单排(四) - 制作一个iOS游戏

    提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...

  4. [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)

    ---------------------------------------------------------------------------------------------------- ...

  5. [Unity3D]Unity3D游戏开发3D选择场景中的对象,并显示轮廓效果强化版

    大家好,我是秦培,欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei. 在上一篇文章中,我们通过自己定义着色器实现了一个简单的在3D游戏中选取.显示物体轮廓的实例. 在文章 ...

  6. [Unity3D]Unity3D圣骑士当游戏开发商遭遇Mecanim动画系统

            大家好.我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 博主总算赶在这个月底写出了这篇文章.这个月由于期末考试一直没时间研究太多关于技术方面 ...

  7. Unity3D ——强大的跨平台3D游戏开发工具(一)

    众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎.在现有的版本中,其强大的游戏制作功能已 经达到让人瞠目结舌的地步.尤其是它在3.0版本里面制作的那款 ...

  8. 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结

    前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...

  9. 《Unity3D/2D游戏开发从0到1》正式出版发行

    <Unity3D/2D游戏开发从0到1>正式出版发行 去年个人编写的Unity书籍正式在2015年7月正式发行,现在补充介绍一下个人著作.书籍信息:      书籍的名称: <Uni ...

随机推荐

  1. MEMO:UIButton 中的图片和标题 左对齐

    UIButton setImage 和 setTitle之后.默认 image和title 对齐居中, 因为 title 长度不固定. 所以假设要几个这样有image有title的button纵向排列 ...

  2. java注意事项演示 地图产生表 演示样本 来自thinking in java 4 20代码的章

    java注意事项演示 地图产生表 演示样本  来自thinking in java 4 20代码的章 thinking in java 4免费下载:http://download.csdn.net/d ...

  3. 关于sql中去换行符的问题

    今天要用bootstrap开发一个网页,要使用到JSON,但是JSON的格式不正确,然后在http://www.bejson.com/[Be JSON]中测试了一下JSON. 发现JSON中多了一个换 ...

  4. Eclipse build launcher 3具体步骤

    1. 下载launcher 3源代码  (需要FQ) git clone https://android.googlesource.com/platform/packages/apps/Launche ...

  5. 严格模式 (JavaScript)

    严格模式是一种将更好的错误检查引入代码中的方法. 在使用严格模式时,您无法使用隐式声明的变量.将值赋给只读属性或将属性添加到不可扩展的对象. 〉声明严格模式 可以通过在文件.程序或函数的开头添加 &q ...

  6. SQL Server中TempDB管理(version store的逻辑结构)

    原文:SQL Server中TempDB管理(version store的逻辑结构) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/arch ...

  7. 移动端 iphone touchmove滑到边界(浏览器地址拦及以上) touchend失效解决办法

    在移动端h5页面:尤其那些全屏幕的盒展示切换页面,当用户无意中将手指滑到了 浏览器地址拦以上(中国移动这快区域):此时,手指已经离开屏幕了,但是ios上无法监听到touchend 事件:touchen ...

  8. RandomAccessFile实时读取大文件(转)

    最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据是新增 ...

  9. OpenGL 实现Interpolation插值算法

    这是一个静态插值算法的效果,图形学中插值算法应用十分广.如动画.photoshop, autocAD等软件画曲线,还有shader中的渐变上色也是一个硬件支持的插值算法. Interpolation是 ...

  10. BZOJ 1901 Zju2112 Dynamic Rankings

    树阵主席设置树.维护间隔动态K大. .. ZOJ到空间太小,太大,仅仅能到BZOJ上交 1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memor ...