![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity
Master-Xue
这个作者很懒,什么都没留下…
展开
-
A星寻路算法
众所周知,A*寻路是用来计算行进路径的,通过它可以计算出避开阻挡到达终点的最短路径。基本原理也很简单,就是遍历周围所有可以行进的点选出一个最优点再次遍历,直到到达终点。A*寻路有一套固定的公式:f = g + hf:寻路消耗;g:离起点的距离;h:离终点的距离如何计算G值顾名思义,G是离起点的距离,就是从起点到达格子要走的距离,比如从起点到上、下、左、右四个点都是紧挨着起点,距离可以用1来表示,左上、左下、右上、右下这种顶点相邻的格子,根据勾股定理可以判断出距离为√2约等于1.4。如何计算H值H原创 2021-03-24 16:54:56 · 2562 阅读 · 0 评论 -
toLua学习笔记十七——lua调用c#的协程
tolua为我们提供了一些方便开启协程的方法,让我们可以直接使用类似Unity中协程的相关方法。比如:WaitForSeconds、Yield、WaitForFixedUpdate、WaitForEndOfFrame、Yield(异步加载返回值)等。直接上代码local coDelay = nil--开启协程的方法StartDelay = function () coDelay = StartCoroutine(Delay)endDelay = function () loc原创 2021-03-09 14:55:59 · 588 阅读 · 0 评论 -
toLua学习笔记十六——lua调用c#的委托和事件
委托委托中加函数执行委托函数委托中减函数清空委托函数事件事件中加函数事件中减函数事件中清空函数首先在c#脚本中定义委托和事件public class Lesson{ public UnityAction del; public event UnityAction eventAction; public void DoDel(){ if(del!=null) del(); } public void DoEvent(){.原创 2021-03-09 14:41:15 · 1818 阅读 · 1 评论 -
toLua学习笔记十五——Lua调用c#的重载方法
在c#中写入一些重载函数 public int Calc(){ return 100; } public int Calc(int a){ Debug.Log("int"); return a; } public float Calc(float a){ Debug.Log("float"); return a; } public string Calc(st原创 2021-03-08 15:08:40 · 470 阅读 · 1 评论 -
toLua学习笔记十四——lua调用c#中的out和ref方法
tolua和xlua中对ref和out函数使用基本类似,都是通过多返回值的形式来处理的。如果函数有返回值,第一个参数就是函数的默认返回值,之后就是ref和out对应的结果,从左到右一一对应。1、在c#中创建ref和out函数public int RefFun(int a,ref int b, ref int c,int d){ b = a+d; c = a-d; return 100; } public int OutFun(int a,原创 2021-03-08 14:39:38 · 1013 阅读 · 0 评论 -
toLua学习笔记十三——lua调用c#中的拓展方法
首先在c#脚本中新建一个类和拓展类public static class Tools{ public static void Move(this Lesson4 obj){ Debug.Log(obj.name+"移动"); }}public class Lesson{ public string name = "master"; public void Speak(string str){ Debug.Log(str);原创 2021-03-08 11:41:13 · 419 阅读 · 0 评论 -
toLua学习笔记十二——调用c#中的数组、列表和字典
这里写目录标题数组数组的长度访问数组中的元素查找元素的位置遍历数组创建数组列表添加元素获取元素得到List的长度遍历在lua中创建一个c#的list字典添加元素遍历创建字典访问元素数组首先在c#脚本中创建一个数组public class Lesson{ public int[] array = new int[5]{1,2,3,4,5};}在CustomSettings文件中添加Lesson类并生成,不然会识别不到在lua中创建一个变量接收Lesson类local obj = Les原创 2021-03-08 11:27:10 · 2365 阅读 · 0 评论 -
几种简单的单利基类
1、不继承MonoBehavior的泛型单利public class BaseManager<T> where T:new(){ private static T instance; public static T GetInstance() { if (instance == null) instance = new T(); return instance; }}2、继承MonoBehavi原创 2021-03-02 16:30:03 · 142 阅读 · 0 评论 -
简单的AB包管理工具
public class ABMgr : SingletonAutoMono<ABMgr>{ //AB包管理器 //主包 private AssetBundle mainAB = null; //依赖包获取用的配置文件 private AssetBundleManifest manifest = null; //AB包不能够重复加载 重复加载会报错 //字典 用字典来存储 加载过的AB包 private Dictionary原创 2021-03-02 16:27:42 · 348 阅读 · 0 评论 -
toLua学习笔记十一——Lua调用c#枚举
1、在C#中创建一个自定义枚举public enum E_MyEnum{ Idle, Move, Atk}2、枚举和类一样,都需要将使用的枚举加入到CustomSetting文件中。使用方法也基本相同--调用Unity自带的枚举primitiveType = UnityEngine.PrimitiveTypeGameObject = UnityEngine.GameObject--Unity的静态类,创建一个几何体local obj = GameObject.Cre原创 2021-03-02 16:25:52 · 986 阅读 · 0 评论 -
toLua学习笔记十——lua调用C#的类
toLua访问C#的类,固定套路 命名空间.类名,比如GameObject,在lua中调用就是UnityEngine.GameObject。1、通过C#实例化一个对象,因为lua中没有new,所以我们直接使用类名()来实例化对象。local obj1 = UnityEngine.GameObject()local obj2 = UnityEngine.GameObject("Master_Xue")2、在使用中,为了方便实用并且节约性能,我们通常定义全局变量来存储我们C#中的类GameObjec原创 2021-03-02 16:06:22 · 1851 阅读 · 0 评论 -
toLua学习笔记九——c#使用tolua提供的协程
c#中使用tolua中的协程方法和获取全局函数方法一致,主要是在lua中编写协程逻辑。需要注意的是,tolua的协程逻辑都是toLua帮我们实现的,并不是lua中的协程。1、在lua中编写协程程序--lua协程相关local coDelay = nil--开启协程StartDelay = function () coDelay = coroutine.start(Delay)end--协程Delay = function () local c = 1 while t原创 2021-03-02 15:11:42 · 527 阅读 · 0 评论 -
toLua学习笔记八——访问lua中table表现的类
1、在lua中创建一个table testClass = { testInt = 2, testBool = true, testFloat = 1.2, testString = "123", testFun = function () print("表中的方法"); end}2、获取lua中的table通过解析器的GetTable获取,具体调用函数方法可参考toLua学习笔记六——C#获取LUA全局函数 LuaTable tab原创 2021-03-02 14:54:33 · 589 阅读 · 0 评论 -
toLua学习笔记七——访问lua中table表现的List和Dictionary
在toLua中,c#得到lua中的表,都只有一个套路,那就是通过luatable来获取1、在lua中创建List和Dictionary--table表现的listtestList = {1,2,3,4,5,6}--table表现的dictionarytestDic = { ["1"] = 1, ["2"] = 10, ["3"] = 20, ["4"] = 30}testDic2 = { ["1"] = 1, [true] = 1, [原创 2021-03-02 14:41:17 · 2012 阅读 · 0 评论 -
toLua学习笔记六——C#获取LUA全局函数
文章目录无参无返回有参又返回多返回值变长参数无参无返回1、在lua文件中创建一个无参无返回的函数testFun = function() print("无参无返回")end2、第一种获取方法:通过GetFunction方法获取 LuaFunction function = LuaMgr.GetInstance().LuaState.GetFunction("testFun"); //调用 function.Call();3、第二种方法:通过[函数名原创 2021-03-01 17:26:14 · 847 阅读 · 0 评论 -
toLua学习笔记五——C#获取LUA全局变量
1、新建lua脚本Test.lua,在里面创建一些全局变量和一个局部变量用来测试--全局变量testNumber = 1testBool = truetestFloat = 1.2testString = "123"local testLocal = 102、在Main.lua中执行Test.lua文件3、新建脚本文件,先初始化解析器,然后在得到的解析器中通过[“变量名”]即可得到 LuaMgr.GetInstance().Init(); LuaMgr.GetIn原创 2021-03-01 16:02:00 · 527 阅读 · 1 评论 -
toLua学习笔记四——toLua解析器管理器
直接上代码 private LuaState luaState; public void Init() { //最后打包时候再用 //new LuaCustomLoader(); //初始化 luaState = new LuaState(); luaState.Start(); //委托初始化相关 //协程相关 //lua使用Unity中的类相关 } ///原创 2021-03-01 15:41:46 · 223 阅读 · 0 评论 -
ToLua学习笔记三——toLua解析器自定义解析方式
一、自定义路径toLua为我们定义了执行Lua文件的路径"Assets/Lua",那么执行其他路径的lua文件要怎么办呢?1、在Asset/Lua文件夹下新建一个文件夹“C#CallLua”并在里面创建一个lua文件“Loader.lua”。此时直接使用luaState.Require执行会报错:module ‘Loader’ not found,因为Require默认只能找到Assets/Lua文件夹下的lua文件。2、第一种方式:如果文件属于Lua文件夹下,可以直接加父目录luaState.R原创 2021-03-01 14:49:15 · 561 阅读 · 2 评论 -
toLua学习笔记二——toLua解析器
1、引用LuaInterface命名空间2、初始化toLua解析器 //初始化一个tolua解析器 LuaState luaState = new LuaState(); //启动解析器 luaState.Start();一、执行lua代码使用DoString重载 //执行lua代码 luaState.DoString("print('Hello world')"); //执行lua代码并指明出处,方便调试时查看原创 2021-03-01 11:56:33 · 295 阅读 · 0 评论 -
toLua学习笔记一——创建工程和导入tolua框架
创建Unity工程从GitHub下载toLua框架将toLua中的Luajit64文件夹拷贝到工程Assets同级目录下将toLua中Assets文件夹中所有文件拷贝到工程Assets下面导入成功后会出现以下提示框,点击确定自动生成关键脚本:如果点击取消,也可以在Lua->Generate All生成所有关键脚本文件...原创 2021-03-01 11:34:38 · 413 阅读 · 0 评论 -
Unity优化笔记——资源优化和脚本优化
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、模型优化二、贴图优化三、UI优化四、代码优化一、模型优化1、能合并的使用网格合并,注意合并后顶点数不能太多,而且合并后体积不能太大,否则无法使用遮挡剔除。2、使用尽量少的材质和骨骼,一般来说,角色的材质在2-3个,骨骼数量小于30个最好。3、控制多边形数量,一般对于移动设备来说,每个网格300-1500个多边形即可,PC平台的合理范围是1500-4000。4、不要使用MeshCollider!5、使用LOD技术。原创 2021-03-01 10:56:37 · 183 阅读 · 0 评论 -
简单对象池的制作
制作一款Unity胶体物理效果的插件(一) 确定思路和建立对象池确定设计思路建立对象池公司新项目需要一个模拟胶体混合制作的效果,要求胶体在滚筒的挤压下均匀附着在滚筒表面并且能够通过物理交互改变胶体形态。找遍了插件都没有这种效果,有一款流体物理插件ObiFluid插件可以尝试却不支持web端(没错!项目最终要发布到web平台!)。泪奔ing o(╥﹏╥)o。没办法作为一个菜鸡开始了第一次尝试制作插...原创 2021-02-03 15:37:28 · 198 阅读 · 0 评论 -
新版SteamVR插件基础操作手册
文章目录一、概述二、动作管理(Actions)三、更改按键设置四、开始测试前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结一、概述目前随着市场上的VR设备越来越多,控制器的类型越来越趋向于碎片化。老版的SteamVR插件显然不再适用,因为每当有新的控制器发布就,开发者就需要修改交互代码来适配新的设备,毕竟从开发角度来说,不同的控制器具有独立的键值映射。所以,V社推出了SteamVR2.0,能够让开发者在开发过程中只需要原创 2020-08-26 11:40:35 · 5845 阅读 · 1 评论 -
Unity优化笔记——内存优化
Unity游戏的内存主要划分为Unity占用、第三方库占用和系统层面的占用三部分,而我们影响的最主要的是Unity层面的。Unity层面主要分为资源、引擎native占用和临时对象三部分,我们分别从这三个部分分别进行优化。资源优化:资源优化主要分八个模块进行:贴图资源、模型资源、动画资源、声音资源、粒子特效、shader、脚本、配置文本。其中贴图、模型、动画和声音作为最常用的资源,主要...原创 2018-12-27 14:10:00 · 452 阅读 · 0 评论 -
打开安卓手机图库和相机并裁剪图片上传到unity
1、建立一个空的安卓工程2、在unity安装目录下找到classes.jar文件并导入到工程中的libs文件夹下(classes.jar目录为:unity安装目录\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Classes)3、右键工程中的classes.jar-->BuildPath...原创 2018-12-21 13:24:27 · 519 阅读 · 0 评论