Unity
文章平均质量分 79
KindSuper_liu
沉下心来,踏踏实实做技术。
展开
-
Addressable优化解决方案
2.热更流程和常规流程一样,首包在包体里,也可以部分在包体里,资源从首包里加载。有热更文件进入游戏走热更预加载,也可以部分文件边玩边下,或者静默下载。1.可以和常规方案一样,带资源版本号,对于不同的渠道,有不同的资源地址,可以回退版本。对于多个旧版本资源,都可以更新到最新的。以上工具不修改Addressable源码,只在其基础上扩展。3.带热更大小查看工具,可以查看热更Bundle和资源。4.资源颗粒度控制工具,自动刷新资源Label工具。原创 2023-02-15 19:52:34 · 1744 阅读 · 1 评论 -
unity中制作滑动摇杆
Unity制作简单的滑动摇杆原创 2022-12-17 19:19:58 · 523 阅读 · 2 评论 -
Mono介绍-Unity为什么能跨平台,以及IOS为什么不能热更代码
MonoMono是一个开源项目。基于通用语言架构和C#的 ECMA标准,提供了.NET的另一种实现。并且具备了跨平台的能力,能在Windws、Mac、Linux甚至一些游戏平台上运行。查看unity的Mono版本 Debug.Log(Application.unityVersion); Type type = Type.GetType("Mono.Runtime"); if (type != null) { MethodInfo原创 2022-04-19 12:47:23 · 6048 阅读 · 5 评论 -
Unity碰撞检测的必要条件
Unity中有两个独立的物理引擎,一个用于3D物理系统,一个用于2D物理系统。两个引擎是使用不同的组件实现的。因此BoxCollider和Rigidbody一起使用,代码中用OnTriggerEnter才能检测到触发;BoxCollider2D和Rigidbody2D一起使用,代码中用OnTriggerEnter2D才能检测到触发。Rididbody刚体(Rigidbody),有了这个物体就有看物理行为(受力的作用),两个物体想要发生碰撞检测,其中一个必须带有刚体组件。BoxCollider盒状碰撞原创 2022-04-11 14:53:42 · 6398 阅读 · 0 评论 -
Unity IAP接入google支付文档(2022年最新)
Unity导入我使用的版本是Unity2020.3.30f1c1。Unity的操作主要是打开Services中的In-APP Purchasing。并且在Package里面导入In App Purchasing。导入成功后能在编辑器里看到Services-In-APP Purchasing.官方的参考链接:https://docs.unity3d.com/2020.3/Documentation/Manual/UnityIAPGoogleConfiguration.html注意:切换到中文可原创 2022-03-03 14:52:26 · 11659 阅读 · 5 评论 -
Addressable(二):从远程下载
Local和Rmote区别刚刚第一篇有讲到,点击分组标签,在Inspector可以看到AB包将会打到什么位置和从什么位置加载。本地的话,打包出来AB会在APK包里,远程的不会。从APK加载远程的会从服务器下载。开启远程的:找到Addressable Asset Settings文件,Build&Load Paths选择Remote.并且这里的Disable Catalog Update On Startup我们勾选上,主要是我们后面代码自己控制要更新那些文件。远程的下载到本地后会进行缓存,原创 2022-02-20 16:01:51 · 4993 阅读 · 13 评论 -
Addressable(一):基本使用
AsseteBundle缺点不可寻址,Asset文件和Bundle必须依赖一定的文件关系才能找到没有编辑器工具,显示那些Asset在那些Bundle里面,不能编辑器打包,不能分析Bundle的冗余从服务器下载更新Bundle需要写复杂的流程,且打包时需要记录Bundle额外的版本号,大小,MD5编辑器下加载和真机加载切换麻烦内存管理复杂,AB没有及时卸载导致内存占用过高,卸载不当额容易造成资源丢失。使用AssetBundle变得具有挑战性。Addressable介绍Addressable原创 2022-02-20 14:03:15 · 2119 阅读 · 0 评论 -
Unity示例A* 算法
A star介绍在游戏中,有一个很常见地需求,就是要让一个角色从A点走向B点,我们期望是让角色走最少的路。嗯,大家可能会说,直线就是最短的。没错,但大多数时候,A到B中间都会出现一些角色无法穿越的东西,比如墙、坑等障碍物。这个时候怎么办呢? 是的,我们需要有一个算法来解决这个问题,算法的目标就是计算出两点之间的最短路径,而且要能避开障碍物。算法步骤生成搜索区域要将搜索区域划分为像素点,但是这样的划分力度一般来说太高了,可以划分为一个个的正方形。在Astar插件中,这一步由烘焙完成。在这里,创建一个原创 2022-02-18 11:48:20 · 3559 阅读 · 0 评论 -
Unity自动化Xcode配置及接入SDK踩坑记录
PBXProject能做什么添加依赖库修改BuildSettings修改Plist文件添加包文件Bundle文件添加库文件,头文件Search Path添加自己的OC代码例如以下要求:代码示例using System;using UnityEditor;using UnityEditor.Callbacks;using UnityEditor.iOS.Xcode;namespace EB.Editor{ public static class PostProces原创 2022-02-17 15:27:00 · 6850 阅读 · 0 评论 -
AssetBundle介绍
AssetBundleAssetBundle 是一个压缩包文件,包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载出来。AssetBundle自身保存着互相的依赖关系,例如 AssetBundle A 中的材质可以引用 AssetBundle B 中的纹理。为了减小压缩包大小,可以根据内置算法LZMA 或 LZ4来压缩 AssetBundle。把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小。AssetBundle里面有什么可以归纳为两点:它是一个存在硬原创 2022-02-15 21:52:59 · 5203 阅读 · 0 评论 -
Unity(C#) 在List集合中根据概率取出一个值
在List里面随机取一个值很简单,只要生成一个随机数在0到List的数量区间,然后取这个下标的值就行了。但是如果List里面的每个值都有一个取值概率,那该怎么得到呢? /// <summary> /// 从指定的概率池中随机挑选一个概率值,并将其索引返回 /// </summary> /// <param name="probabilities">概率池</param> /// <ret原创 2022-01-12 11:24:23 · 3678 阅读 · 3 评论 -
Unity 使用EPPlus读取配置表并制作编辑器工具生成数据
EPPlus这个工具可以读写Excel。使用方式很简单。可以参考视频学习:【Unity教程】Excel文件的读取和写入 (使用EPPlus)一开始我是尝试在手机上解析,我测试的只有Mono环境下才能使用,并且需要设置.Net 4.x,添加118N等dll。IL2CPP下不能使用。后面才了解到在游戏运行时不要去动态解析Excel,因为在手机上解析不了。而且你需要把这个dll加在工程里面,会增加包的大小。最好的就是先把Excel写入文件, 运行的时候读取这个文件的方式来做。配置表工具所以现在的流程是策原创 2021-09-14 10:17:07 · 1288 阅读 · 0 评论 -
根据Spine动画自动创建代码状态机
Spine创建状态机的方法导入Spine的三个文件,然后会生成SkeletonData.asset文件,然后将SkeletonData.asset文件拖动到Hierarchy下,选择SkeletonMecanim,能够看到在文件同一目录下生成了controller文件代码生成状态机状态和连线在RPG游戏中,角色有几十个,二他们的动画是类似的,所以应该代码创建生成状态和连线.我的思路如下:1.选中动画控制器,它是AnimatorController类型的.2.创建需要的动画状态,这里我定义了一个原创 2021-09-08 19:46:56 · 1270 阅读 · 0 评论 -
ILRuntime注意事项及商业框架使用
注意事项1.ILRuntime对多线程Thread不兼容,在热更代码里使用多线程会导致Unity崩溃闪退2.热更代码里可以写枚举类,也可以用反射,但是都只能在热更Dll中使用。3.需要写委托适配器,委托转换器。在发布版本后这些不能热更,使用之前一定要预留好可能会使用的。appDomain.DelegateManager.RegisterMethodDelegate<int, float>(); appdomain.DelegateManager.RegisterFunctionDele原创 2021-07-03 13:38:03 · 2011 阅读 · 4 评论 -
Unity UI优化--Canvas合批--从源码角度解读
CanvasCanvas是用来放置所有UI元素的地方,所有的UI元素必须是这样一个Canvas的子对象。它给Unity的渲染系统提供按层划分的几何系统,负责将其内部的几何形状合并到批处理、生成合适的渲染指令并发送到Unity图形系统。问题当UI元素变化时,它会重新生成网格并向GPU发起绘图调用,从而显示出UI。生成这些网格会消耗大量性能,需要将UI元素收集到批处理中,从而尽可能减少绘图...原创 2020-03-12 14:02:02 · 3633 阅读 · 1 评论 -
增加Canvas不响应button事件,点击Button没有任何反应?详解Graphic Raycaster组件
在我们对Canvas进行分层级的时候,增加了Canvas,但是发现所有的Buttond点击事件不响应了。这是怎么回事呢?让我们来看看这个Graphic Raycast组件。Graphic Raycast当使用EventSystem的用户触摸屏幕时,射线会从玩家触摸屏幕的位置向前投射,Raycaster会查看画布上的所有图形,Graphic Raycast用于对Canvas进行射线广播。并确定是...原创 2019-12-30 15:42:15 · 2687 阅读 · 0 评论 -
EventSystem详解.md
EventSystem处理输入、射线和发送事件。在Unity场景中EventSystem主要负责加工和处理事件,一个场景只能有一个EentSystemEventSystem类静态属性:current :获取当前的EventSystemEventSystem里面有一个List,current会返回第一个EventSystem属性currentSelectedGameObject:...原创 2019-12-30 14:36:13 · 768 阅读 · 1 评论 -
unity 自定义不规则点击区域
/// <summary>/// 添加PolygonCollider2D组件,然后Edit Collider/// </summary>public class CustomImage : Image{ private PolygonCollider2D _polygon; private PolygonCollider2D polygon ...原创 2019-11-12 17:51:36 · 907 阅读 · 0 评论 -
Unity 自定义圆形图片
using System.Collections.Generic;using UnityEngine;using UnityEngine.Sprites;using UnityEngine.UI;/// <summary>///1.为什么不用Mask组件///1.1 增加Drawcall///1.2 边上有锯齿//////2.Position和uv的关系/// ...原创 2019-11-12 14:40:21 · 2316 阅读 · 1 评论 -
unity 运行时查看日志调试的神器 SRDebugger
SRDebugger在运行真机的时候,查看日志,FPS,游戏性能,系统信息,可以方便的开启,关闭。响应式设计支持任何分辨率或方向可以支持Andorid、IOS、Window、WebGL 和Web Player不怎么耗费性能,只需要很小的开销引进方法只需将SRDebugger导入项目即可。执行场景时将会自动生成。*默认情况下,您可以通过点击(单击)隐藏在左上角的矩形UI三次来开...原创 2019-10-28 11:54:10 · 4849 阅读 · 0 评论 -
unity拖拽UI
效果图:示例代码:public class DragUI : MonoBehaviour, IDragHandler, IPointerDownHandler{ // 按下时UI的坐标(以下都是在本地坐标进行) private Vector3 uiPosition; // 按下点的坐标 private Vector2 pointPosition; ...原创 2019-07-23 14:20:05 · 424 阅读 · 0 评论 -
Unity-有限状态机
在设计模式中我们都知道有一种状态模式,它主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况下。把状态的判断逻辑转移到不同的类当中。而有限状态机便基于此的一个框架。它可以控制不同状态自动转化(只能从一个状态转换为另一个状态),从而实现AI。组件Transition:这个枚举包含系统可以出发的转换条件。StateID:这是游戏可能具有的状态ID。FSMState类:这个类有一个...原创 2019-06-26 10:55:50 · 432 阅读 · 0 评论 -
使用Batchmode、Jenkins打包UnityAPK
记录最近在电脑上使用shell命令调用Unity将项目发布成Android Apk,最后让整套建造工作能在Jenkins上自动化打包。安装Jenkins安装jenkins的文章网上有很多,就不介绍了。在这里记录苹果电脑上安装的一个问题,就是必须要先安装JDK8,否则会出现safari 不能连接到localhost 。使用Jenkins打包需要安装一个unity的插件。配置Android S...原创 2019-05-24 21:43:39 · 2595 阅读 · 1 评论 -
GameObject.Find和Transform.Find
标题GameObject.FindTransform.FindTransform查找工具类GameObject.Find通过name查找一个GameObject并返回它。此函数仅返回active的GameObject。如果名字中包含了“/”,它将像路径名一样遍历层次结构查找。接下来我将创建一个场景,并进行此函数的运用。创建TestFind脚本 //查找一个显示的物体 GameObj...原创 2019-02-23 16:24:57 · 1071 阅读 · 0 评论