Unity学习笔记
使用Unity3D引擎进行游戏开发过程中的一些个人学习笔记
河乐不为
个人独立博客:https://linshuhe1.github.io/
展开
-
《Unity 3D游戏客户端基础框架》tolua 框架接入
引言:如何将 tolua 框架接入 Unity 项目中,这里假设我们已经有一个项目,并且已经实现了一些基础架构或者项目已经是完整的,此时,如何将 tolua 这个热更新框架接入进来而不影响原项目的结构?tolua 引入:1.资源下载:既然要将 tolua 引入项目,第一步肯定是先到 tolua 的 github 资源库 中下载 tolua 的资源包:tolua-master.zip2.资源引入:将原创 2017-09-03 10:57:54 · 20851 阅读 · 5 评论 -
《Unity 3D游戏客户端基础框架》多线程异步 Socket 框架构建
引言:之前写过一个 demo 案例大致讲解了 Socket 通信的过程,并和自建的服务器完成连接和简单的数据通信,详细的内容可以查看 Unity3D —— Socket通信(C#)。但是在实际项目应用的过程中,这个 demo 的实现方式显得异常简陋,而且对应多个业务同时发起 Socket 通信请求的处理能力也是有限,总不能每个请求都创建一个线程去监听返回结果,所以有必要进一步优化一番,例如加入线程池原创 2017-08-02 16:06:17 · 12258 阅读 · 2 评论 -
《Unity 3D游戏客户端基础框架》消息系统
功能分析:首先,我们必须先明确一个消息系统的核心功能:一个通用的事件监听器管理各个业务监听的事件类型(注册和解绑事件监听器)全局广播事件广播事件所传参数数量和数据类型都是可变的(数量可以是 0~3,数据类型是泛型)设计思路:清楚了上述的几个要求之后,我们不难自行定制一个业务层的消息系统,即在消息系统初始化时将每个模块绑定的消息列表,根据消息类型分类(用一个 string 类型的数据类标识)原创 2017-08-01 11:50:37 · 11911 阅读 · 12 评论 -
《Unity 3D游戏客户端基础框架》概述
框架概述:做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框架搭建,其中包括:UI框架(NGUI + MVC)消息管理(Advanced CSharp Messenger)网络层框架(Socket + Protobuf )表格数据(Protobuf)资源原创 2017-07-15 17:55:27 · 26812 阅读 · 11 评论 -
Unity 使用 Spine 动画
在 Unity 中,常常使用 Spine 来制作一些动画,引擎本身并不能直接播放 Spine 动画,需要额外导入一个 RunTime 插件库才能支持。运行库导入关于运行库的导入,有两种方式:1. 从开源库导入下载 Spine 的 runtime 库:EsotericSoftware/spine-runtimes ,只需要将其中的 spine-csharp 和 spine-un...原创 2018-04-02 17:34:39 · 142555 阅读 · 5 评论 -
Unity3D —— 手机设备震动接口
引言:在做应用或游戏开发的时候,有时候我们会需要让设备有明显的响应输出以增强交互效果,常见的有:音频输出、屏幕闪烁和手机震动,这里我们就来实现以下如何在Unity中调用安卓和苹果手机的震动接口。实现步骤:调用接口:Unity中提供了两个接口,分别对应于android和iPhone设备:安卓设备接口:Handheld.Vibrate()苹果设备接口:iPhoneUtils.Vibrate()然而原创 2017-05-17 11:42:43 · 21195 阅读 · 0 评论 -
Unity3D —— 报错解决方案和常用功能集
1.在Update中对Dictionary迭代器进行修改: var _key = index2factionDic.Keys.GetEnumerator(); string item; while (_key.MoveNext()) {原创 2017-04-01 16:26:24 · 5719 阅读 · 1 评论 -
Unity3D —— 爆炸交互(震屏效果)
前言: 在我们进行游戏战斗场景开发时,常常为了加强临场感,会在有爆炸或者撞击的时候加入震屏的效果,原理其实很简单,就是对场景主相机进行坐标和角度的变化。设计在开始进行代码实操之前,我们先考虑一下大致的思路,主要操作的参数有震动的幅度(Transform的各项参数,通常只改变localPosition和localRotation,必要的时候也可以操作localScale),还有震动的时间,原创 2017-03-06 15:35:33 · 4864 阅读 · 0 评论 -
Unity3D —— NGUI染色遮罩Shader
简述: 遮罩的意思是指对原图被遮住的部分进行一定的处理,这里使用最简单的处理就是染色,所以我们需要创建一个遮罩层,通常使用另一个图片来作为遮罩层,也就是mask图。一、mask图的作用:跟UITexture使用的图片尺寸大小必须一致,将原图中需要被遮住(染色)的部分的位置在mask图中对应位置用纯色(例如:绿色(三原色的一种))涂满,学过flash动画的应该知道遮罩动画的原理,mask图其实原创 2017-02-14 11:14:33 · 3385 阅读 · 0 评论 -
NGUI 在Panel使用soft clip时,滚动显示异常问题
在NGUI中,常常需要制作滚动列表的界面,这时候通常需要用到UIPanel的Soft Clip,对Item列表进行裁剪,类似于遮罩只显示指定区域的Item。问题简介:我之前在使用过程中遇到了一个问题,在挂载UIDraggable Panel的UIPanel下提示:Clipped panels must have a uniform scale, or clipping won't work prop原创 2016-11-03 16:08:38 · 2979 阅读 · 0 评论 -
Unity3D —— 实时PVP小地图实现
前言在很多实时PVP对战游戏(如:英雄联盟、王者荣耀等)的战斗场景中,都会有一个小地图,用于实时地显示一些比较重要因素,例如:队友和对手位置、存活炮塔位置、Boss出生死亡情况等。一、方案分析:实现小地图的方案一般可以分成两种:直接加一个子相机,映射当前场景中所有的物体,简单粗暴;用UI创建一个假地图,然后将需要显示在小地图上的物体,经过位置换算得到的小地图坐标,然后在小地图中创建与每个物体对应原创 2016-10-13 14:49:27 · 7796 阅读 · 8 评论 -
Unity3D——强联网实时PVP思路
网络层:为了保证网络的稳定性,选择UDP+KCP协议的协议方式业务层:以服务器以固定帧数想客户端发送数据的形式,例如:帧数为20,即服务器每秒向客户端发送20次数据,而客户端的工作则是通过解析协议数据,然后对表现进行调整即可原创 2016-09-28 09:51:13 · 8777 阅读 · 1 评论 -
Unity3D 学习笔记1——序言
虽然注册CSDN账号已经两年多了,但是基本上都是在学习和下载别人的辛苦成果,而自己缺几乎毫无奉献,想来惭愧。其实一方面是自己本身能力水平有限,而另一方面是自己平时学习新的东西都是这看看那翻翻的,都没有怎么系统性地去学习。作为一个电子专业出身的我,最终没有选择专业方向的工作,而是凭着自学的一些皮毛的编程基础进了IT公司,做了传说中“钱多话少死得早”的搬砖程序员,而且我的技术方向也是入门门槛最低的原创 2015-10-13 14:45:22 · 1778 阅读 · 1 评论 -
Unity3D 学习笔记3——了解U3D引擎的操作面板和各种工具
Unity3D 学习笔记3——了解U3D引擎的操作面板和各种工具在完成了Unity的安装破解之后,我们接下来要做的当前是启动这个引擎,然后学会如何去使用它为我们提供的各种工具,这也是上手任何一个软件的必经之路。操作面板的各个区域学会如何导入第三方的工具包1.操作面板的各个区域启动Unity,我们会看到图中的界面,可能你们看到的界面跟我的不完全一致,因为U3D同样也支持功能块的自定义摆放,每个人原创 2015-10-26 10:40:27 · 5858 阅读 · 0 评论 -
Unity3D 学习笔记4 —— UGUI+uLua游戏框架
Unity3D 学习笔记4 —— UGUI+uLua游戏框架使用到的资料下载地址以及基础知识框架讲解拓展热更过程在这里我们使用的是uLua/cstolua技术空间所以提供的UGUI+uLua的热更游戏框,我也只是把我学习和使用这个框架的笔记记录下来而已。一.资料下载地址以及基础知识:主要使用到的资料有:客户端框架:LuaFramework_UGUI-master服务端框架:ServerF原创 2016-03-10 19:56:20 · 14804 阅读 · 1 评论 -
Unity3D 学习笔记5 ——使用ScriptableObject进行序列化
ScriptableObject类型经常用于存储一些unity3d本身不可以打包的一些object,比如字符串,一些类对象等。用这个类型的子类型,则可以用BuildPipeline打包成assetbundle包供后续使用,非常方便。这样除了playerpref和c#文件读取外,另外的一种存取一些数据对象的方法[csharp] view plain copy prin原创 2016-03-26 10:50:18 · 7553 阅读 · 0 评论 -
Unity3D 学习笔记6 ——协程
一、协程的概述: 使用协程的作用一共有两点:1)延时(等待)一段时间执行代码;2)等某个操作完成之后再执行后面的代码——通常用于控制运动,序列,以及对象的行为(充当状态机)总结起来就是一句话:控制代码在特定的时机执行。注:协程不是线程,也不是异步执行的。协程和 MonoBehaviour 的 Update函数一样也是在MainThread中执行的。使用协程你不原创 2016-04-09 13:17:13 · 1576 阅读 · 0 评论 -
Unity3D 学习笔记7 —— 获取热更新资源文件的MD5码
在之前的文章中,我们提到了用ulua的热更新框架,其中最后提及了通过文件MD5码比对来判断文件是否更新,假如MD5码不一致则可以判定文件发生了变化,所以需要进行更新。因此,我们需要为那些能够进行热更新的文件生成对应的MD5码,每个文件都对应唯一的一个MD5码。 生成步骤:1.读取文件流2.读取文件流中的字节数据3.通过MD5接口生成MD5码(获得的是一个Hash字节数原创 2016-04-09 23:10:04 · 6504 阅读 · 0 评论 -
Unity3D 学习笔记9 —— 3D模型动画控制
在Unity中,我们可以使用2D的Spine动画来制作核心战斗模块,当然也能用3D模型来制作,这时候我们需要学会使用的工具类就是Unity为我们提供的Animation动画控制类。 当我们将一个模型导入Unity中时,我们可以看到资源文件下有Animations和Materials两个目录,它们分别用于存放此3D模型的动画和材质。一、动画设置: 在A原创 2016-04-12 14:33:52 · 14116 阅读 · 2 评论 -
Unity3D 学习笔记8 —— UGUI控制和按钮的监听系统
一、UGUI简介: 随着Unity原生UI系统UGUI日渐完善,如今在项目中使用UGUI相较于NGUI更为简单快捷,因为NGUI的基于深度(depth属性)层级管理机制和图集式图片管理(图集和散图必须同时存在,占用两倍空间)显然很繁琐而且灵活性差。 图片管理:在UGUI中,虽然我们依然可以采用将散图打包成图集的方式来管理图集,但是大多数情况下,我们更倾向于通过代原创 2016-04-12 10:43:35 · 7040 阅读 · 4 评论 -
Unity学习笔记10——旋转(四元数和欧拉角)
在Unity中,所有物体即使是空物体,也至少绑定Transform这个组件,这个组件有三个属性:position、rotation、scale,它们分别用于控制物体的平移、旋转和缩放三种变化,而其中最为复杂的一种就是旋转,它就对应于transform组件中的rotation属性,这个属性的类型其实就是四元数。引言: 常用的控制旋转的方法有:矩阵旋转和欧拉旋转,还有本篇原创 2016-05-01 19:41:59 · 16996 阅读 · 0 评论 -
Unity学习笔记12——打飞机战斗模块
打飞机战斗模块:一、场景管理:1.双方进入场景效果(例如:依次飞入)关于动画,这里我们使用的是DoTween组件2.战斗结束到下次战斗开始过度效果(例如:屏幕渐黑,胜利一方的飞机飞出)黑幕效果:也是使用Plane组件,但是此时使用的材质所绑定的Shader类型,我们需要自行编写Shader文件,然后在Plane上绑定一个脚本,用于控制Shader中Color属性的透明度原创 2016-05-07 15:00:31 · 3622 阅读 · 0 评论 -
Unity学习笔记11——UGUI动画插件DoTween
在项目开发中,我们通常都需要用到缓动动画系统,控制我们的目标对象从当前位置沿着特定曲线路径运动到指定的目标坐标点,在Unity 5.x中最常用的就是DoTween这个动画插件。 下面是我常用的一个工具接口,其功能就是实现trans对象在time时间内,到达目标坐标点aimPos,并且在到达目标点之后回调callback回调方法,可以在回调方法中进行动画结束后相应的处理操作:原创 2016-05-06 15:06:11 · 10725 阅读 · 0 评论 -
Unity学习笔记13——代码动态加载Prefab预设体
在进行一些功能开发的时候,我们常常将一些能够复用的对象制作成.prefab的预设物体,然后将预设体存放到Resources目录之下,使用时再动态加载到场景中并进行实例化。例如:子弹、特效甚至音频等,都能制作成预设体。 一、预设动态加载到场景: 一个预设体要能够通过代码控制在场景中进行显示,需要三个步骤,这里我们以动态加载怪物血条为例子分析一个常见的误区:...原创 2016-05-09 19:40:17 · 78158 阅读 · 5 评论 -
Unity3D —— Socket通信(C#)
前言: 在开始编写代码之前,我们首先需要明确:联网方式、联网步骤、数据收发以及协议数据格式 当然在设计时也应该减低代码的耦合性,尽量使得网络层可以在其他地方进行复用,这就需要我们进行接口式的开发。我们这里使用的通信模式是Socket强连接的通信方式,并且使用C#作为编程语言,其实与.NET的Socket通信是一致的。 一、设计思想: 为...原创 2016-08-25 16:50:51 · 60857 阅读 · 50 评论 -
《Unity 3D游戏客户端基础框架》 protobuf网络框架
前言: protobuf是google的一个开源项目,主要的用途是:1.数据存储(序列化和反序列化),例如xml和json等;2.制作网络通信协议;一、资源下载:1.github源码地址:https://github.com/mgravell/protobuf-net2.google项目源码下载地址(访问需翻墙):https://code.google原创 2016-08-25 19:44:40 · 30054 阅读 · 12 评论 -
《Unity 3D游戏客户端基础框架》protobuf 导excel表格数据
之前使用NPOI插件编写的导表工具,其实就是直接将数据进行序列化,解析时还需要进行反序列化,步骤比较繁复,最近看到Google的一个开源的项目protobuf,不仅可以用于进行excel表格数据的导出,还能直接用于网络通信协议的定制。一、protobuf简介: protobuf是由google公司发布的一个开源的项目,二、导表环境配置:三、样例原创 2016-08-22 15:24:17 · 16835 阅读 · 17 评论 -
Unity Android Icons 配置
引言由于 Google 规定新上线的 App 的 TargetVersion 必须不低于28 ,而对于 API 级别高于 26(Android 8.0)又要求必须适配新的 Icon 方案,即自适应图标(Adaptive Icons)。因此,Unity 中的图标设置栏也发生了一些变化,在 Unity 的 Android 平台 PlayerSettings 中,Icon 设置由原来的一栏变为三栏...原创 2019-09-24 15:08:57 · 9425 阅读 · 1 评论 -
Unity 接入 ILRuntime 热更方案
引言最近看了一下 ET 框架,本来只是研究一下网络模块,后来抽时间看一下热更框架。ET 的热更使用的不是像 tolua 这样基于 Lua 的方案,而是基于 ILRuntime 的纯 C# 热更实现方案。ILRuntime 的实现原理对 Unity 引擎有一定了解的开发者都应该知道: Unity 支持使用 C# 做脚本语言,是依赖 Mono 引擎运行 C# 编译后的 IL 中间语言...原创 2019-09-27 15:50:09 · 14342 阅读 · 3 评论