[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; //与贴图相应的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连衣裙实现游戏开发系统的更多相关文章
- [Unity3D]Unity3D持久性数据的游戏开发PlayerPrefs采用
大家好,我是秦培,欢迎关注我的博客,我的博客地址">blog.csdn.net/qinyuanpei. 博主今天研究了在Unity3D中的数据持久化问题.数据持久化在不论什么一个开发领 ...
- Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
一.Unity3D平台简介 Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的 ...
- Unity3D游戏开发从零单排(四) - 制作一个iOS游戏
提要 此篇是一个国外教程的翻译,尽管有点老,可是适合新手入门. 自己去写代码.debug,布置场景,能够收获到非常多.游戏邦上已经有前面两部分的译文,这里翻译的是游戏的最后一个部分. 欢迎回来 在第一 ...
- [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)
---------------------------------------------------------------------------------------------------- ...
- [Unity3D]Unity3D游戏开发3D选择场景中的对象,并显示轮廓效果强化版
大家好,我是秦培,欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei. 在上一篇文章中,我们通过自己定义着色器实现了一个简单的在3D游戏中选取.显示物体轮廓的实例. 在文章 ...
- [Unity3D]Unity3D圣骑士当游戏开发商遭遇Mecanim动画系统
大家好.我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 博主总算赶在这个月底写出了这篇文章.这个月由于期末考试一直没时间研究太多关于技术方面 ...
- Unity3D ——强大的跨平台3D游戏开发工具(一)
众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎.在现有的版本中,其强大的游戏制作功能已 经达到让人瞠目结舌的地步.尤其是它在3.0版本里面制作的那款 ...
- 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结
前几天,个人著作<Unity3D/2D游戏开发从0到1(第二版)>经过七八个月的技术准备以及近3个月的日夜编写,在十一长假后终于完稿.今天抽出一点时间来,给广大热心小伙伴们汇报一下书籍概况 ...
- 《Unity3D/2D游戏开发从0到1》正式出版发行
<Unity3D/2D游戏开发从0到1>正式出版发行 去年个人编写的Unity书籍正式在2015年7月正式发行,现在补充介绍一下个人著作.书籍信息: 书籍的名称: <Uni ...
随机推荐
- poj 2417 Discrete Logging(A^x=B(mod c),普通baby_step)
http://poj.org/problem?id=2417 A^x = B(mod C),已知A,B.C.求x. 这里C是素数,能够用普通的baby_step. 在寻找最小的x的过程中,将x设为i* ...
- HDU 5095 Linearization of the kernel functions in SVM(模拟)
主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=5095 Problem Description SVM(Support Vector Machine) ...
- Android+NDK+OpenGLES开发环境配置
1.资源 (1).Android的eclipse开发环境 我用adt-bundle-windows-x86.官方主页就能下载.这是一个打包的版本号,直接执行eclipse.exe你可以开始 (2).N ...
- 【JAVA】【NIO】5、Java NIO Scatter / Gather
标题手段Java NIO该分散体浓缩 Java NIO内置支持分散与收集.的概念主要用于信道分散聚集的读写. 读出的分散体的一个通道被读多个数据buffer在.因此.数据分散到多个buffer中. 对 ...
- C++随机数的使用方法
学过别的高级语言的都知道,产生随机数用的都是相似于random这种字符,c++也不例外,在C++中使用的是rand()函数,可是不同的是,假设在C++中仅仅使用了比如 "int i ...
- Android:创建耐磨应用 - 定义自己的布局
创建自己的自定义布局(Creating Custom Layouts) 本文介绍如何创建自己的自定义通知和使用可穿戴UI库来创建自己的自定义布局同时你还需要知道耐磨设计标准(Wear Design P ...
- 具体评论ExpandableListView显示和查询模仿QQ组列表用户信息
在我们的项目开发过程,用户通常拥有的信息包,通过组来显示用户的信息,一时候通过一定的查询条件来显示查询后的相关用户信息.而且通过颜色选择器来设置列表信息的背景颜色. 当中借鉴xiaanming:htt ...
- Oracle 数据恢复指导具体解释
1.数据恢复指导 : 高速检測.分析和修复故障 最大程度地降低停机故障和执行时故障 将对用户的干扰降到最低 用户界面: --EM GUI 界面 (多个路径) --RMAN 命令行 支持的数 ...
- Object-c中间initialize 与 辛格尔顿
简单说下initialize任务.在初始化过程中同样的类将被调用一次. 直接在代码解释initialize任务. 创建一个InitTest类 InitTest.m #import "Init ...
- 深入理解ASP.NET MVC Day1
深入理解ASP.NET MVC ASP.NET vs MVC vs WebForms 许多ASP.NET开发人员开始接触MVC认为MVC与ASP.NET完全没有关系,是一个全新的Web开发,事实上 ...