Unity3D游戏开发
河乐不为
个人独立博客:https://linshuhe1.github.io/
展开
-
Unity Windows 路径长度限制踩坑
错误日志今天在 Windows 上打 PC 包时遇到了这样的报错:Console 输出的详细错误日志:IOException: Failed to Move File / Directory from 'Temp/StagingArea\bunny rummy_Data\StreamingAssets\lua\logic\ui\pnl_activity\first_add_...原创 2020-04-27 17:21:01 · 2765 阅读 · 1 评论 -
UGUI RectTransform 代码修改锚点和轴心
基本规律记住一个对应关系即可 Top => 1 Middle => 0.5 Bottom => 0 Left => 0 Center => 0.5 Right => 1 递增规律:从左到右(x),从下到上(y)无论是锚点还是轴心,当 x 或 y 的取值为: [0, 1] 时,表示点在对象区...原创 2020-04-24 13:14:48 · 7016 阅读 · 1 评论 -
《Unity 3D游戏客户端基础框架》多线程异步 Socket 框架构建
引言:之前写过一个 demo 案例大致讲解了 Socket 通信的过程,并和自建的服务器完成连接和简单的数据通信,详细的内容可以查看 Unity3D —— Socket通信(C#)。但是在实际项目应用的过程中,这个 demo 的实现方式显得异常简陋,而且对应多个业务同时发起 Socket 通信请求的处理能力也是有限,总不能每个请求都创建一个线程去监听返回结果,所以有必要进一步优化一番,例如加入线程池原创 2017-08-02 16:06:17 · 12221 阅读 · 2 评论 -
《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 · 30048 阅读 · 12 评论 -
《Unity 3D游戏客户端基础框架》消息系统
功能分析:首先,我们必须先明确一个消息系统的核心功能:一个通用的事件监听器管理各个业务监听的事件类型(注册和解绑事件监听器)全局广播事件广播事件所传参数数量和数据类型都是可变的(数量可以是 0~3,数据类型是泛型)设计思路:清楚了上述的几个要求之后,我们不难自行定制一个业务层的消息系统,即在消息系统初始化时将每个模块绑定的消息列表,根据消息类型分类(用一个 string 类型的数据类标识)原创 2017-08-01 11:50:37 · 11902 阅读 · 12 评论 -
《Unity 3D游戏客户端基础框架》系统设计
引言最近到看一个 《贪吃蛇大战开发实例》,其中 贪吃蛇大作战游戏开发实战(3):系统构架设计 提供的系统架构的设计思路我觉得还是值得学习一下的,接下来的内容是我看完视频后的一点笔记。原创 2017-07-30 13:41:22 · 4846 阅读 · 1 评论 -
Unity3D —— 爆炸交互(震屏效果)
前言: 在我们进行游戏战斗场景开发时,常常为了加强临场感,会在有爆炸或者撞击的时候加入震屏的效果,原理其实很简单,就是对场景主相机进行坐标和角度的变化。设计在开始进行代码实操之前,我们先考虑一下大致的思路,主要操作的参数有震动的幅度(Transform的各项参数,通常只改变localPosition和localRotation,必要的时候也可以操作localScale),还有震动的时间,原创 2017-03-06 15:35:33 · 4860 阅读 · 0 评论 -
Unity3D——强联网实时PVP思路
网络层:为了保证网络的稳定性,选择UDP+KCP协议的协议方式业务层:以服务器以固定帧数想客户端发送数据的形式,例如:帧数为20,即服务器每秒向客户端发送20次数据,而客户端的工作则是通过解析协议数据,然后对表现进行调整即可原创 2016-09-28 09:51:13 · 8772 阅读 · 1 评论 -
Unity3D 学习笔记1——序言
虽然注册CSDN账号已经两年多了,但是基本上都是在学习和下载别人的辛苦成果,而自己缺几乎毫无奉献,想来惭愧。其实一方面是自己本身能力水平有限,而另一方面是自己平时学习新的东西都是这看看那翻翻的,都没有怎么系统性地去学习。作为一个电子专业出身的我,最终没有选择专业方向的工作,而是凭着自学的一些皮毛的编程基础进了IT公司,做了传说中“钱多话少死得早”的搬砖程序员,而且我的技术方向也是入门门槛最低的原创 2015-10-13 14:45:22 · 1777 阅读 · 1 评论 -
Unity3D —— 手机设备震动接口
引言:在做应用或游戏开发的时候,有时候我们会需要让设备有明显的响应输出以增强交互效果,常见的有:音频输出、屏幕闪烁和手机震动,这里我们就来实现以下如何在Unity中调用安卓和苹果手机的震动接口。实现步骤:调用接口:Unity中提供了两个接口,分别对应于android和iPhone设备:安卓设备接口:Handheld.Vibrate()苹果设备接口:iPhoneUtils.Vibrate()然而原创 2017-05-17 11:42:43 · 21123 阅读 · 0 评论 -
Unity3D —— NGUI染色遮罩Shader
简述: 遮罩的意思是指对原图被遮住的部分进行一定的处理,这里使用最简单的处理就是染色,所以我们需要创建一个遮罩层,通常使用另一个图片来作为遮罩层,也就是mask图。一、mask图的作用:跟UITexture使用的图片尺寸大小必须一致,将原图中需要被遮住(染色)的部分的位置在mask图中对应位置用纯色(例如:绿色(三原色的一种))涂满,学过flash动画的应该知道遮罩动画的原理,mask图其实原创 2017-02-14 11:14:33 · 3375 阅读 · 0 评论 -
Unty4.7 导入 NGUI3.8.2报错解决
Unity4.7 导入某个版本的NGUI时,假如出现“Assets/NGUI/Scripts/Interaction/UIPopupList.cs(956,45): error CS1061: Type `UnityEngine.BoxCollider2D' does not contain a definition for `offset' and no extension method `of原创 2017-02-14 10:30:03 · 3072 阅读 · 2 评论 -
《Unity 3D游戏客户端基础框架》protobuf 导excel表格数据
之前使用NPOI插件编写的导表工具,其实就是直接将数据进行序列化,解析时还需要进行反序列化,步骤比较繁复,最近看到Google的一个开源的项目protobuf,不仅可以用于进行excel表格数据的导出,还能直接用于网络通信协议的定制。一、protobuf简介: protobuf是由google公司发布的一个开源的项目,二、导表环境配置:三、样例原创 2016-08-22 15:24:17 · 16824 阅读 · 17 评论 -
《Unity 3D游戏客户端基础框架》概述
框架概述:做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框架搭建,其中包括:UI框架(NGUI + MVC)消息管理(Advanced CSharp Messenger)网络层框架(Socket + Protobuf )表格数据(Protobuf)资源原创 2017-07-15 17:55:27 · 26800 阅读 · 11 评论 -
LitJson 不支持 float 类型数据
在 Unity 中使用 Best HTTP 插件的 LitJson 发送一些 Json格式数据给服务器,出现了报错: “LitJson.JsonException: Max allowed object depth reached while trying to export from type System.Single “显然,是传入了 Json 不支持的数据类型,这里我传入了 fl原创 2017-07-28 11:06:30 · 4263 阅读 · 0 评论 -
Unity 接入 ILRuntime 热更方案
引言最近看了一下 ET 框架,本来只是研究一下网络模块,后来抽时间看一下热更框架。ET 的热更使用的不是像 tolua 这样基于 Lua 的方案,而是基于 ILRuntime 的纯 C# 热更实现方案。ILRuntime 的实现原理对 Unity 引擎有一定了解的开发者都应该知道: Unity 支持使用 C# 做脚本语言,是依赖 Mono 引擎运行 C# 编译后的 IL 中间语言...原创 2019-09-27 15:50:09 · 14322 阅读 · 3 评论 -
编译 Unity 4.3.1 引擎
引言从 2014 年参加实习便开始使用 Unity 3D 开发游戏,当时 Unity 还是完全闭源的,但那时候有些公司财大气粗的会直接跟 Unity 官方购买了引擎源码,似乎后来 Unity 就不卖给中国的企业了。Unity 官方从 Unity 2017.1 版本开始,开源了引擎和编辑器的C#源码(源码地址:UnityCsReference),但核心的 C/C++ 部分源码并未开源。...原创 2019-05-17 16:15:38 · 11197 阅读 · 11 评论 -
ToLua 协程中调用 WWW
引言:在游戏中假如需要下载网络资源,一般都是借助 Unity.WWW 工具类来完成,接下来我们分别说一下 C# 和 tolua 下实现的过程。C# 下的实现在 C# 中的做法通常如下:启动一个协程来执行下载任务,创建一个 WWW 对象;在一个死循环中查询下载任务是否完成;下载完成则跳出循环体,从上面创建的 WWW 对象的 bytes 属性中取出下载到的数据。原创 2017-08-26 12:24:27 · 1532 阅读 · 0 评论 -
Unity+高通Vuforia SDK——AR
一、AR概念: 增强现实(Augmented Reality,简称AR),是在虚拟现实的基础上发展起来的新技术,也被称之为混合现实。是通过计算机系统提供的信息增加用户对现实世界感知的技术,将虚拟的信息应用到真实世界,并将计算机生成的虚拟物体、场景或系统提示信息叠加到真实场景中,从而实现对现实的增强。 二、工具:在这里我们主要是用高通的Vuforia SDK来演示如何在...原创 2016-04-11 15:58:19 · 9248 阅读 · 3 评论 -
Unity 使用 Spine 动画
在 Unity 中,常常使用 Spine 来制作一些动画,引擎本身并不能直接播放 Spine 动画,需要额外导入一个 RunTime 插件库才能支持。运行库导入关于运行库的导入,有两种方式:1. 从开源库导入下载 Spine 的 runtime 库:EsotericSoftware/spine-runtimes ,只需要将其中的 spine-csharp 和 spine-un...原创 2018-04-02 17:34:39 · 142367 阅读 · 5 评论 -
Unity 带 Alpha 图片手机包失真
iOS 图集压缩失真在 Android 平台下 UI 图片一切正常,但打包到 iOS 上之后,带透明度的区域会出现明显的失真,排查之后才发现,对于设置了 Package Tag 参数,即打包到图集中的图片,使用 Unity 默认的压缩设置的话,会使用 PVRTC 4 bits 进行压缩,此时:不打图集的散图,带透明度,不会有明显失真;打图集的图片,带透明度,透明区域失真会比较明显:原创 2018-02-05 20:36:32 · 1761 阅读 · 0 评论 -
Unity 移动端 The file 'none' is corrupted. 报错解决
Editor 上不报错,打成 ab 包在移动端报错1. 应用背景:我出现此问题的背景环境是:我使用一个自定义的列表组件来管理列表 item 的循环复用;然后 item 做成一个预制体,跟列表界面预制体放在同一目录下;列表组件中通过一个 public GameObject itemPref; 的属性索引 item 预制体,实例化的时候使用 Instantiate(itemPref) 的方式实现原创 2017-12-02 16:44:41 · 4750 阅读 · 0 评论 -
Unity 从 protobuf 2.5 升级到 3.x 【踩坑】
之前使用 protobuf 2.5 的版本来定制和读取表格,为了适应后端 golang 的工具选型,需要将前端的的一些库和工具都升到 3.x 的版本,例如, C# 中要使用 protobuf 需要引入一个编译好的 protobuf-net.dll 库文件。Protobuf 3.4.x :1.资源下载:protobuf 源码:这里直接选择最新的 Protocol Buffers v3.4.0 ,然后原创 2017-10-24 09:59:24 · 7075 阅读 · 2 评论 -
《Unity 3D游戏客户端基础框架》tolua 框架接入
引言:如何将 tolua 框架接入 Unity 项目中,这里假设我们已经有一个项目,并且已经实现了一些基础架构或者项目已经是完整的,此时,如何将 tolua 这个热更新框架接入进来而不影响原项目的结构?tolua 引入:1.资源下载:既然要将 tolua 引入项目,第一步肯定是先到 tolua 的 github 资源库 中下载 tolua 的资源包:tolua-master.zip2.资源引入:将原创 2017-09-03 10:57:54 · 20841 阅读 · 5 评论 -
protobuf lua 版注意点
引言:在 Unity 中接入 tolua 热更框架之后,假如我们使用 protobuf 来定制协议,那么也需要引入 lua 的版本,这里我记录一下我踩过的一些坑点。repeated 类型:假设我们定义了一个请求包和回包的结构如下://玩家信息数据结构message PlayerInfo{ required string Name = 1; required int32 Id = 2原创 2017-08-24 10:39:21 · 4184 阅读 · 2 评论 -
腾讯开源手游热更新方案,Unity3D下的Lua编程
写在前面xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能、易用性、扩展性而广受好评。现在,腾讯已经将xLua开源到GitHub。2016年12月末,xLua刚刚实现新的突破:全平台支持用Lua修复C#代码bug。目前Unity下的Lua热更新方案大多都是要求要热更新的部分一开始就要用Lua语言实现,不足之处在于:接入成本高,有的项目已转载 2017-01-06 10:11:34 · 3816 阅读 · 0 评论 -
腾讯如何打造一款实时对战手游
2015年以来,手机游戏的市场偏好,逐渐从早期的休闲类、跑酷类、卡牌类游戏,转向重度、操作性更强的ARPG 、FPS、、MOBA类游戏。因此实时对战这一游戏玩法,也逐渐成为了手机游戏的一个核心玩法。纵观AppStore畅销榜前十的游戏,过半都支持玩家实时的PK或者合作攻关。由于实时对战有玩家之间自发进行强互动的特点,活跃度和社交强度都是比较高,为游戏的用户活跃和流水的提高奠定了坚实的基础。 腾讯转载 2016-12-12 14:30:09 · 2763 阅读 · 1 评论 -
Unity3D —— 实时PVP小地图实现
前言在很多实时PVP对战游戏(如:英雄联盟、王者荣耀等)的战斗场景中,都会有一个小地图,用于实时地显示一些比较重要因素,例如:队友和对手位置、存活炮塔位置、Boss出生死亡情况等。一、方案分析:实现小地图的方案一般可以分成两种:直接加一个子相机,映射当前场景中所有的物体,简单粗暴;用UI创建一个假地图,然后将需要显示在小地图上的物体,经过位置换算得到的小地图坐标,然后在小地图中创建与每个物体对应原创 2016-10-13 14:49:27 · 7793 阅读 · 8 评论 -
Unity 3D——打包复用资源(.unitypackage文件)
在进行工程开发时,有时候我们可以将一些能够在其他项目中复用的资源打包成.unitypackage文件,例如:模型、音频、图片、脚本等。具体操作步骤如下:1.在Unity的Project栏中选定要导出的资源目录,右键选中Export Package... 2.选中导出包存放目录,并填写导出文件名称,后缀默认为.unitypackage:原创 2016-04-19 12:11:02 · 8144 阅读 · 0 评论 -
Unity学习笔记10——旋转(四元数和欧拉角)
在Unity中,所有物体即使是空物体,也至少绑定Transform这个组件,这个组件有三个属性:position、rotation、scale,它们分别用于控制物体的平移、旋转和缩放三种变化,而其中最为复杂的一种就是旋转,它就对应于transform组件中的rotation属性,这个属性的类型其实就是四元数。引言: 常用的控制旋转的方法有:矩阵旋转和欧拉旋转,还有本篇原创 2016-05-01 19:41:59 · 16990 阅读 · 0 评论 -
Unity3D 学习笔记7 —— 获取热更新资源文件的MD5码
在之前的文章中,我们提到了用ulua的热更新框架,其中最后提及了通过文件MD5码比对来判断文件是否更新,假如MD5码不一致则可以判定文件发生了变化,所以需要进行更新。因此,我们需要为那些能够进行热更新的文件生成对应的MD5码,每个文件都对应唯一的一个MD5码。 生成步骤:1.读取文件流2.读取文件流中的字节数据3.通过MD5接口生成MD5码(获得的是一个Hash字节数原创 2016-04-09 23:10:04 · 6497 阅读 · 0 评论 -
Unity3D 学习笔记6 ——协程
一、协程的概述: 使用协程的作用一共有两点:1)延时(等待)一段时间执行代码;2)等某个操作完成之后再执行后面的代码——通常用于控制运动,序列,以及对象的行为(充当状态机)总结起来就是一句话:控制代码在特定的时机执行。注:协程不是线程,也不是异步执行的。协程和 MonoBehaviour 的 Update函数一样也是在MainThread中执行的。使用协程你不原创 2016-04-09 13:17:13 · 1575 阅读 · 0 评论 -
Unity3D 学习笔记9 —— 3D模型动画控制
在Unity中,我们可以使用2D的Spine动画来制作核心战斗模块,当然也能用3D模型来制作,这时候我们需要学会使用的工具类就是Unity为我们提供的Animation动画控制类。 当我们将一个模型导入Unity中时,我们可以看到资源文件下有Animations和Materials两个目录,它们分别用于存放此3D模型的动画和材质。一、动画设置: 在A原创 2016-04-12 14:33:52 · 14105 阅读 · 2 评论 -
Unity协程(Coroutine)原理深入剖析
Unity协程(Coroutine)原理深入剖析 By D.S.Qiu尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 记得去年6月份刚开始实习的时候,当时要我写网络层的结构,用到了协程,当时有点懵,完全不知道Unity协程的执行机制是怎么样的,只是知道函数的返回值是IEnumerator类型转载 2016-04-09 12:25:16 · 1335 阅读 · 0 评论 -
Unity3D 学习笔记8 —— UGUI控制和按钮的监听系统
一、UGUI简介: 随着Unity原生UI系统UGUI日渐完善,如今在项目中使用UGUI相较于NGUI更为简单快捷,因为NGUI的基于深度(depth属性)层级管理机制和图集式图片管理(图集和散图必须同时存在,占用两倍空间)显然很繁琐而且灵活性差。 图片管理:在UGUI中,虽然我们依然可以采用将散图打包成图集的方式来管理图集,但是大多数情况下,我们更倾向于通过代原创 2016-04-12 10:43:35 · 7040 阅读 · 4 评论 -
Unity3D 学习笔记5 ——使用ScriptableObject进行序列化
ScriptableObject类型经常用于存储一些unity3d本身不可以打包的一些object,比如字符串,一些类对象等。用这个类型的子类型,则可以用BuildPipeline打包成assetbundle包供后续使用,非常方便。这样除了playerpref和c#文件读取外,另外的一种存取一些数据对象的方法[csharp] view plain copy prin原创 2016-03-26 10:50:18 · 7507 阅读 · 0 评论 -
Unity3D 学习笔记4 —— UGUI+uLua游戏框架
Unity3D 学习笔记4 —— UGUI+uLua游戏框架使用到的资料下载地址以及基础知识框架讲解拓展热更过程在这里我们使用的是uLua/cstolua技术空间所以提供的UGUI+uLua的热更游戏框,我也只是把我学习和使用这个框架的笔记记录下来而已。一.资料下载地址以及基础知识:主要使用到的资料有:客户端框架:LuaFramework_UGUI-master服务端框架:ServerF原创 2016-03-10 19:56:20 · 14795 阅读 · 1 评论 -
Unity3D 学习笔记3——了解U3D引擎的操作面板和各种工具
Unity3D 学习笔记3——了解U3D引擎的操作面板和各种工具在完成了Unity的安装破解之后,我们接下来要做的当前是启动这个引擎,然后学会如何去使用它为我们提供的各种工具,这也是上手任何一个软件的必经之路。操作面板的各个区域学会如何导入第三方的工具包1.操作面板的各个区域启动Unity,我们会看到图中的界面,可能你们看到的界面跟我的不完全一致,因为U3D同样也支持功能块的自定义摆放,每个人原创 2015-10-26 10:40:27 · 5856 阅读 · 0 评论 -
Unity3D——主角面朝方向一定区域内对象角度计算
写在前面的话,前两天有个朋友在QQ上问我 如何获取主角面朝方向一定区域中的敌人对象。这个命题看似简单,其实里面蕴含了很多数学方面的东西。今天刚好有时间我就彻底的把这个疑问写在博客中。希望可以帮助到他。在上代码之前请大家跟我先做几个简单的练习题,角度向量的计算一定要学会,不然后面的东西会很难懂。1.已知3D坐标,和一个旋转角度,以及一段距离,求目标点的3D坐标。已知当前点为T转载 2016-05-04 20:31:45 · 7760 阅读 · 0 评论 -
Unity学习笔记14——导入视频格式问题(QuickTime player)
前言: 由于Unity中能够识别的视频格式主要有:.mov, .mpg, .mpeg, .mp4, .avi, .asf,但是其实最后这些格式的时候在导入到Unity中的时候,都会再进行一次Unity内部的视频转码,这是一个耗时的操作,而且要保证视频转码的顺利完成,我们还必须安装Quicktime player工具,用于视频的转码。一、遇到问题:原创 2016-05-16 19:07:24 · 25056 阅读 · 12 评论