自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

京城下了一场大雪的博客

学习路上的一些记录

  • 博客(27)
  • 收藏
  • 关注

原创 Socket服务器通讯架构与观察者模式

Socket服务器架构类图SeverSocketRole学习自www.u3dol.com每日学习每日记录类图SeverSocket服务器端Socket,用来与各个客户端进行连接。建立一个控制台程序用来做主入口进行Socket的初始化using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;

2021-02-03 17:04:05 393 1

原创 Unity技能系统架构

角色技能系统架构分析类的设计技能数据类技能管理类技能释放类类的调用流程封装变化具体代码技能数据类技能管理类选择攻击目标接口扇形选择攻击目标接口实现影响效果接口造成伤害接口实现技能释放器近身技能释放类技能释放类配置工厂类学习的技能系统。架构分析先看一下我Demo中的技能,我方释放了一次普通攻击,Boss总共释放两个近身技能,一个范围攻击,一个单体攻击技能的释放流程是,当按下了技能按钮或满足了条件,实例化出技能预制体,受伤方受伤一个角色肯定要有多个技能。先来分析一下技能的共同点。1.技能的数

2021-01-11 21:35:57 3077 4

原创 基于委托的低耦合消息传递

消息传递中心用到知识点,委托,字典数据结构Unity内置了SendMessage方法,但是耦合性较高,在调用委托时候会调用委托上所挂在的方法,在调用时并不确定都挂载了什么方法。需要消息的一方只需要在委托上挂载方法,利用委托中的参数(消息),就可以接收到所需要的信息。实现了低耦合的消息传递。现在我这里有四个按钮需要同时打开一个UI面板,在UI面板中需要显示一些信息,但是我不知道要显示一些什么东西,这时候就需要别人告诉我信息,传递过来什么我就显示什么。建立四个按钮,并且一个面板 ,按钮用来打开面板

2020-12-26 17:15:09 181 4

原创 解决button组件只有单击并且没有事件参数

ButtonButton事件实现效果Button只具有单击事件,而其他大多数事件(按下,双击,抬起,拖拽。。)都不具有Button具有的单击事件没有事件参数类,满足不了需求Button事件通过翻Button的代码我们可以发现Button是实现了IPointerClickHandler接口,我们可以模拟Button编程思想,来实现具有事件参数类的事件监听类,来提供Button所没有提供的功能实现1.创建一个Button并且创建脚本UIEventListener挂在Button组件2.引

2020-12-07 21:02:14 321 1

原创 (unity)利用二进制位运算储存buff

利用二进制位运算储存游戏中的buff在某些游戏中尤其MMORPG中buff是必不可少的,某些游戏甚至会达到二十甚至三十多个buff,我们每一个buff都开辟一块空间储存,会造成网络传输缓慢。所以我们可以选择在位上存,例如一个int类型变量拥有32位,这里最我们可以储存32个buff状态。接下来我们先来了解一下位运算。二进制计算位运算符&按位与 A&B:如果该位都为1,结果为1,有一位为0,该位就是0|按位或 A|B:只要有一位是1,结果就是1按位取反 对每一位进行取反0-&g

2020-11-19 20:39:16 672 1

原创 【Unity Tile自定义及转json工具】

Tilemap 功能,Tile拓展,如何遍历存储Tile位置信息

2022-07-24 14:37:56 1247

原创 打包安卓文件读取的一些坑

最近一段时间和小伙伴做了一个demo,在打包安卓的时候遇到了一些神坑。不得不说打包的调试是真的折磨人。希望有看到的朋友不要再踩坑。安卓StreamingAssets文件夹由于UGUI界面全部是用lua来写的,但是没有服务器,所以决定将lua文件放在StreamingAssets文件夹中来读取。这时问题出现了,无法读取。后来看了雨松大神的文章才知道安卓端的StreamingAssets文件夹中的文件虽然可读,但是不可以用IO流读取,可以用AB包来读取,所以就决定将lua文件以及一些动态数据给打成AB包读

2021-04-17 16:35:33 323 1

原创 实现UI灰度图

实现原理很简单就是在逐像素渲染的时候逐像素将该像素点的颜色改为灰色,灰色的明暗根据灰度图的公式计算赋值给纹理颜色就可以了。灰度的公式color.r * 0.3 + color.g * 0.59 + color.b*0.11如果需要改ui图片的shader需要使用unity的内置shader在官网下载文件并且找到UI-Default将其导入到项目找到shader中的片元函数加入实现灰度代码最后创建一个材质球选择该shader并且拖到Image组件上的material上就实现了...

2021-03-25 20:55:00 230

原创 使用lua实现任务面板

lua实现任务面板观察者辅助类JsonLuaDefineSelfDefineLuaMgrLuaBehaviorM层 TaskInfoManager,任务信息管理类M层 CharacterTaskManager 人物任务背包向观察者注册监听VC层 TaskPanel 任务面板点击按钮注册监听lua与C#的交互以及简易任务面板增加任务减少任务增加任务需求数量观察者因为增加任务目标的数量数据跨系统交互所以加上一个消息派发中心辅助类JsonLuaDefine储存lua中常用的C#类Se

2021-03-24 21:28:49 360

原创 AB包的加载工具类

AB包的加载工具类AB包的加载中如果重复加载就会报错,利用字典的键唯一来解决考虑到异步加载所以需要继承Mono类定义出字典以及AB包的储存路径,由于主包需要用来获取依赖关系并且经常使用 先给定义出来加载AB包,现在已经加载的AB包中查找 如果没有则说明没有加载,再进行加载 如果有直接返回卸载AB包 全部卸载就不可以用AssetBundle自带的了 因为需要在管理类字典中移除加载资源...

2021-03-15 21:32:23 118

原创 UI排行榜功能实现及优化

排行榜模块实现及优化排行榜模块的实现首先数据模型 玩家的分数名字以及等级。模板上挂脚本 对外提供显示数据方法Panel上挂管理当前Panel脚本首先处理数据有了数据就复制模板到Content下循环排列排行榜模块的实现不涉及优化的情况下可以直接在滑动框上加自动扩容以及纵向排列组件直接实现,实现起来比较简单,但是每一个模板下有着非常多的物体,排行榜如果要显示一百个人就要有上千个游戏物体。可以看到有一个漂浮不动的就是每一个的模板,利用模板克隆到Content。再根据数量决定Content框的大小以及

2021-03-03 17:42:56 320 1

原创 IO工具类 MemoryStream扩展

每日学习,每日记录C#自带的MemoryStream有时候不能满足需求 所以扩展一个工具类来进行使用用法与MemoryStream用法一样,扩展了写入读取更多类型using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;namespace GameSeverApp.Common{ public class MyMemoryStream:Me.

2021-02-03 16:12:33 166

原创 深度拷贝及封装深度拷贝工具类

什么是深度拷贝需求复制一个People类,不考虑new一个如果这么做的话发生的是引用传递,也就是将指向p1所指向内存空间的地址传递给了p2,也就是p1与p2指向同一个内存,所以改变p2的值p1也会改变,这就是浅度拷贝根据如果将一个对象序列化成字节序列,再根据字节序列反序列化成一个对象就可以复制一个对象,并且改变其中一个其余的不会发生改变首先一个类想要进行序列化必须有可序列化特性修饰,并且引入命名空间实现深度拷贝测试改成泛型做成工具类...

2021-01-23 17:22:08 274 1

原创 序列化与反序列化

什么是序列化序列化是将一个数据对象转换成有序字节流的过程。尔反序列化就是将字节序列转换成数据对象(1)通过序列化永久性保存对象,保存对象的字节序列到本地文件;(2)通过序列化以字节流的形式使对象在网络中进行传递和接收;(3)通过序列化在进程间传递对象;序列化定义一个Student数据对象用来储存到本地数据对象必须要有可序列化特性修饰初始创建一个数据对象赋值,用来存储到本地写一个序列化方法,将对象转换成二进制字符需要将数据对象的二进制格式存入内存流中。再由内存流转换成二进制字符返回。

2021-01-19 18:18:34 82

原创 Unity解决Button响应区间过大及不规则Button的响应

首先当然是可以裁剪小一点的。如果不可以裁剪怎么解决第一种解决方案,在要求不精细的情况下Button组件上Target Graphic 就是响应区域,可以通过更改来改变首先要给Button上Image上的Raycast Target取消掉,UGUI是通过Image来进行检测的然后创建一个子物体Image适当调小然后透明度调0,将Button组件上的Target Graphic选择子物体就好了如果要求较高或者是不规则的按钮要求较高的情况下首先将Button上的Image组件移除 自己写一个M.

2021-01-13 21:50:17 2260

原创 协程及异步加载资源场景

同步加载以及异步加载协程协程与多线程的区别协程的开启协程函数的定义资源资源的同步加载资源的异步加载场景场景的同步加载场景的异步加载同步加载:在主线程中进行加载异步加载:单独开辟一个加载的线程用来加载资源,不影响主线程的进行协程协程是在主线程运行的同时开启另一段逻辑处理,来协同当前程序的执行协程与多线程的区别Unity中虽然可以开启线程但是不能直接调用Unity中大部分的Api,协程可以代替线程,但协程不是多线程,只是在模拟多线程。在多处理器下,从概念上来讲,多线程程序同时运行多个线程,而在

2020-12-30 17:52:21 463

原创 Unity背包系统 关键代码记录(二)

库存管理类管理系统内多成员需要的方法存有物品列表,对外提供查找物体的方法存有信息显示的实例手中物品的方法,拿起与移除技术点:屏幕坐标转UI坐标实现手中的物品与信息提示框跟随鼠标移动技术点:当前鼠标下是否有UI 这里如果UI的IsRaycaster取消勾选就不能检测到点击鼠标,如果当前鼠标处没有UI丢弃物品装备的格子类因为也是格子,需要格子类中的所有功能,所以继承格子类属性:当前格子可以存放的装备或者武器类型行为:脱装备,如果按下右键直接拖下或者按下左键将装备槽中装备放到手上

2020-12-26 15:43:10 224

原创 Unity背包系统 (关键代码记录 一)

ItemUI属性:在UI层面每一个ItemUI就相当于一个Item,因为ItemUI是每一个Item的实例的表现设置UI显示,需要一个UI实例,以及个数扩展方法出来的方法 如果一个物品槽已经有相同物品了,name只需要增加数量交换显示在背包里少不了交换位置,做好公用方法Slot物品槽类也有储存物体方法,只不过储存的是ItemUI实例化ItemUI并且作为自己子物体,再由ItemUI具体显示物体实例判断当前物品槽下的物品是否是满了,如果数量》=容量就代表满了。再往里放物品就放不进

2020-12-20 17:50:49 701

原创 Unity背包系统 设计流程

背包系统UI结构设计流程关键类数据类库存类物品槽类物品UI类本篇记录下设计流程,下一篇记录技术点UI结构设计流程数据类: 装备基类及各种子类 不作为终点 储存所有装备信息通过json读取数据创建对象库存类: 背包类及仓库类的基类,考虑背包与仓库属性行为基本一致,抽象出来库存类存放公共方法及属性库存管理类: 单例 初始化读取json创建所有物品对象,管理背包与仓库物品槽类:挂在每个物品槽上,处理物品槽逻辑 如:交换,储存,移除手中物品类: 交换时手中的物品类 挂在PickedIt

2020-12-20 17:15:25 876 1

原创 unity有限状态机(敌人ai)架构(2/2)

状态类及优化状态机优化点创建对象代码乱有限状态机架构状态机脚本!唯一拥有查找组件能力的人,为状态子类与条件子类提供代码最多的类!!!!!!初始化时候配置状态机,读取StreamingAssets文件夹下的文件来反射创建状态对象并且实现数据结构Dictionary<状态Dictionary<当前状态所有改变状态条件,改变状态条件所对应的状态>>设置默认状态为当前状态为状态类提供切换状态方法,unpate中每帧调用状态类中的检测条件是否满足方法,如果满足切换状态us

2020-12-03 21:19:40 248

原创 unity有限状态机(敌人ai)架构(1/2)

架构思想及条件状态类架构思想枚举条件类状态类有限状态机架构架构思想什么是有限状态机?所需状态确定,有事件触发转变状态,总状态有限且转变有规律。Animatior组件其实就是有限状态机,每帧检测当前状态下的条件有无发生改变,如果改变就执行满足条件状态。之后再在当逻辑下检测有无条件改变。周而复始。按照这个思路来进行敌人AI的开发。Created with Raphaël 2.2.0执行当前状态检测当前状态是否有条件满足是否有条件满足?执行满足条件的状态yesno所以每一个状态都应该有一个映射

2020-12-03 21:19:32 434

原创 Unity工具类StreamingAssets配置文件读取器

用途用途读取StreamingAssets文件下的配置文件。代码using System;using System.Collections;using System.Collections.Generic;using System.IO;using UnityEngine;namespace Common{ public class ConfigurationReader { /// <summary> /// 获取配置文件

2020-12-02 21:45:44 266 1

转载 Unity优化 调整画质(贴图)质量

写在前面当我们在Unity中,使用图片进行2D显示时,会发现显示出来的画面有明显的模糊或者锯齿,但是美术给的原图却十分清晰。要改善这一状况实际上很简单。造成这样的原因,是Unity在导入图片(或者纹理)时会自动进行压缩,以便减少运行时游戏的内存占用率,提供性能。将它作为背景时可以发现,上面的画质不怎么尽如人意,例如左上角的帆船和右上角的皮球,有明显的模糊和锯齿。观察该图片对应的Inspector面板(注意这里的纹理类型是Sprite),如下所示:其中对画质有影响的部分,已经用红框圈出。根

2020-11-28 14:16:14 2882

原创 Unity实用工具类(对象池)

using System.Collections;using System.Collections.Generic;using UnityEngine;namespace Common{ /// <summary> /// 使用方式 创建对象GameObjectPool.Instance.CreateObject(类别,预制件,位置,旋转) /// 回收对象GameObjectPool.Instance.CollectObject(游戏对象

2020-11-26 18:40:53 136

原创 Unity实用工具类(数组助手类)

数组助手类using System;using System.Collections.Generic;using UnityEngine;namespace Common{ /// <summary> /// 数组助手类,主要就是对数组的一些改造和操作; /// 提供一些数组常用的功能 /// </summary> public static class ArrayHelper { //7个方法 查找

2020-11-23 20:40:29 323 2

原创 Unity实用工具类(单例)

单例工具类using System.Collections;using System.Collections.Generic;using UnityEngine;namespace Common{ /// <summary> /// 脚本单例类 /// </summary> public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>

2020-11-23 20:20:17 219

原创 (unity)Resources查找游戏预制体优化

在游戏中我们很多时候都需要查找预制体并且生成,必不可少用到Resources文件夹进行。记录一下在学习中遇到的优化方式Ps:这里是跟着祁天暄老师讲技能系统时候所学习到有需要的可以。。。。。。在游戏中生成技能的时候我们需要根据技能名称来寻找技能预制体。SkillData用来储存技能数据存有技能预制体名称和技能预制体。这里技能储存在Resources/Skill目录下代码如下 private void InitSkill(SkillData data) { .

2020-11-23 20:16:42 1511 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除