![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity
帅_shuai_
用自己的努力去收获自己的未来
展开
-
C# 实现Lru缓存
代码实现的基本原理就是使用链表,当某个元素被访问时(Get或Set)就将该元素放到链表的头部或者尾部(根据用户自己定义规则即可)当达到了缓存的最大容量时对最不常使用的元素进行移除(移除的时候可以定义一系列的规则,用于判读如何移除,是否移除)LRU 算法全称是最近最少使用算法(Least Recently Use),是一种简单的缓存策略。通常用在对象池等需要频繁获取但是又需要释放不用的地方。下面直接贴出来代码供大家参考。原创 2023-12-09 09:19:12 · 395 阅读 · 0 评论 -
分享一个看到的有意思的对象池(灵活对象池)
相比于传统的对象池中的对象是拿到对象之后在另外的脚本中书写逻辑,能不能给对象池中的对象都创建一个基类,创建回收或者销毁都在该池子中实现呢,并且一般的对象池不能去使用Unity常规API进行销毁其中的对象只有回收和释放,能不能有一种更自由的方式呢,根据不同的项目进行取舍即可没有最优只有最适合的方式。原创 2023-10-10 18:31:19 · 221 阅读 · 0 评论 -
C# Unity FSM 状态机
使用状态机可以降低代码耦合性,并且可以优化代码可读性,方便团队协作等。对于游戏开发内容来讲游戏开发的流程控制玩家动画都可以使用FSM有限状态机来实现。原创 2023-09-08 17:00:02 · 1129 阅读 · 0 评论 -
Unity 时间定时调度系统
之前的文章也有写过时间调度系统,但是没有支持异步调度只有回调调度,而且效率和代码可读性不是很好,下面介绍一种更优质的时间调度系统。原创 2023-09-06 10:24:55 · 898 阅读 · 0 评论 -
EventSystem 事件系统
事件系统在开发中必不可少事件系统使用观察者模式可以极大程度降低程序的耦合,之前的文章也讲过事件系统但是不够高效简洁,如何轻便高效优雅的实现一个事件呢?依然基于之前的和进行开发,主要原理也是根据反射去获取事件的接口使用反射进行实例化处理类,而非人工手动订阅事件。原创 2023-09-02 10:02:16 · 682 阅读 · 0 评论 -
SingletonSystem 单例管理系统
单例模式是项目中最为常见的设计模式之一,但是写法都不够优雅不方便查找和管理,下面介绍一种使用反射实现的单例管理架构原创 2023-09-01 14:05:14 · 188 阅读 · 1 评论 -
AssemblyManager 程序集管理器
程序执行中使用反射对框架的搭建有着强大的影响,如何管理程序集方便使用反射获取类型操作对象是本文章的重点。原创 2023-08-30 19:31:41 · 155 阅读 · 0 评论 -
Unity C# 引用池 ReferencePool
重复使用的对象只创建有限次,避免来回实例化对象的开销。原创 2023-08-20 20:18:37 · 776 阅读 · 0 评论 -
Unity GameFramework StarForce 流程介绍
根据提供的案例参考即可实现自己的组件。原创 2023-07-02 17:17:37 · 1064 阅读 · 0 评论 -
Unity 实现抛物线路径
【代码】Unity 实现抛物线路径。原创 2022-09-13 16:30:09 · 1837 阅读 · 1 评论 -
Unity发送Post请求给GoLang服务端解析并返回
使用Unity发送Post请求到GoLang的Http服务器,Http服务器接收响应后返回给客户端程序。原创 2022-07-27 22:57:28 · 953 阅读 · 0 评论 -
Unity C# 网络学习(十二)——Protobuf生成协议
Unity C# Protobuf 网络协议原创 2022-06-28 19:29:40 · 1252 阅读 · 0 评论 -
Unity C# 网络学习(十一)——自定义协议生成工具
在开发网络游戏中,协议是必不可少的东西,一款游戏可能有非常多的协议,但是协议的重复性非常高,而且前端后端都需要,人工完成显然不现实,可以通过共同的配置去生成我们的协议原创 2022-06-27 20:52:36 · 702 阅读 · 0 评论 -
Unity UnityWebRequest 下载封装
对unity原生的UnityWebRequest 进行二次封装原创 2022-06-26 14:31:49 · 477 阅读 · 0 评论 -
Unity C# 网络学习(十)——UnityWebRequest(二)
Unity帮我们定义好了一些相关的类,用于解析下载下来的数据的类,使用对应的类处理下载数据,他们就会在内部将下载的数据处理为对应的类型,方便使用2.DownLoadHandlerFile(用于下载文件并将文件保存到磁盘,内存占用少)3.DownLoadHandlerTexture(用于下载图片)4.DownLoadHandlerAssetBundle(用于提取AssetBundle)5.DownLoadHandlerAudioClip(用于下载音频文件)二.自定义DownLoadHandl原创 2022-06-26 14:05:23 · 2326 阅读 · 1 评论 -
Unity C# 网络学习(十)——UnityWebRequest(一)
UnityWebRequest与WWW的区别原创 2022-06-26 10:39:10 · 1520 阅读 · 0 评论 -
Unity C# 网络学习(九)——WWWFrom
Unity WWW WWWFrom原创 2022-06-25 19:27:16 · 2490 阅读 · 0 评论 -
Unity C# 网络学习(八)——WWW
www主要支持的协议1.http://和https:// 超文本传输协议2.ftp:// 文本传输协议(但仅限于匿名下载)3.file://本地文件传输协议原创 2022-06-25 16:03:49 · 755 阅读 · 0 评论 -
Unity C# 网络学习(七)——HTTP(二)
Unity C# HTTP原创 2022-06-25 14:08:09 · 819 阅读 · 0 评论 -
Unity C# 网络学习(七)——HTTP(一)
Unity C# Http原创 2022-06-25 10:28:16 · 389 阅读 · 0 评论 -
Unity C# 网络学习(六)——FTP(二)
C# FTP原创 2022-06-24 18:56:07 · 662 阅读 · 0 评论 -
Unity C# 网络学习(六)——FTP(一)
c# FTP原创 2022-06-23 21:18:17 · 921 阅读 · 1 评论 -
Unity C# 网络学习(五)
Unity C# 网络学习(五)一.简单的异步服务器搭建1.ClientSocketnamespace TcpAsyncServer{ class ClientSocket { public Socket socket; public int id; private static int CURR_Client_ID = 0; private byte[] _buffer = new byte[1024];原创 2022-04-24 13:15:50 · 1489 阅读 · 1 评论 -
Unity C# 网络学习(四)
Unity C# 网络学习(四)一.心跳消息我们需要监测客户端因为网络或用户断开连接可以使用socket.Poll(1000, SelectMode.SelectRead)为真时断开连接,但是这个方法不稳定我们可以每过一会向服务器发送消息(心跳消息)来进行判断客户端是否和服务器相互连接心跳包的定义public class HeartMsg : MsgBase{ public override int GetLength() { return 8; }原创 2022-04-22 15:48:35 · 2118 阅读 · 0 评论 -
Unity C# 网络学习(三)
Unity C# 网络学习(三)一.区分消息类型之前介绍的发送消息已经可以正常发送了,但是客户端和服务器是如何知道我们发送的和接收的是哪一条消息呢,这个时候就需要我们为协议加上一个编号MsgBase是继承之前的序列化基类的一个消息的发送类,里面有协议编号的虚属性,在子类继承这个类时,只需要重写这个属性就可以有不同的对应编号了public class MsgBase : DataBase{ public override int GetLength() { ret原创 2022-04-20 10:12:23 · 136 阅读 · 0 评论 -
Unity C# 网络学习(二)
Unity C# 网络学习(二)一.Socket的重要APIpublic class Lesson05 : MonoBehaviour{ private void Start() { var tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); var udpSocket = new Socket(AddressFamily.Int原创 2022-04-18 17:05:36 · 1590 阅读 · 0 评论 -
Unity C# 网络学习(一)
Unity C# 网络学习(一)一.IP地址和端口类public class Lesson01 : MonoBehaviour{ private void Start() { var ipByte = new byte[]{128,123,116,21}; var ipAddress = new IPAddress(ipByte); //IP和端口 var ipEndPoint = new IPEndPoint(ipAdd原创 2022-04-17 14:54:28 · 1162 阅读 · 0 评论 -
Unity 创建自定义属性绘制器
Unity 创建自定义属性绘制器简介:Unity自带了一些属性绘制的特性[Header][Tooltip][ContextMenu][ContextMenuItem][Space]… …自定义:如果我们需要自定义类似于Unity提供的特性,那就需要通过自己实现逻辑实现案例:通过标签,使自定义的字段由整数显示成为时间的形式(时分秒)1.创建属性public class TimeAttribute : PropertyAttribute{ public readonly b原创 2022-03-12 14:03:59 · 1050 阅读 · 0 评论 -
Unity 关卡编辑器(自动捕捉功能)
Unity 关卡编辑器(自动捕捉功能)使用动机当编辑场景时,有大量的物体需要按照一定的排列顺序进行仔细的摆放时,unity提供的自动捕捉功能往往不能很好的实现项目的需求,我们需要根据自己的项目去拓展出相应的功能捕捉系统。Level脚本public partial class Level : MonoBehaviour{ public int cols; public int rows; public float gridSize; private static L原创 2022-03-11 20:26:42 · 1232 阅读 · 0 评论 -
Unity TimeLine自定义轨道(实践)
Unity TimeLine自定义轨道(实践)实践内容:实现歌词效果行为脚本public class SingingBehaviour : PlayableBehaviour{ public string text; public override void ProcessFrame(Playable playable, FrameData info, object playerData) { var textControl = playerData as原创 2022-03-03 11:35:20 · 1516 阅读 · 0 评论 -
Unity TimeLine自定义轨道
Unity TimeLine自定义轨道(一)文件结构1.行为脚本public class TransformTweenBehaviour : PlayableBehaviour{ public Transform EndTransform; public override void ProcessFrame(Playable playable, FrameData info, object playerData) { var trans = playerD原创 2022-03-03 09:16:12 · 985 阅读 · 0 评论 -
Unity 音效优化
Unity 音效优化导入音频资源导入的音频资源最好是Wav格式,如果导入MP3格式Unity运行时会自动转换为Wav,进入内存中也是同样的大小内存优化实践对比图实际使用如下(短音效可以大幅压缩,解压过程快,长音效减低品质,不能大幅压缩,解压占用CPU性能)当音频文件大小小于200kb使用第一种LoadType当音频文件大小大于200kb使用第二种LoadType当音频文件为背景音乐文件或较大文件时采用第三种LoadType如果音频为单声道音频,可以如下修改为单声道其余两个选原创 2022-03-02 22:19:04 · 1018 阅读 · 0 评论 -
Unity 纹理优化
Unity 纹理优化优化Texture内存方案一直接设置全部的Texture纹理(非常不推荐)方案二Texture纹理设置通过调整纹理图片的MaxSize大小来降低纹理精确度,从而降低内存大小采用纹理压缩减低大小优化渲染使用MipMap(类似LOD)来优化GPU的占用(但是会生成纹理副本,增加内存的消耗)...原创 2022-03-02 21:52:18 · 868 阅读 · 0 评论 -
Unity创建二维码
Unity创建二维码1.引入Dll下载Dll 密码:8djo2.创建二维码using UnityEngine;using ZXing;using ZXing.QrCode;using System.IO;public class CreateTexture : MonoBehaviour{ void Start() { CreatQR_texture("https://www.jianshu.com/p/9b901f15b79e"); }原创 2022-02-23 18:59:34 · 799 阅读 · 1 评论 -
Unity UGUI摇杆两种方式实现
Unity UGUI摇杆两种方式实现方式1:继承UI事件接口using GameFramework.UI.UGUI;using UnityEngine;public class TestBackGround : MonoBehaviour{ private UIListener _uiListenerBackGround; private GameObject _image1; private GameObject _image2; private Vector2原创 2021-12-17 13:43:11 · 2274 阅读 · 0 评论 -
Unity 使用Unirx和携程两种方案实现场景异步加载
Unity 使用Unirx和携程两种方案实现场景异步加载using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;using UniRx;public class LoadScene : MonoBehaviour{ public UIProgressBar uiProgressBar; public UILabe原创 2021-11-25 15:51:42 · 3308 阅读 · 0 评论 -
Unity 界面编辑实现如图所示界面(类似Console界面)
Unity 界面编辑实现如图所示界面(类似Console界面)using System;using UnityEditor;using UnityEngine;public class ZZSTestWindow02 : EditorWindow{ private ZZSScriptableObject _zzsScriptableObject; private const string saveZzsObjPath = "Assets/Scripts/ScriptableOb原创 2021-10-22 13:37:31 · 291 阅读 · 0 评论 -
Unity Odin (实现如图所示效果)(九)
Unity Odin (实现如图所示效果)(九)代码using System;using Sirenix.OdinInspector.Editor;using Sirenix.Utilities.Editor;using UnityEngine;public class DateTimeDraw : OdinValueDrawer<DateTime>{ private string str; private object key = new object();原创 2021-09-14 15:09:44 · 336 阅读 · 0 评论 -
Unity Odin (实现如图所示效果)(八)
Unity Odin (实现如图所示效果)(六)代码using UnityEngine;public class OdinTest01 : MonoBehaviour{ [Ve2Slider(0f,20f)] public Vector2 ve2; [MyColor] public Color col;}原创 2021-09-14 15:07:49 · 261 阅读 · 0 评论 -
Unity Odin (实现如图所示效果)(七)
Unity Odin (实现如图所示效果)(七)代码using Sirenix.OdinInspector;using Sirenix.OdinInspector.Editor;using Sirenix.Utilities.Editor;using UnityEngine;public class Test7 : MonoBehaviour{ [ColorFoldoutGroup("G1",1,0,0)] public string s1; [ColorFoldo原创 2021-09-14 10:40:31 · 982 阅读 · 0 评论