[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 ...
随机推荐
- 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境
原文:第三篇--第二部分--第四文 配置SQL Server镜像--非域环境 本文为非域环境搭建镜像演示,对于域环境搭建,可参照上文:http://blog.csdn.net/dba_huangzj/ ...
- 系列三VisualSvn Server
原文:系列三VisualSvn Server VisualSvn Server介绍 1 .VisualSvn Server VisualSvn Server是免费的,而VisualSvn是收费的.V ...
- UVA 239 - Tempus et mobilius. Time and motion(更换周期)
UVA 239 - Tempus et mobilius. Time and motion 题目链接 题意:这题题意也是吊得飞起,看了老半天,大概是这样: 有一个放球的队列.和3个轨道(说白了就是栈) ...
- 关于查看文件size
public static long getTotalSize(String device) { StatFs sf = new StatFs (device); //long totalblocks ...
- 网络的基本概念TCP, UDP, 单播(Unicast), 多播(多播)(Multicast)
章相当低级,但相当重要! 我们周围一切差点儿都依赖于把事情抽象成低等级,并在某一点把它详细化,在一些设计概念中.接口层十分清晰而且目标非常集中,应用程序不用考虑操作系统怎样工作,操作系统也不用考虑硬件 ...
- C#程序(含多个Dll)合并成一个Exe
把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一 ...
- 初探boost之progress_display库学习笔记
progress_display 用途 progress_display能够在控制台上显示程序的运行进度,假设程序运行非常耗费时间,那么它能提供一个友好的用户界 面,不至于让用户在等待中失去耐心,甚至 ...
- oracle触发农产品证明文件号码
CREATE OR REPLACE TRIGGER TRG_KC_SPRK_i BEFORE INSERT ON KC_SPRK FOR EACH ROW DECLARE vS ...
- PHP微信SDK——Zebra-Wechat
Zebra-Wechat 微信SDK 眼下处于开发状态,眼下实现了下面功能: 接收微信server推送信息,对推送信息类型进行识别 微信APIclient封装(用户管理.用户组管理.客服管理.自己定义 ...
- 一个关于Linux Bridge配置的吐嘈
话说有些事情十分适合在放假前的一天折腾一天,但绝对不适合在你准备去吃饭前多看一眼...我上周就碰到了这么一件揪心的事,终于以低血糖收场.十分狼狈地四处觅食,却觅到了一包超级辣的鸡爪.吃完后感觉症状加重 ...