- 博客(49)
- 资源 (25)
- 收藏
- 关注

原创 3D战斗手游战斗系统Demo
先看下框架:框架分为战斗系统(BattleSys):负责界面与战斗管理的交互,即用户点击了某个按钮,界面通过战斗系统转接给战斗管理,例如技能的释放。玩家操作界面(PlayCtrlWnd):UI界面,负责获取玩家的点击等。玩家逻辑实体类(EntityPlayer):存储玩家的数据,例如当前的血量,攻击等。玩家表现实体类(Controller):顾名思义,指代unity中的各个组件,例如Animator,播放角色动作。技能管理器(SkillMgr):负责技能的释放。状态管理器、状态机
2020-12-14 01:39:46
849
原创 3D数学在unity中的使用(工作小结)
公司的游戏,想实现一个类似于元气骑士前传的技能面板,这里的技能可以实现旋转替换。记录一下我遇到的问题及解决办法。
2024-10-14 09:27:18
457
原创 2D项目经验总结
此时就有一个很尴尬的点,勾选上isTriger,不会与地形产生交互,直接会掉下去,不勾选又无法和玩家产生触发伤害击退的交互,因此只需要使用俩个碰撞体即可,一个作为碰撞器,一个作为触发器。Project面板中创建 Animated Tiles,然后选择要动起来的图片数量,如图中瀑布是四格,因此添加四格,然后将对应顺序的瀑布图片填入,一共会创建三个Animated Tiles,然后将他们拖入到Tile Palette面板中,选中他们绘制出来的图片即是动起来的瀑布。玩家与地形之间的碰撞使用碰撞器来触发。
2023-09-05 14:08:59
611
原创 Unity Behavior Designer学习笔记与工作总结
Unity Behavior Designer插件学习笔记与工作总结为什么要用Behavior Designer实现一个最简单的Behavior DesignerBehavior Designer的属性介绍BehaviorTasksVariablesInspector案例1:实现最简单的怪物巡逻效果案例2:怪物在巡逻,玩家向目标点走去,如果路上看见了怪物,那么则改为追怪物。为什么要用Behavior Designer日常工作中,我们总要用代码实现各种各样的AI,例如怪物攻击玩家角色,通常情况下有三个阶段
2022-01-14 17:37:49
4641
1
原创 Unity动画系统常用知识总结
Unity动画系统常用知识总结资源导入需要注意的地方常用的组件Animator 组件Avatar Mask 骨骼遮罩Animator Controller资源导入需要注意的地方导入数据的时候,需要看当前模型是否符合unity的正常大小。方法:创建一个Cube,然后将模型拖到场景中与Cube比较一下大小,如果大小不合适需要在模型中调整,而不是调整unity的游戏物体,避免出现不必要的错误。常用的组件Animator 组件重点介绍一下前三个。Contorller:游戏状态控制器,控制当前角色处
2022-01-14 00:31:02
3316
原创 Unity物理系统常用知识总结
Unity物理系统常用知识总结碰撞器 XX Collider触发器刚体 Rigidbody组件Constant Force射线碰撞器 XX Collider碰撞器组件,有多种类型,图上的这个是盒状碰撞器,绿色边缘,表示这个物体可以接受碰撞。常用API1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器3.Mon
2022-01-12 22:58:12
3122
原创 Unity用Animation组件制作简单的动画
游戏中经常会出现动态提示,例如提示当前金钱不足,一般会从屏幕中央弹出,然后缓慢的向上飘去。今天游戏项目中遇到了这么个要求,以前做过几次,但总是会忘记,而且随着unity版本更新,新版本总有些莫名其妙的坑,今天写个文章记录一下。首先用到的组件是Animation,这个组件可以制作动画。先创建一个文件夹,添加一个Animation。然后创建一个提示框文本,添加上Animation组件。然后将刚才创建的Animation拖上去。注意:在project面板下点击Animation组件是无法添加动画的
2021-12-15 15:13:45
12527
原创 unity通过全局事件对项目进行解耦
一个类要是想调用另一个类的方法,例如A想调用B的方法。方式一:引用最简单的方式是A持有一个B类的引用,即A拥有一个B的成员对象。方式二:设计模式(中介者模式)或者A和B同属于一个对象C,通过对象C调用对方(中介者模式),例如QQ群,A和B互相没有对方好友,但是都在一个QQ群C,他们可以在C互相和对方说话。方式三:静态(通常是单例模式,B是管理类等)将B中的方法设置为静态方法。但是项目中,有N多类,A和B完全没有关系,不宜有对方的引用,并且都不是工具类,不宜设置为静态方法。那么此时,我们该如何让
2021-11-25 20:02:28
2934
原创 Unity Toggle组件踩坑使用笔记
项目中需要用到排序功能,两种排序,一个型号,一个是评分。最简单的方法是制作两个Button,同属同一个View,通过中介者模式拿到对方的引用,当被点击的时候修改自身与对方的状态。但是这样比较麻烦,而且可能要添加一些属性去控制一些状态,比如当前是否已经选择了等,稍微有点麻烦,因此我们可以使用UGUI中的Toggle组件。先看一下Toggle的基础属性图上有几个属性我没有标解,因为暂时用不到,查了说不定长时间没用就又忘了。从图上我们需要关注三个点(其余的使用默认即可)Is On 代表使用是否选择了当前
2021-11-22 19:52:45
4548
原创 记录unity一些常用又易忘的API
代码中经常根据用户点击更改图片的显示效果,例如点到一个子项,用户没有购买,可能显示的就是未购买的图片,已经购买显示的就是升级图片,一种方法是游戏物体下含有俩张图片,根据用户的点击显示不同的图片,另一种方式就是动态加载。时不时的就会遇到这种需求,但是我又经常忘记相关API,百度出来的结果乱七八糟,就自己记录一下。API如下: Image.sprite = Resources.Load(path, typeof(Sprite)) as Sprite; Imag
2021-10-22 15:11:10
1734
原创 Unity Scroll View踩坑记录
Unity要想实现游戏中的背包滑动效果,最简单的方法就是使用ScrollView这个组件,这个组件可以实现拖动滑动的效果。如上图所示,我希望将这些Item实现背包的排版效果。第一步:现将所有的Item移到Content下,此时我们会发现部分图片被隐藏,显示不全,效果如图下所示第一个小坑:图片显示不全。原因分析:Viewport上挂有一个Mask组件,会将超出范围的内容隐藏(范围是四个蓝色的点内部),如图下所示。第二步:给Content上添加GridLayoutGroup组件,实现排版美观。
2021-10-20 10:36:17
6221
原创 设计模式总结
设计模式总结什么是设计模式,为什么要用设计模式?七大设计原则什么是设计原则, 为什么要使用设计原则?开闭原则什么是设计模式,为什么要用设计模式?简单来说,设计模式就是为了规范,为了复用以及出问题修改方便。举个例子,你去到了一家新公司,软件分为画面和音乐等几个部分。新版本发布,用户说没有声音,此时你不可能把所有的代码全部看完,然后找出问题在哪,这样效率太低了,你只需要查看音乐部分设置的代码,就可以解决问题。那么如何知道音乐部分代码在哪?这就需要用到设计模式,假设我们规定Music文件夹下的所有文件都是音
2021-09-19 21:32:49
782
原创 unity性能优化攻略
优化分为两大类:渲染优化(GPU):GPU优化蛀牙是针对DrawCall这个参数,这个参数具体是什么可以自行百度,这里不做过多解释。举个最简单的例子,复制一个1G的文件到另一个位置,与复制1024个1M的文件到另一个位置,肯定是复制1G的快。所以DrawCall也是一样,每次调用DrawCall都可以理解为有准备工作与善后工作,我们需要做的就是讲能合并的DrawCall合并,减少准备工作与善后工作的次数。1:层级细节LOD技术即不同距离下渲染的物体不一样,例如近距离就渲染高精度的模型,距离远了之
2020-12-29 15:05:32
676
1
原创 Unity灯光与渲染
常用的几种光源平行光源可以理解为太阳光,位置在哪都一样,可以通过调整角度修改光源的方向。点光源从一个点像周围发出光,可以通过Range的值更改范围,可以用来放在灯泡上。Spot Light可以理解为锥形光源,可以用在台灯的环境下。Area Light范围光,只能在Bake模式(后续会讲)下用。可以提前将光照效果烘焙好,给物体增加一层贴图,实际运行时减少性能消耗。...
2020-12-15 00:53:54
2265
原创 Unity编辑器扩展精粹笔记(更新至第一部分,创建笔记,可选择已完成和未完成)
第一部分,做出如下界面并实现相关功能,添加删除,是否确认完成。实现步骤:这个功能实现起来很简单,创建一个类,有一个数据的成员(此处用最简单的List)。调用获取界面的API(创建页面的方法),然后在OnGUI方法中(可以先理解为update)根据List调用GUILayout一系列API即可实现(绘制的相关方法)。//调用窗口APIvar window = GetWindow<T>(true);//按钮APIif (GUILayout.Button(Text)){ OnC
2020-12-14 15:45:47
392
原创 暗黑战神学习笔记
暗黑战神游戏开发游戏学习笔记初始场景与UI界面制作光照系统有哪些参数可以设置光源?1、点光源2、window界面下的LightSetting光照系统的优化方法Animation系统初始场景与UI界面制作光照系统有哪些参数可以设置光源?1、点光源2、window界面下的LightSetting光照系统的优化方法光照系统渲染可以分为实时渲染和预渲染对于动态物体可以进行实时渲染,但是对于一些不动的物体,可以设置为预渲染模式,会将一部分内容预先保存到贴图文件。Animation系统制
2020-12-14 15:44:16
1629
2
原创 八道练习题教你轻松学会运用Unity中的协程用法
携程协程是什么协程有什么用(为什么要用携程)练习题与讲解第一题第二题第三题第四题第五题第六题第七题第八题要点总结协程是什么简单来说,协程就是Unity官方提供的一个类似于C#中多线程的功能。可以在组件中使用(即继承与monhaviour),为什么不直接用C#多线程,别问,问就是不安全。协程有什么用(为什么要用携程)可以实现异步加载,达到多线程的效果(实际上并不是多线程)。具体用法可以参考我的这一篇文章Unity使用协程实现异步下载图片并加载练习题与讲解第一题 void Start()
2020-11-18 20:20:10
524
原创 C#泛型详解
泛型什么是泛型泛型的语法为什么要用泛型,泛型的优点是什么?泛型约束是什么,有什么作用什么是泛型泛型就是将类型做参数的技术!详细一点来说就是:泛型就是就是使用类型参数定义的数据类型或方法。平常使用List的时候,我们就在不知不觉中已经使用了泛型。泛型的语法泛型的语法有俩种.第一种是在类名后面加上 class My<T> { ArrayList arrList = new ArrayList();// public void Add(T
2020-11-18 00:17:40
5856
原创 C#接口详解
接口什么是接口接口的作用是什么接口的语法特点接口的使用什么情况下应该使用接口总结什么是接口使用关键字interface创建的数据类型。接口的作用是什么1、接口是抽象的,接口是一组行为的抽象。接口只表达 “能做什么” , 不表达“如何做什么”2、接口是规范,定义一组对外的行为规范。即实现类必须实现接口的所有成员。1、扩展一个已有类的行为。2、规范不同类型的行为。接口的语法特点1、接口中不能包含字段,可以包含:行为【方法,属性,索引器,事件】2、接口中的所有成员不能加任何访问修饰符,全部
2020-11-17 18:41:39
8378
原创 Xlua学习笔记
xLua调用C#方法时,如果用“.”符号,第一个参数需要加上self,用“:”则不需要。xLua调用复杂的C#的方法时,out不算输入形参,ref算输入形参,但是两个都算输出形参。
2020-10-11 03:09:02
738
1
原创 MySQL学习笔记(基础)
安装不多介绍,随便百度一下有很多Mysql安装教程,全程选择默认选项点下去就行,需要注意的是要自己设置管理员超级账号密码,这个可不能忘了。MySQL Workbench数据库UI管理界面,可以通过这个简易的创建表或者创建新的连接。点击加号,在Connectio Name填入你想新创建的连接名字即可。可以通过右下角托盘区的标志打开。也可以在文件夹目录下找到文件。如何打开Mysql1、在开始菜单找到MySQL Command Line Client按照提示输入密码即可。2、找到Mysql
2020-10-02 16:23:21
209
原创 Unity编辑器拓展精粹学习笔记(SIKI学院)
本篇博客为SIKI学院学习笔记。需求1:在菜单栏中实现编辑器拓展功能。(可以自定义添加组件等)例如:软甲开发中为了提高效率,在编辑界面需要快速添加一些层级,每次都手动添加浪费时间,此时则需要用到编辑器拓展。问题1:如何拓展编辑器(即添加自己自定义选项):创建任意一个类,添加如下代码: [MenuItem("编辑器/Test")] static void Test() { Debug.Log("调用了自定义编辑器"); }编辑界面效果:点击效
2020-09-24 20:11:48
430
原创 StrangeIOC中Signal类使用详解
在讲解Signal类之前,先复习一下dispatch的用法。1、View层调用自身的dispatch(view)告知绑定的Mediator层也调用自身的dispatch(mediator)2、Mediator层的dispatch(mediator)通常绑定了两个方法,一个是写在mediator层中的方法(多半是获取数据将数据传给view层,view层再调用自身的方法),一个是在Context中绑定的Command事件,执行顺序是先执行绑定的事件,相关的事件执行完毕返回数据,然后再执行另一个方法(这里比较
2020-08-24 16:14:51
602
原创 Unity制作自定义消息提示框
工作中使用软件经常会出现各种提示框?确定XXXXXX吗?选项一般是三个,是,否,取消。今天心血来潮,于是也尝试自己用unity制作一个简单的消息提示框。准备工作:首先需要搭建一个最简单的消息框界面。然后开始编写编写一个单例模式类,专门用来管理各种消息提示框,代码如下:public class SingleMessageBox : MonoBehaviour { public static GameObject UIMessageBox; private static SingleM
2020-08-12 17:24:36
3313
原创 Unity中Camera常用属性详解
Camera前言Camera属性一览Clear FlagsCulling MaskProjectionClipping PlanesViewport Rect三级目录前言工作中遇到了和Camera有关的问题,虽然最终通过百度解决,但是对于Camera还是一知半解,并且Camera在Unity中经常用到,非常重要,于是查询相关API并且亲自操作,有了以下这篇文章。Camera属性一览Clear FlagsDetermines which parts of the screen will be cl
2020-08-11 10:02:41
4666
1
原创 unity如何让某个物体永远显示在最前面(3D层)并保存成型后的图像(不显示UI层)(多个摄像头的用法、三种截图)
前言公司经营一款绘图相关的软件,近期有客户反映,尺寸标尺会被画图数据挡住。现在就来解决一下这个问题。遮挡分为两种情况,一种是UI界面下的组件遮挡(即Canvas画布下),另一种是3D层靠近摄像头的物体遮挡后方的物体。UI层的很好解决,越下层的物体越是最后渲染,只需要将显示在前方的物体放在最下面即可。重点介绍3D层如何将物体显示在最前方。首先:我们要知道3D层的渲染顺序,离摄像机距离越近,越是显示在最前方。即和人眼观察物体一样,假设有一杯子和一张桌子,杯子放在桌子前,我们会先看到杯子,然后在看到桌子
2020-08-05 16:25:45
8493
原创 Unity如何制作自定义控件(双击按钮)
工作中遇到一个问题,客户说有时候会误触到按钮,操作不方便,希望将按钮改为双击生效。既然客户有要求,那就要完成,实现起来也非常简单。最偷懒的方法是将原来Button中Button组件去除,然后自己写一个双击脚本挂上去就行。但这样复用起来比较麻烦,就顺便研究了一下Unity如何制作自定义控件。任务:如何制作一个自定义的双击按钮。如何实现:1、如何实现添加自定义控件2、如何实现双击功能添加自定义控件很简单,UGUI是开源的,只要拷贝相关的源代码(UGUI源码下载),然后依葫芦画瓢照着写一个就可以了。UG
2020-08-04 17:12:14
1883
1
原创 C#使用匿名函数与委托实现方法的回调
匿名函数何为匿名函数?在搞懂匿名函数之前,我们先回顾一下正常函数,显示的声明一个方法,然后调用。那么匿名函数就是不用声明,直接使用。直接看一个例子。上图中匿名参数的格式为()=>{ 函数块 }正常委托调用(不使用匿名函数)。匿名函数(Anonymous Function)是表示“内联”方法定义的表达式。匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型。匿名函数转换的计算取决于转换的目标类型:如果是委托类型,则转换计算为引用匿名函数所定义的方法的委托;如
2020-08-03 10:19:53
1412
原创 Unity对象池应用
对象池,顾名思义,就是放对象的池子。优缺点:空间换时间,用额外的内存消耗减少创建物体的时间,保证运行的流畅度。何时用:当需要大量创建相同游戏物体时,例如射击游戏中不停的创建子弹销毁子弹。大量地创建物体销毁物体会造成游戏卡顿,为了解决这个方法可以采用对象池。实现1、需要一个容器,用来实现存放对象2、一个取对象的方法3、一个存对象的方法详细代码如下:关键地方已写了详细备注。public class GameObjectPool : MonoBehaviour { private st
2020-07-30 13:34:23
646
原创 Lua学习笔记(记录与C#的异同点)
基本语法方面:注释:单行 --“需要注释的内容”多行 --[[“需要注释的内容”–]]代码格式:不需要使用“;”符号做结尾变量:Lua 变量有三种类型:全局变量、局部变量、表中的域。Lua 中的默认变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。变量的默认值为nil。数据类型nil:等价于C#中的null,在bool判断是为falseboolean:布尔判断,只有true和false,需要注意的是lua中只有nil为false,0也是truen
2020-07-28 11:20:09
384
原创 unity实现自定义位置添加备注(文字)功能
公司经营的软件与绘图相关,这天,客户提出来一个需求,希望能在绘图的任意位置添加备注,方便厂家之间沟通。客户要求:可以在任意位置添加、修改、删除。实现过程:1、如何创建?这个问题很简单,UI界面添加一个Button,绑定一个事件,点击的时候创建一个游戏物体专门用来显示文字。显示文字使用TextMeshPro插件,如下图:2、如何修改文字?这个问题也很容易解决,添加一个inputfiled组件,获取用户输入的文本,然后再将用户输入的内容传递给TextMeshPro即可。3、如何实现移动这些文字?
2020-07-24 15:25:02
4073
2
原创 Unity使用协程实现异步下载图片并加载
工作中遇到一个加载卡顿的问题。公司软件有一个色卡功能,用户可以根据点击的色卡更改背景等相关图片。并且色卡支持用户自定义上传,但是这里就遇到了两个问题。1、从服务器下载色卡会造成卡顿。2、创建物体并给RawImage赋值的时候会造成卡顿。以上两个问题加起来会造成明显的卡顿,特别影响客户使用体验,因此,尝试使用协程优化下载和加载。第一步:定义一个异步加载的类。...
2020-07-21 10:06:08
3196
原创 AssetBundles打包学习笔记(基础)
什么是AssetBundle1、它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:serialized file 和 resource files。(序列化文件和源文件)serialized file:资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)resource file:某些二进制资源(图片、声音)被单独保存,方便快速加载。2、它是一个AssetBundle对象,我们可以通过代码从一个特定的压缩包加载出来对
2020-07-09 15:03:11
832
原创 记一次IOS打包报错
公司有一个两年前的项目,用户突然发现一个简单的小BUG需要改,改的简单,但是在IOS打包的时候遇到不少问题。首先,第一个问题,也是浪费了我最多时间去解决百度和谷歌都搜索,得到的结果都一样,都是说缺了XXX库/类,在图中如下添加即可。但是!!!不是随意添加,添加多了也会报错,最好是问一下公司相关人员,之前打包的时候用了哪些库/类。解决上面这些报错我添加了以下这些以及将Enable Bitcode设为No好不容易在Ipad上编译完成,但是正式运行的时候提示“libc++abi.dylib: t
2020-06-30 09:48:49
5313
原创 Camera根据鼠标操作观察物体(移动,转动,滑动)
领导安排了一个任务,客户需求根据鼠标操作可以更详细的观察物体,于是开始研究Camera的使用
2020-06-29 10:14:57
859
2
原创 SIKI学院简易射击游戏与数据读取保存学习笔记
知识点(疑问点)1、如何控制枪的旋转(朝向)?2、如何控制怪物的生成,消灭?3、如何保存当前游戏数据?4、游戏相关的开始结束,暂停功能如何制作?1、首先将枪放置在一个合适的位置,分别在X轴和Y轴上旋转,获取X轴和Y轴的最大旋转幅度。通过Input.mousePosition,获取当前的X、Y坐标,然后分别处以Screen.width与Screen.height,算出当前屏幕位置的百分比,接着用百分比乘以最大旋转幅度。接下来就是一些功能补充,添加一个子弹预制件,点击的时候生成,然后通过Rigi
2020-06-22 10:37:11
259
Mesh进行3D渲染绘制
2020-05-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人