![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity c#
文章平均质量分 64
Unity C#笔记
司军礼
宝剑锋从磨砺出,梅花香自苦寒来。
展开
-
公用对象池二(Class回收)
Unity Class对象池原创 2024-07-09 18:21:08 · 417 阅读 · 0 评论 -
公用对象池
Unity 通用对象池原创 2024-07-04 18:17:15 · 277 阅读 · 0 评论 -
Tcp网络通讯详解三(解决缓存区大小定义过大或过小问题)
那这样就埋下了一个问题炸弹,当我们的单条消息传输大小大于BUFFER_SIZE,这个时候就会引爆这个炸弹,我们读取到这条消息的长度标识,假如说这个标识是2000,发现我们的readBuff中的缓存数据小于2000,这个时候我们默认这条消息不完整,然后等待下次一块处理,但是发现我们的缓存区已经用完了,就永远也无法再接收到余下的信息,造成的结果就是Socket彻底堵塞瘫痪。,这个缓存空间需要我们定义一个大小,上篇文章中我们定义的缓存空间的大小。到这里新改进的客户端的Tcp就实现了。《Tcp网络通讯详解》原创 2023-06-30 11:55:32 · 1993 阅读 · 0 评论 -
一条线的故事(基于LineRenderer的绘制封装)
Unity画一条线,总共分几步?原创 2023-05-12 16:30:37 · 733 阅读 · 1 评论 -
Unity 单击、双击、长按事件处理
同时集成单击、双击、长按的功能。原创 2022-11-03 18:46:28 · 4915 阅读 · 0 评论 -
c# A星寻路算法
c# A星寻路算法。原创 2022-11-02 17:23:39 · 625 阅读 · 0 评论 -
Addressable 预下载
Addressable 热更新预下载(个人学习笔记,仅供参考)原创 2022-07-01 15:50:11 · 850 阅读 · 0 评论 -
Unity 人物控制系统(有限状态机思想)
在进入正文之前,可以先看一下我上篇博客搭建的有限状态机的基础骨架。传送门在上篇博客结尾处,说了一点点的多状态共存问题,那么借着这篇博客,把人物控制系统以及多状态共存的问题尽量详细的写一下。分析人物应具备的状态【闲置、走、跑、站立、跳、蹲、蹲走、跳走】这么多状态里,我大致分为三类:移动状态【闲置、走、跑】姿态状态【站立、跳、蹲】复合状态【蹲走、跳走】可以看到,人物控制过程中可能会同时出现多个状态(例如,蹲走,跳走),然而,根据有限状态机的定义,一个有限状态机同原创 2022-04-01 13:46:25 · 4197 阅读 · 0 评论 -
有限状态机
什么是有限状态机?维基百科解释:有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机(英语:finite-state automaton,缩写:FSA),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。一般情况下每个状态的生命周期为 进入状态、状态持续、离开状态,然后再由一个控制器来进行状态注册以及控制各个状态的切换同时只能存在一种状态为什么用有限状态机?在实际开发过程中,我们经常需要处理各种状态的切换,一般情况下我原创 2022-03-28 13:09:07 · 3566 阅读 · 0 评论 -
Unity题目开发简易框架
正常开发流程中,通常会遇到很多的题目开发,常见的有选择题、填空题、问答题等。当然这些功能的开发很简单,但是,如果没有一套通用的框架来进行管理,而是每一个或每一种题目都写上一套代码,那么后期的迭代和维护都会收到很多的影响,为了解决这个问题,闲暇之余,做了一个简单的题目框架,能够支持和拓展以上说到的所有题型。首先我定义了一个接口IQuestion,后期所有的题目都继承自这个接口,接口内容如下public interface IQuestion{ /// <summary> .原创 2022-03-17 16:17:24 · 8220 阅读 · 2 评论 -
Unity对话流程工具开发
问题:开发引导模块时,总是会碰到人物对话流程,多数情况下,产品把对话流程的文档发给程序,然后程序二次加工成自己可读的文本数据,这样程序和产品在某种意义上来说造成了时间浪费,后期的每次改动,团队的开发时间都会叠加的浪费。期望为了简化开发流程,希望开发一个产品用的可视化工具,产品写完数据保存成的数据文件程序可以无缝读取,然后每次迭代对话流程都用这个工具生成新的文件来替换老文件。工具截图首先我们如果开发这个工具首先需要定义一个数据类型来存储我们所需要的信息,那么先从最小单元开始倒推着定义,我们需要一原创 2022-03-07 17:47:14 · 4158 阅读 · 0 评论 -
Unity AssetBundle分包
一、Unity AssetBundle分包流程图二、源码AssetBundleGroupGetter对象,负责分组管理using System.Collections.Generic;using System.IO;using System.Linq;using UnityEditor;using UnityEngine;public class AssetBundleGroupGetter{ /// <summary> /// 所有资源的AssetInfo原创 2022-02-15 17:02:30 · 2962 阅读 · 0 评论 -
Protobuf 在Unity中的使用
Protobuf在Unity中的序列化与反序列化原创 2022-01-27 18:04:44 · 8037 阅读 · 1 评论 -
Unity 自带的Json工具JsonUtility关于多态对象序列化问题
Unity 自带的Json工具JsonUtility关于多态对象序列化问题问题描述:我有一个抽象类A有a和b属性,对象B继承自对象A,且对象B中有其特有的属性c和d对象C继承自对象A,且对象C中有其特有的属性e和f对象D是一个集合对象存储所有A的派生对象当我序列化对象D的时候会发现生成的json中只有a和b属性,派生对象的特有属性无法序列化[Serializable]public abstract class A{ public string a; public int b;原创 2021-12-17 10:55:22 · 3563 阅读 · 1 评论 -
UnityWebRequest请求
以前项目的网络请求一直是在用BestHttp插件来进行处理的,由于插件的某些不可控性以及为了不过分依赖插件,所以在这次项目重构的过程中准备换成Unity自己封装的请求方式进行处理,不得不说现在的UnityWebRequest比老版本的WWW要好用多了,下面会介绍这个请求的管理模式。首先我把每一个请求都抽象成为一个请求对象(RequestNet),包含Get、Post请求,再由一个请求管理类(RequestManager)来管理这些对象,下表我会把请求对象和请求管理类的公共方法给列举出来RequestNe原创 2021-09-08 19:53:25 · 430 阅读 · 0 评论 -
Unity 计时器管理类
计时器管理类开发原因在项目开发阶段有很多的计时器需求,包括游戏时间计时,验证码时间计时等。如果没有一个计时器管理类,将会非常混乱,为了更好的管理计时器,封装了一个计时器管理类功能代码解释TimerMoudle 管理一个计时器,TimerMoudle对外公开的函数及字段如下:函数解释Play(bool restart=false)运行计时器(restart表示是否重新开始计时,默认为false继续计时)Pause()暂停计时器Stop()停止计时器Cl原创 2021-08-30 14:14:17 · 1165 阅读 · 3 评论 -
Unity UGUI ScrollRect嵌套及事件被拦截问题
文章目录ScrollRect横竖嵌套滑动问题描述解决思路代码ScrollRect滑动事件被其他UI事件拦截问题描述解决思路代码ScrollRect横竖嵌套滑动问题描述常规ScrollRect滑动行为是由用户滑动事件触发的,在嵌套ScrollRect时,滑动事件被二级ScrollRect触发并劫持而不会再向上级ScrollRect传递,这样就会造成只有二级ScrollRect响应事件而顶级ScrollRect无响应解决思路为了解决这一问题我们需要重写ScrollRect对象的OnBeginDr原创 2021-06-08 15:12:42 · 1560 阅读 · 3 评论 -
数据结构
文章目录前言链表创建链表通用接口顺序链表单向链表双向链表单向循环链表前言最近在看一些数据结构问题,准备把每种数据结构都学习并记录一遍链表创建链表通用接口因为链表结构与部分功能比较相似,所以抽象出来一个接口如下:interface IList<T> { void Append(T item);//添加元素 void Insert(T item, int id);//插入元素 void Remove(int id);//移除元素原创 2021-02-07 19:34:33 · 153 阅读 · 0 评论 -
Unity- BestHTTP数据请求及文件下载
Unity 通讯插件(BestHTTP)请求数据及下载文件Unity工程中关于HTTP的使用非常常见,Unity本身集成的WWW便可以进行网络请求处理,但是,WWW本身却有很多的局限性,而BestHttp插件却把HTTP这一块处理的很好,今天学习了一下,并做个简单的笔记,写一个小Demo创建APIRequestTest对象来管理程序执行过程中关于HTTP的数据请求及下载 这个脚本中有请求完成回调,下载进度回调及下载资源完成回调,基本能满足常规使用,代码注释很清晰using System;usi原创 2021-01-08 19:34:41 · 4632 阅读 · 6 评论 -
Unity热更_打AssetBundles包
Unity热更_打AssetBundles包Unity开发离不了热更新,现在市面上有很多的热更方案,XLua、ToLua以及C#热更方案ILRuntime,以腾讯的XLua为例,若要实现热更新,AssetBundles是不可规避的一个环节,这其中包括AssetBundles的生成与加载,本文以生成AssetBundles为主,主要来讲自动化打AssetBundles包,至于AssetBundles包体的加载抽时间会再写一篇博客。手动添加AssetBundle标签方式这是最常见的AssetBund原创 2020-10-19 19:45:08 · 359 阅读 · 0 评论 -
Unity-RectTransform笔记
RectTransform说到手机开发,UI适配是不得不提的一个重要技术点,毕竟市面上手机的分辨率不是统一的,还好Unity提供了一套强大的接口让开发者来很好的实现自己想要适配的效果,今天仔细学习了一下RectTransform组件,还记得以前Transform和RectTransform总是傻傻分不清楚,特此记录,以供后续参考。注:本篇文档参考简书“巨龙饿了”的Unity——RectTransform详解原文地址Anchorunity中的ui元素是有严格的父子关系的,子物体的位置是根据父物体的转载 2020-08-22 15:12:55 · 462 阅读 · 0 评论 -
Unity 不同父物体的UI坐标转换
Unity 不同父物体的UI坐标转换众所周知,根据不同的参照物,Unity中有这许多的坐标系,那么在我们进行项目开发过程中,经常会牵扯到坐标系的转换来比较或者改变物体坐标位置,而我们用的最多的坐标系大致也就那么几种,世界坐标系,相对坐标系,屏幕坐标系,视口坐标系,GUI坐标系,下面我会简单介绍一下这几种坐标系,最后会着重讲今天的重点内容,屏幕坐标转UI坐标的操作。最近在项目中碰到的问题,需要让参考UI和目标UI进行等高显示,但是这两种UI不在同一个父物体中,所以相对坐标系的方式首先就已经排除了,世界坐标原创 2020-08-08 15:48:17 · 4309 阅读 · 0 评论 -
Unity LineRenderer折线图谱
Unity LineRenderer折线图谱最近公司软件有个新的需求,实时显示玩家唱歌的音浪的折线图,我能获知的是玩家的音浪值,第一时间就想到了用LineRenderer组件来实现这个功能,趁着星期天,自己做个小Demo测试一下可行性。作为直来直去的程序员,直接上代码因为玩家在唱歌时,可能需要停顿,所以需要处理LineRenderer的断线操作,那么一个LineRenderer肯定是不能胜任这种操作了,所以我写了一个LineRenderer控制类LineRendererManager,如下:这个原创 2020-08-01 16:43:53 · 880 阅读 · 1 评论 -
XLua笔记
XLua笔记目录XLua笔记下载框架使用方法C#调用LuaLuaEnv.DoString()执行Lua语句通过框架内置的loader加载Lua源文件C#访问Lua全局变量Lua调用C#在Lua中创建新物体Lua访问C#静态属性和方法xLua是Unity3D下Lua编程解决方案,因其良好性能、易用性、扩展性而广受好评。现在,腾讯已经将xLua开源到GitHub。下载框架框架地址下载完的XLua框架导入Unity工程使用方法C#调用LuaLuaEnv.DoString()执行Lua语句us原创 2020-07-25 21:52:15 · 137 阅读 · 0 评论 -
# C# 运算符重载
C# 运算符重载每一次看菜鸟教程都会收获一些编程小技巧,这次get到的知识点是运算符重载,像最基本的运算符+、-、*、/、%这些运算符统统都可以进行重载,这时候你可能要说了,反正编程语言已经实现过这些基本的操作符了,自己重载还有什么用呢?这个东西用好了可是大大的能提高开发效率哦。下面开始讲一下这个技巧的使用场景。举一个常规的例子:构建Square矩形类public class Square{public float width;public float height;public Squ原创 2020-07-19 16:38:17 · 188 阅读 · 0 评论 -
lua面向对象
lua面向对象面向对象编程是当下最流行的编程框架,用Unity进行开发时使用的C#就是面向对象编程面向对象的特性封装封装简单理解就是把一个方法或者一个对象的信息,功能,和响应都集中到一个单独的对象中继承父类有的公开方法和属性子类都可以使用,而子类特有的方法或者属性不对父类公开多态同一个操作作用在不同的对象身上有着不同的表现形式,例如山羊和老虎都需要吃饭,把吃饭看成一个方法,山羊吃草而老虎却是吃肉。抽象菜鸟教程解释:抽象(Abstraction)是简化复杂的现实问题的途原创 2020-07-18 22:00:40 · 174 阅读 · 0 评论 -
lua数据类型
lua数据类型对于Unity开发者来说lua是不得不学的一种编程语言,目前市面上最成熟的热更技术还是lua热更,虽然ILRuntime最近也是强势崛起,但目前为止还是无法撼动lua热更技术的地位,今天就简单来总结一下lua的数据类型和简单的使用方法。八种基本类型nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。boolean 布尔类型嘛只包含false和truenumber 表示双精度类型的实浮点数string 字符串,用双引号或者单引号来表示f原创 2020-07-14 22:09:55 · 199 阅读 · 0 评论 -
Unity MVC模式简述
Unity MVC模式简述什么是MVCMVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。View(视图) - 视图代表模型包含的数据的可视化。Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。为什么要使用MVC原创 2020-07-01 18:10:41 · 1507 阅读 · 0 评论 -
C# 状态者模式的实现
状态者模式的实现在实际开发中,当一个对象中有多个状态时,每个状态对应着不同的行为。那么此时对象的行为就会随着自身状态的改变而改变,如果就是普通的用if,else if来进行多重条件判断,这样的代码后期的可拓展行就会特别低,而且不易于阅读,如果添加一种新的状态时,需要更改之前现有的代码。这样的设计显然违背了开闭原则。状态模式正是用来解决这样的问题的。简述原理把对象状态抽象,从而把对象中对状态复杂的判断逻辑已到各个状态类里面,从而简化逻辑判断。状态者模式的组成: 1.抽象的状态类 2.状态类的具体原创 2020-06-24 12:35:31 · 201 阅读 · 0 评论 -
Unity-ScrollView无限循环
Unity-ScrollView无限循环在Unity引擎中ScrollView组件是一个使用率比较高的组件,该组件能上下或者左右拖动的UI列表,背包、展示多个按钮等情况的时候会用到,在做排行榜类似界面时,item非常多,可能有几百个,一次创建这么多GameObject是非常卡的。为此,使用只创建可视区一共显示的个数,加上后置准备个数。由于ScrollView有两种滚动方式,水平滚动或者垂直滚动,所以我创建了ScrollBase基类,和HorizontalScroll子类及VerticalScroll原创 2020-06-18 16:34:25 · 2830 阅读 · 0 评论 -
Unity解决Text文本框上下标问题
Unity 解决Text文本框上下标显示问题Text 控件也称为标签,Text 区域用于输入将显示的文本。它可以设置字体、样式、字号等内容,但是有时候我们需要输入上下标的时候会发现正常情况下Text是不能输入上标或者下标的,虽然说可以通过富文本的形式把某个字符缩小使其看起来像下标,但是,上标却没有很好的体现方式,今天介绍一种方式可以进行上下标的显示。Unicode先来一段百度的解释吧Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode原创 2020-06-15 21:39:43 · 3007 阅读 · 1 评论 -
Unity 代码修改宏名并一键打包
Unity 代码修改宏名并一键打包Unity3d 项目开发切换平台与发布版本时,不同的平台,不同的版本,可能会有不同的实现方式,这样就需要宏去控制调用,执行需要在该平台的逻辑操作。其中Unity内部有很多宏定义可以直接使用,这里重点讲的是自定义宏。直接在Unity编辑器修改宏定义代码一键修改宏定义//参数一:平台;参数二:宏名字 PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.WebGL, “名字”);//原创 2020-06-10 13:01:47 · 1805 阅读 · 0 评论 -
Unity加载磁盘文件
Unity加载磁盘文件今天碰到一个问题,Unity项目框架升级,以前所有做过的项目都需要替换很多脚本和文件,这个时候如果项目很少,当然不是问题,但是由于时间的积累发现,手上有几十个项目需要替换文件,现在手动的方式就显得有些无力了,作为程序猿,我们第一时间想的肯定是有没有智能化的方式完成这个重复性的操作,答案是肯定可以得。拓展Unity编辑器智能化替换工程文件原理就是通过拓展Unity编辑器面板,一键加载磁盘需要替换的最新文件,加载到Unity工程中和原始文件比较,如果存在原始文件就替换为最新的,原创 2020-05-30 11:03:15 · 720 阅读 · 0 评论 -
Unity事件的传递(图解)
如下图:转载 2020-04-02 17:03:32 · 667 阅读 · 0 评论 -
Unity-鼠标监测UI事件二(EventTrigger)
鼠标监测UI事件二(EventTrigger)上一篇文章对UI事件监测用的方法是GraphicRaycaster.Raycast能够准确的检测到鼠标的滑入、划出、点击等事件,这篇文章介绍一下另外一种事件监听的方法,这种方法是Unity内部集成的方法,使用起来相对更加方便。EventTrigger组件EventTrigger的所有事件类型PointerEnter = 0 鼠标进...原创 2020-03-28 14:10:37 · 1919 阅读 · 0 评论 -
Unity-鼠标监测UI事件
Unity-鼠标监测UI事件最近开发项目中碰到的问题,需要实时监测鼠标是否进入、离开、点击UI区域,查了一些资料,总结了一些经验,写下这篇笔记,希望能够给碰到相同问题的同仁提供一些帮助使用UGUI的GraphicRaycaster.Raycast方法进行检测鼠标位置,首先需要一个UI事件的管理类,代码如下:使用事件字典每一个UI物体的同一种事件可以注册多个委托,只需要往MouseEven...原创 2020-03-25 13:26:03 · 1746 阅读 · 1 评论 -
Tcp网络通讯详解二(解决分包粘包)
解决分包粘包系统缓冲区要想知道为什么在Tcp通讯中会存在分包粘包的现象,首先你必须先了解Tcp网络通讯的消息传播机制,而系统缓冲区将是不得不讲的一个话题,那么什么是系统缓冲区呢?其实就是接到对端信息数据的时候,操作系统会将数据存入到Socket的接收缓冲区中,而在这一段时间,系统缓冲区完全是由操作系统进行操作,程序并不能直接操作它们,只能通过Socket.Receive();Socket.S...原创 2020-03-03 10:24:54 · 799 阅读 · 0 评论 -
Tcp网络通讯详解
Tcp通讯一款网络游戏分为客户端和服务端两个部分, 客户端程序运行在用户的电脑或手机上,服务端程序运行在游戏运营商的服务器上。多个客户端通过网络与服务端通信。TCP 连接指的是一种游戏中常用的网络通信协议, 与之对应的还有UDP 协议、KCP 协议、HTTP 协议等。本片文章只讨论Tcp通讯。先来认识Socket网络上的两个程序通过一个双向的通信连接实现数据交换, 这个连接的一端称为一...原创 2020-02-22 21:12:54 · 2721 阅读 · 0 评论 -
Unity安卓环境安装教程
Unity安卓环境安装教程一、Java jdk安装1、下载jdk:2、 解压压缩包,解压后双击《jdk-8u111-windows-x64》文件,安装jdk3、使用WIn + R 键,输入CMD,打开控制台,输入:java,如果出现下面图样,说明安装成功二、Java环境配置1、点击开始按钮,搜索“编辑系统环境变量”,点击按钮2、点击环境变量按钮3、...原创 2020-02-22 18:30:50 · 1371 阅读 · 0 评论 -
Unity 相机截图功能
Unity 相机截图功能其实Unity 内部集成的有全屏截图功能,但是鉴于其功能的局限性,所以写下这篇博客直接给出整理好的截图代码,如下: /// <summary> /// 截取指定Camera指定区域画面,并保存到本地 /// </summary> /// <param name="rect">截取区域 new Rect...原创 2020-01-14 11:36:08 · 1310 阅读 · 0 评论