
Unity 游戏开发之路
文章平均质量分 73
程序届的胖头鱼
打工人,程序猿
展开
-
Lua——基础语法整理学习
前言游戏开发中更新活动、公告以及一些功能某块,为了保证用户体验,通常小版本跟新会采用热更新的方式,即玩家再游戏内既可实现更新无需每次都前往应用商店进行更新。在实际开发中Lua是采用的最多的解决方案,本文主要介绍基础的Lua的基础知识。Lua变量类型Lua 是动态类型语言,变量不需要定义类型,只需要为变量赋值。Lua会根据变量赋的值来确定类型。在Lua语言中,变 量类型包括以下几种类型。number:小数类型,在Lua中没有整数类型,所有的数字类型都属于小数类型。string:字符串类型,字符原创 2021-08-16 17:08:09 · 3107 阅读 · 0 评论 -
Unity 通用框架搭建(十)——使用Xlua热更新
前言热更新,是游戏开发中十分重要的一个环节。热更新,指用户不重启应用的前提下能实现代码逻辑的更新。因此,本文主要介绍腾讯开源的热更新方案Xlua的使用,以及在项目框架中对Xlua进行支持。Xlua 教程Lua代码的本质实际上是一个字符串,Xlua插件让系统能够去执行这段代码并且和C#之间能够相互通信。1、加载Lua文件对Unity游戏而言,可以通过资源加载的方式加载TextAsset资源后执行lua代码: public void DoScript(string luaName) {原创 2021-08-24 15:05:01 · 1975 阅读 · 4 评论 -
Unity通用框架搭建(九)—— UI交互设计之动态层级刷新
前言前面的文章讲述了关于Unity下资源的打包、加载以及打包工具的设计。从本文开始介绍UI的交互设计。游戏开发中存在很多的UI界面,虽然UGUI本身通过UI节点的位置对显示层级做了处理,但是实际开发中存在部分界面内还存在3D模型的展示、特效的展示,如果设计不当就会存在特效显示穿透的问题,开关界面是遮挡问题。本文就结合之前基于Addressable的资源加载,缓存池等来构建UI界面交互逻辑。本文主要介绍UI窗口的层级控制,程序设计思路UI交互部分核心的设计理念:动态的刷新UI、特效等层级。保证每一层之间原创 2021-08-13 17:40:19 · 2140 阅读 · 1 评论 -
Unity通用框架搭建(八)—— 消息事件封装
在游戏开发中,消息事件通过委托实现。实际开发中,经常会遇到界面之间、玩家之间的相互通信。本文实现的消息事件封装采用的时监听和分发机制,它主要运用在逻辑判断,减少程序之间的耦合度,而且使用起来非常方便。监听服务器消息也可以运用事件监听机制,收到服务器的信息之后可以执行某个事件。曾经维护过一个项目的网络通信相关逻辑全都写在NetManger中,到后期这个脚本一万多行,维护十分困难。合理的框架结构能够帮助我们降低程序的耦合性,使代码易于维护更新。第一版不定参数设计利用不定参params object[] ar原创 2021-08-12 17:09:28 · 1052 阅读 · 0 评论 -
Unity通用框架搭建(七)——基于Addressable加载/缓存池的同步重构
前言前面几篇文章介绍了Addressable的资源加载以及缓存池的设计。彼时是将项目中的设计理念记录下来,设计时Addressable还尚未给出同步的设计方法。虽然Addressable用法简单,但是因为异步的原因导致项目中使用了大量回调委托,一度使项目的维护修改变的及其困难,好在Unity很快给出了同步方法的设计方案,因为在重新整理代码时,将这部分逻辑采用同步的方法进行重构。设计思路Unity的资源加载统分两类资源加载,一类为复制类型资源加载(Gameobject类型),另外一类时引用类型资源加载原创 2021-08-03 17:39:44 · 5407 阅读 · 5 评论 -
Unity通用框架搭建(六)——基于Addressable一键打包工具优化
前言在Addressable一键打包工具一文中写了一键打包的设计思路和实现,但是由于当时当时只管堆功能,导致所有核心代码都在一处,导致后期代码维护困难。后期又因为商务需求,涉及部分资源打包,原有的结构不能支持,因为对其进行了优化重构。选择指定路径的资源第一版资源设计时,默认全选,优化时提供可以选择的路径,打包资源时只打包自定路径的资源。(即只标记指定路径的资源)拖动指定路径的文件夹到触碰区域,自动获取资源路径地址 GUILayout.Label("设置打包资源"); for (i原创 2021-07-29 11:57:42 · 2699 阅读 · 6 评论 -
Unity——主角移动与摄像机跟随
在游戏开发中,主角需要通过跑地图来通关升级,本章主要介绍主角的移动和摄像跟随的操作。主角移动角色位移通过主角的骨骼动画控制(后续文章会详细介绍状态机的使用),这里只需要勾选Animator动画控制器下Apply Root Motion让角色的移动受动画控制。通过碰撞检测来判断哪些位置主角可以移动,哪些位置角色不能行走,这里需要两个组件Rigidbody刚体,和Collider碰撞组件Rigidbody:为游戏赋予物理属性,在游戏中只有添加了刚体的物体才能模拟物理属性,如重力等。如上图原创 2021-03-08 10:26:39 · 1164 阅读 · 0 评论 -
游戏开发组件——delegate事件监听
在实际的开发过程中经常遇到这样一个问题:游戏的很多个界面同时开着的,这些界面又共享一部分数据信息,需要实时的动态的刷新这些数据信息。设计思路:构造全局的事件监听器,在每个界面打开时做好相应数据的监听事件,当数据发生改变时只需要派发相应的事件即可。using System.Collections.Generic;public delegate void GameEventHandler(params object[] args);public class GlobalEvent{ ///原创 2021-03-04 15:08:51 · 381 阅读 · 1 评论 -
Unity 简单实例——聊天室功能
简单聊天室功能,客户端发送消息后,服务器接收到消息后分发到其它客户端上并显示聊天内容聊天室服务器服务器需要有以下几个步骤1、确定Socket协议类型(采用TCP协议或者UDP协议)2、绑定服务器的IP地址和端口号3、设置最大监听数量4、等到连接并处理消息由于服务器属于一对多的处理关系,因为我们需要用线程来监听消息: class Client { private Socket clientSocket; private Thread t;原创 2021-03-02 10:43:46 · 1160 阅读 · 0 评论 -
Unity通用框架搭建(五)——基于Addressable一键打包工具
分组策略游戏的资源类型大致分为:全局资源:图集、贴图、配置表、字体、音频等。使用频繁,多处使用。关卡资源:指定场景下使用的资源。特定关卡下使用的资源。使用频率低,甚至需要游戏等级达到一定等级之后才能使用。根据Addressable系统的特性,我们大致可以将游戏的资源文件分两类:Local:本地资源,资源随安装包发布。Remoted:远程资源,当用户需要使用的时候在下载使用。(Addressable会自动检查,如果本地已有最新资源,则不会下载) 本文主要记录,如果自动化分组标记资源原创 2021-01-12 16:56:39 · 8451 阅读 · 6 评论 -
Unity通用框架搭建(四)—— 缓存池设计
前面一文基于Addressable的资源加载更新记录了资源的加载,本文将紧贴资源的加载,结合设计模式中的享元模式的理念设计对象缓存池,避免在游戏过程中频繁的进行创建和销毁的工作。缓存池...原创 2020-12-21 16:08:53 · 1523 阅读 · 3 评论 -
Unity通用框架搭建(三)—— 基于Addressable资源加载更新
前一篇文章记录了Addressable可寻址地址系统的一些基本概念和基本用法,本章将会记录一套基于Addressable的资源加载卸载。结合前面学习的享元模式的理念,也会设计缓存池的相关逻辑。如上图所示,整套流程主要分为两大部分:资源加载部分和缓存池设计部分。资源加载AddressableManager通过单例模式,将各种类型的加载、下载以及卸载入口都放入统一的入口处。public void LoadAsset<T>(string address, System.Action<T原创 2020-12-17 16:53:44 · 6030 阅读 · 5 评论 -
Unity通用框架搭建(二)——基于可寻址地址系统的资源加载
可寻址地址资源系统原创 2020-12-15 11:01:07 · 2311 阅读 · 2 评论 -
Unity通用框架搭建(一)—— Scheduler 定时器
本人是从事Unity客户端开发工作的,从本文开始将会记录一些在实际项目中用到的一些通用框架和功能组件,整理完善一套比较适用的基础框架(最近有空闲时间,将以前的项目的代码重构一下,如有不合适的地方请大神们多多指教)Single单例之前在设计模式的学习中学习了单例模式,在实际开发中,我们也将经常访问一些全局唯一的数据或者某些操作的入口都是固定的。结合C#的泛型,我们可以设计泛型单例,让其子类直接能够实现单例模式,而不是每一块单例类都需要重新定义。考虑可能会存在一些初始化的情况,因此设计一个IManage原创 2020-12-09 10:31:55 · 1736 阅读 · 1 评论 -
Unity面试汇总——基础一(Unity常见基础)
1、什么是协同程序?在主线程运行的同时开启一段逻辑处理,来协助当前程序的执行。(PS:协程很像多线程,却不是多线程,注意不要混淆)Unity的协程在每帧结束后去检测yield的条件是否满足...原创 2018-11-19 22:58:28 · 2244 阅读 · 1 评论 -
Scheduler 统一调度接口 —— 多线程基础
最近工作不是很忙,抽空整合了以前的老代码,编写一套在Unity游戏开发中使用的统一调用接口。Unity2018 版本后支持.net 4.0+,这套调度接口也利用了多线程并行运行的机制来提高整体的运行效率,虽然在客户端中实际上并不明显,借此来学习一下多线程运行的机制。ParallelParallel提供并行运行机制,常用方法Invoke、For、ForEach。Parallel.Invoke...原创 2019-02-20 15:48:45 · 1001 阅读 · 0 评论 -
Scheduler统一调度 —— Timer 定时器设计
设计Scheduler最主要的目的是在Unity中实现定时器的功能,因此我重点记录下定时器的设计,其他的作为参考。定时器中需要包含:定时时间、出发的任务、重复次数等,根据这些来定义Timer基类(源码): /// &amp;amp;amp;lt;summary&amp;amp;amp;gt; /// 定时器对象,记录定时时间,触发事件 /// &amp;amp;amp;lt;/summary&amp;amp;a原创 2019-02-20 15:59:06 · 620 阅读 · 0 评论 -
UGUI —— Canvas(画布)
在使用Unity开发游戏项目中,UI部分通常有两种框架NGUI和UGUI,在Unity5.0版本以后Unity官方收编的NGUI的开发团队植入到Unity引擎内部,因为新开项目大都会抛弃使用NGUI,采用UGUI来开发。虽然NGUI中很多功能在UGUI下需要手动编码,但是UGUI对于渲染、层级、图集等方面对开发人员友好,个人强烈建议使用UGUI开发。Unity2019年出了新的UIWidgets支...原创 2019-05-14 09:47:41 · 325 阅读 · 0 评论 -
Unity —— Camera
在实际开发工作中会遇到很多渲染相关的问题,今天学习一下Unity的一个重要组件摄像机显示场景中,摄像机照射部分,是向玩家捕获和显示世界的设备1、Clear Flags: 清除标记,决定屏幕哪部分将被清除。有以下4中模式:Skybox:天空盒。Camera的默认模式,在屏幕的空白部分将显示当前摄像机的天空盒,如果当前摄像机没有天空盒,会默认用Background色。Solid Color...原创 2019-05-14 17:02:02 · 679 阅读 · 0 评论 -
Unity —— Vector3
Vector3向量,在三维坐标系中带有方向和大小的数据Vector3中一些常量:1、Vector3.back=(0,0,-1)2、Vector3.forward=(0,0,1)3、Vector3.left=(-1,0,0)4、Vector3.right=(1,0,0)5、Vector3.down=(0,-1,0)6、Vector3.up=(0,1,0)7、Vector3.zer...原创 2019-06-11 16:40:01 · 12629 阅读 · 0 评论 -
游戏图形学——旋转动画
游戏开发中经常会使用到加载动画,加载动画可以通过序列帧的方式实现,也可以采用UV纹理旋转使用一张图片实现。旋转矩阵:绕x-轴的主动旋转定义为:绕y-轴的主动旋转定义为:绕z-轴的主动旋转定义为:旋转注意事项物体平移到原点实现旋转物体平移到原来的位置...原创 2019-07-18 10:12:54 · 533 阅读 · 0 评论 -
游戏图形学 ——河流效果简单实例
实现原理:纹理移动,模型静止备注:uv坐标取值范围(0-1)Shader "Hidden/River"{ Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { // No culling or depth Cull Off ZW...原创 2019-07-16 10:20:42 · 355 阅读 · 0 评论 -
屏幕后期特效——模糊
场景渲染完以后再添加一些特效引擎渲染后最终的结果是一张图片void OnRenderImage(RenderTexture src, RenderTexture dest) //入口函数Graphics.Blit(src,dest,myMaterial);——拦截相机渲染出来的图片,用指定方式修改后再重新交给引擎将图片传给Shader进行二次计算...原创 2019-07-25 10:46:49 · 258 阅读 · 0 评论 -
屏幕后期特效——Blood(角色死亡闪血)
Blood 血液闪烁特效1、红色光线从两边闪出2、红色从两边倒中间渐变淡(通过圆心的距离判别渐变的距离)Shader 代码:Shader "Hidden/Blood"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Blood("Length",float)=1 } ...原创 2019-08-06 10:49:12 · 3540 阅读 · 1 评论 -
Unity学习——相机跟随
在游戏场景中,主角在场景中移动需要摄像机跟随主角移动,本文主要介绍简单的主角移动。PlayerMove:public class PlayerMove : MonoBehaviour{ // Start is called before the first frame update void Start() { } // Updat...原创 2019-08-15 10:46:30 · 386 阅读 · 0 评论 -
Unity面试汇总——基础二(C#常见基础)
1、private、public、protected、internal的区别原创 2018-12-07 17:02:59 · 1086 阅读 · 0 评论