自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 资源 (10)
  • 收藏
  • 关注

原创 Addressable CRC设置详解

Asset Bundle的CRC设置中有三个选项:Disable;

2023-06-21 16:45:35 834

原创 优化Unity日志系统的消耗及在ILRuntime模式下双击能跳转到对应的文件行号

Unity的日志控制:日志系统打开,但是只打印错误日志。这样其他级别的日志就不会有打印消耗。但是还是有字符串拼接的消耗。Conditional属性是一个C#特性,它允许你根据预处理器指令的定义来有条件地执行方法。如果没有OPEN_MAIN_LOG_LOGWARNING宏,编译的时候,所有调用Log的方法都会从Dll里去除。因此就没有了字符串拼接的消耗。

2023-06-19 17:22:15 1581

原创 Addressable优化解决方案

2.热更流程和常规流程一样,首包在包体里,也可以部分在包体里,资源从首包里加载。有热更文件进入游戏走热更预加载,也可以部分文件边玩边下,或者静默下载。1.可以和常规方案一样,带资源版本号,对于不同的渠道,有不同的资源地址,可以回退版本。对于多个旧版本资源,都可以更新到最新的。以上工具不修改Addressable源码,只在其基础上扩展。3.带热更大小查看工具,可以查看热更Bundle和资源。4.资源颗粒度控制工具,自动刷新资源Label工具。

2023-02-15 19:52:34 1351 1

原创 unity中制作滑动摇杆

Unity制作简单的滑动摇杆

2022-12-17 19:19:58 380 2

原创 浏览器界面分屏代码

在浏览器中一个界面怎么同时显示两个界面

2022-11-15 19:47:03 416

原创 c#使用IOC容器替代单例

IOC容器代替单例类

2022-10-19 21:34:19 313

原创 Unity中使用调用Shell的命令行

有的时候我们在做unity开发的时候需要去写一些工具编辑器之外的话通常会使用python,但有时也会使用shell命令行来完成一些操作,比如我们在写一自动化打包的时候 经常会使用一些linux指令来进行一些对文件或者文件夹的操作,这个时候使用shell就很实用。所以下面是一个shell的工具类来帮助我们可以在unity中更加轻松的使用 shell的一些指令。 c#代码如下:例子:使用MSBuild编译出Dll原文:https://tangmingcc.com/views/Unity%E5%AE%9E%E

2022-06-09 17:19:47 1769

原创 c#迭代器及协程的本质

IEnumerator这是一个接口,主要为了实现能够循环遍历,在子类中具体实现。包括以下几个方法:public interface IEnumerator{ //移动到下一个 bool MoveNext(); //返回当前 object Current { get; } //重置 void Reset();}IEnumerable这个接口很简单,就是定义了一个方法返回一个IEnumerator public interface IEnumerable {

2022-05-01 19:27:13 425

原创 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 5759 5

原创 协程,线程,进程等概念理解

协程在操作系统(os)级别,有进程(process)和线程(thread)两个我们看不到但又实际存在的“东西”,这两个东西都是用来模拟“并行”的,写操作系统的程序员通过用一定的策略给不同的进程和线程分配CPU计算资源,来让用户“以为”几个不同的事情在“同时”进行“。在单CPU上,是os代码强制把一个进程或者线程挂起,换成另外一个来计算,所以,实际上是串行的,只是“概念上的并行”。在现在的多核的cpu上,线程可能是“真正并行的”。线程,同一时间可以同时执行多个线程。开辟多条线程开销很大。线程适合多任务同

2022-04-19 12:35:47 2408

原创 Unity碰撞检测的必要条件

Unity中有两个独立的物理引擎,一个用于3D物理系统,一个用于2D物理系统。两个引擎是使用不同的组件实现的。因此BoxCollider和Rigidbody一起使用,代码中用OnTriggerEnter才能检测到触发;BoxCollider2D和Rigidbody2D一起使用,代码中用OnTriggerEnter2D才能检测到触发。Rididbody刚体(Rigidbody),有了这个物体就有看物理行为(受力的作用),两个物体想要发生碰撞检测,其中一个必须带有刚体组件。BoxCollider盒状碰撞

2022-04-11 14:53:42 6159

原创 Unity Shader动画-做捕鱼达人效果

Unity Shader动画-做捕鱼达人效果

2022-03-29 22:04:12 2437

原创 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 10668 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 4307 13

原创 Addressable(一):基本使用

AsseteBundle缺点不可寻址,Asset文件和Bundle必须依赖一定的文件关系才能找到没有编辑器工具,显示那些Asset在那些Bundle里面,不能编辑器打包,不能分析Bundle的冗余从服务器下载更新Bundle需要写复杂的流程,且打包时需要记录Bundle额外的版本号,大小,MD5编辑器下加载和真机加载切换麻烦内存管理复杂,AB没有及时卸载导致内存占用过高,卸载不当额容易造成资源丢失。使用AssetBundle变得具有挑战性。Addressable介绍Addressable

2022-02-20 14:03:15 1922

原创 Java垃圾回收(二):相关算法

标记阶段在堆里存放着几乎所有的Java对象实例,在Gc执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活一般有两种方式:引用计数算法和可达性分析算法。引用计数法引用计数算法(Reference Counting)比较简单,对每

2022-02-19 17:04:49 165

原创 Java垃圾回收(一):概述

垃圾收集垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。什么是垃圾什么是垃圾(Garbage)呢?垃圾是指

2022-02-18 23:29:01 127

原创 Unity示例A* 算法

A star介绍在游戏中,有一个很常见地需求,就是要让一个角色从A点走向B点,我们期望是让角色走最少的路。嗯,大家可能会说,直线就是最短的。没错,但大多数时候,A到B中间都会出现一些角色无法穿越的东西,比如墙、坑等障碍物。这个时候怎么办呢? 是的,我们需要有一个算法来解决这个问题,算法的目标就是计算出两点之间的最短路径,而且要能避开障碍物。算法步骤生成搜索区域要将搜索区域划分为像素点,但是这样的划分力度一般来说太高了,可以划分为一个个的正方形。在Astar插件中,这一步由烘焙完成。在这里,创建一个

2022-02-18 11:48:20 3519

原创 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 6513

原创 AssetBundle介绍

AssetBundleAssetBundle 是一个压缩包文件,包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载出来。AssetBundle自身保存着互相的依赖关系,例如 AssetBundle A 中的材质可以引用 AssetBundle B 中的纹理。为了减小压缩包大小,可以根据内置算法LZMA 或 LZ4来压缩 AssetBundle。把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小。AssetBundle里面有什么可以归纳为两点:它是一个存在硬

2022-02-15 21:52:59 4975

原创 Unity(C#) 在List集合中根据概率取出一个值

在List里面随机取一个值很简单,只要生成一个随机数在0到List的数量区间,然后取这个下标的值就行了。但是如果List里面的每个值都有一个取值概率,那该怎么得到呢? /// <summary> /// 从指定的概率池中随机挑选一个概率值,并将其索引返回 /// </summary> /// <param name="probabilities">概率池</param> /// <ret

2022-01-12 11:24:23 3519 3

原创 优化Unity UI的技巧

1. 使用更多画布画布组件的主要任务是管理在层次窗口中绘制UI元素的网格,并在发出渲染这些元素所需的Draw Call。画布的另一个重要作用是将网格合并进行批处理(条件是这些网格的材质相同),以降低 Draw Call 数。然而,当画布或其子对象发生变动时,这称为“画布污染”。当画布污染后,就需要为画布上的所有UI对象重新生成网格,才可发出 Draw Call。这个重新生成网格的过程不是一个简单的任务,也是Unity项目中性能问题的常见来源,遗憾的是,很多因素都会导致画布污染。即使更改画布上的单个UI元素

2021-12-25 17:44:59 3778

原创 Android通过读取AndroidManifest里面的meta-data获取参数

如题,在AndroidManifest里面的meta-data里面配置:<application> <meta-data android:name="TTAPPID" android:value="APPID123" /> </application>在代码里面可以获取value的值: public static String getMetaDataValue(Context ctx,

2021-11-29 17:35:37 2644

原创 Shader学习记录---在Unity Shader中实现漫反射光照模型

定义漫反射(diffuse) 是光线照射在物体粗糙的表面会无序地向四周反射的现象。是投射在粗糙表面上的光向各个方向反射的现象。当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,我们可以通过下图观察到,反射光的强度取决于在表面法向量和入射光的光线之间的角度的余弦值。实践Shader "005/DiffuseSample"{ //属性 Properties {

2021-11-20 23:10:46 4627

原创 android studio最新版引用项目的libs目录下的jar,arr文件

implementation fileTree(include:['*.jar'], dir:'libs') implementation fileTree(include:['*.aar'], dir:'libs')

2021-10-29 16:06:28 5447

原创 Unity 使用EPPlus读取配置表并制作编辑器工具生成数据

EPPlus这个工具可以读写Excel。使用方式很简单。可以参考视频学习:【Unity教程】Excel文件的读取和写入 (使用EPPlus)一开始我是尝试在手机上解析,我测试的只有Mono环境下才能使用,并且需要设置.Net 4.x,添加118N等dll。IL2CPP下不能使用。后面才了解到在游戏运行时不要去动态解析Excel,因为在手机上解析不了。而且你需要把这个dll加在工程里面,会增加包的大小。最好的就是先把Excel写入文件, 运行的时候读取这个文件的方式来做。配置表工具所以现在的流程是策

2021-09-14 10:17:07 1167

原创 根据Spine动画自动创建代码状态机

Spine创建状态机的方法导入Spine的三个文件,然后会生成SkeletonData.asset文件,然后将SkeletonData.asset文件拖动到Hierarchy下,选择SkeletonMecanim,能够看到在文件同一目录下生成了controller文件代码生成状态机状态和连线在RPG游戏中,角色有几十个,二他们的动画是类似的,所以应该代码创建生成状态和连线.我的思路如下:1.选中动画控制器,它是AnimatorController类型的.2.创建需要的动画状态,这里我定义了一个

2021-09-08 19:46:56 1088

原创 c# 时间戳和DateTime相互转换

时间戳不含时区的概念Unix时间戳:是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。DateTime2021-05-26 23:59:00 北京时间包含时区的概念,涉及到时间戳和时间的转换,就会有时区的问题。DateTimeKind.Utc //协调时间DateTimeKind.Local //本地时间TimeZone.CurrentTimeZone //获取当前计算机的时区格式化输出:t.ToString(

2021-08-31 20:07:02 1827

原创 Unity纹理压缩格式

介绍要弄明白这些问题,首先要简单解释一下贴图压缩格式的基础概念。为了让贴图在手机中运行时占用尽可能少的内存,需要设置贴图的压缩格式,目前 Unity 支持的主要压缩格式有:android 上的 ETC/ETC2,iOS 上的 PVRTC,以及未来可能会使用的 ASTC。这几个压缩格式有自己的特点:ETC:不支持透明通道,被所有 android 设备支持ETC2:支持透明通道,Android 设备的 GPU 必须支持 OpenGL es 3.0 才可以使用,对于不支持的设备,会以未压缩的形式存

2021-08-31 19:45:26 1480

原创 Unity 声音资源优化

音频资源占用过高这个连接是讲audioclip组件的一些信息:http://docs.unity3d.com/Manual/class-AudioClip.html 。通过UWA在线资源检测查看音频片段页面,查看内存占用较高的音频文件是否合理。大文件使用Streaming方式可以看到有两个音频一个就占了将近16M的内存,这是十分不合理的。decompress on load:在加载时解压,用于较小的音频。对于Vorbis编码的声音加载时将使用大约十倍的内存。因此不要对大文件使用此选项。Co

2021-08-31 19:38:37 657

原创 c#堆和栈的区别

栈:全称是线程堆栈,英文 Stack堆:全称是托管堆,英文Heap解释1栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小栈由系统分配内存大小堆由程序员自己申请解释2存放在栈中时要管存储顺序,保持着先进后出的原则,它是一片连续的内存域,由系统自动分配和维护。而堆是无序的,它是一片不连续的内存域由有用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(

2021-08-31 19:16:18 1665 2

原创 Android:compileSdkVersion、minSdkVersion、targetSdkVersion 的区别和作用

compileSdkVersion告诉 Gradle 用哪个版本的 Android SDK 编译你的应用,使用任何新添加的 API 就需要使用对应 Level 的 Android SDK。修改 compileSdkVersion 不会改变运行时的行为,当修改了 compileSdkVersion 时可能会出现新的编译警告、编译错误,强烈推荐总是使用最新的 SDK 进行编译,避免弃用的 API。此外,如果使用最新发布的 Support Library 就需要使用最新的 SDK 编译。例如使用 23.1.1

2021-08-31 19:13:40 1400

转载 Unity开发自定义类模板

修改Unity创建的C#脚本模板打开Unity安装目录中的模板配置文件(以我安装的Unity2019.4.14f1c1版本为例)位置:D:\Program Files\Unity2019.4.14f1c1\Editor\Data\Resources\ScriptTemplates修改后的代码:增加版权信息、脚本创建时间、作者信息、命名空间,为了代码的一致性,将生命周期函数的访问修饰符改为私有,去掉注释和Update方法**(因为正常在实际开发中的大部分脚本都不会实现Update方法,如果没有实现U

2021-08-28 16:48:31 893

原创 ILRuntime注意事项及商业框架使用

注意事项1.ILRuntime对多线程Thread不兼容,在热更代码里使用多线程会导致Unity崩溃闪退2.热更代码里可以写枚举类,也可以用反射,但是都只能在热更Dll中使用。3.需要写委托适配器,委托转换器。在发布版本后这些不能热更,使用之前一定要预留好可能会使用的。appDomain.DelegateManager.RegisterMethodDelegate<int, float>(); appdomain.DelegateManager.RegisterFunctionDele

2021-07-03 13:38:03 1907 4

原创 WSL2 请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化

环境:windows家庭版启动WSL2,出问题如标题所示,原因是因为腾讯手游助手弹窗提示检测到兼容的Hyper-v正在运行,请关闭后重试,可是后来想打开Hyer-v却不行。因为windows家庭版没有hyper-v虚拟机。解决办法:手动安装hyper-v虚拟机hyper-v虚拟机新建文本文件,复制以下内容,并另存为 Hyper-V.cmdpushd "%~dp0"dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.tx

2021-01-07 16:06:07 14512 2

转载 《UNIX网络编程 卷1:套接字联网API》第一个例子运行时环境搭建

概述  要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议。大多数网络是按照划分成客户和服务器来组织的。本章及后续章节的焦点是TCP/IP协议族,也可称为网际协议族。下图为客户与服务器使用TCP在同一个以太网中通信:图1.1 客户与服务器使用TCP在同一个以太网进行通信  同一网络中的客户机与服务器无需出于同局域网,上图1.1所示的是同一个局域网。下图1.2所示的是处于不同局域网的客户机与服务器,这两个局域网通过使用路由器连接到广域网。 图1.2 出于不同局...

2020-11-08 21:55:40 168

原创 Unity UI优化--Canvas合批--从源码角度解读

CanvasCanvas是用来放置所有UI元素的地方,所有的UI元素必须是这样一个Canvas的子对象。它给Unity的渲染系统提供按层划分的几何系统,负责将其内部的几何形状合并到批处理、生成合适的渲染指令并发送到Unity图形系统。问题当UI元素变化时,它会重新生成网格并向GPU发起绘图调用,从而显示出UI。生成这些网格会消耗大量性能,需要将UI元素收集到批处理中,从而尽可能减少绘图...

2020-03-12 14:02:02 3221 1

原创 单例模式

单例模式属于创建型设计模式,为了方便的得到唯一对象,起到了全局统一管理的作用。接下来介绍单例模式的写法。饿汉模式public class Singleton{ private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton newIn...

2020-01-03 20:44:32 161

原创 观察者模式

观察者模式当一个被观察者的行为发生变化的时候,需要通知所有被注册的观察者,这种模式就被称为观察者模式。那么这种模式怎么实现呢?我们把被观察者抽象出来为一个接口,称为主题接口,所有被观察者也抽象出来,称为观察者接口。主题接口里面有三个方法,分别是注册一个观察者,去除一个观察者,通知观察者发生变化,在观察者接口里有一个方法, 就是更新。好的,接下来我们就开始写主题接口了。public i...

2020-01-03 20:43:40 153

原创 设计模式概述

设计模式是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。根据设计模式的参考书Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns...

2020-01-03 20:40:36 165

Unity编辑器代码热重载

热重载还挺好用得,安装后升级下,在运行模式改代码,只要几秒钟就生效了

2023-11-30

Unity-Addressable Demo工程

Unity-Addressable Demo工程 理解local和Remote分组,CanChange Post Release 和 Cannot Chage Post Release区别。

2022-02-20

SheelTool.unitypackage

Unity 使用EPPlus读取配置表并制作编辑器工具生成数据 https://blog.csdn.net/KindSuper_liu/article/details/120274111?spm=1001.2014.3001.5501

2021-09-28

ILRuntime_FrameWork.rar

配合文章食用:https://blog.csdn.net/KindSuper_liu/article/details/118424661

2021-07-03

SRDebugger v1.8.2版本.zip

SRDebugger * 在运行真机的时候,查看日志,FPS,游戏性能,系统信息,可以方便的开启,关闭。 * 响应式设计支持任何分辨率或方向 * 可以支持Andorid、IOS、Window、WebGL 和Web Player * 不怎么耗费性能,只需要很小的开销

2019-10-28

UnityDynamicScrollView-master.zip

基于UGUI的动态滚动列表,继承自UGUI的‘SrollRect’,可以重复利用列表,支持不同尺寸的列表元素。

2019-07-01

FSMSystem.unitypackage

博客示例代码 见https://blog.csdn.net/KindSuper_liu/article/details/93714227

2019-06-26

UI框架 - 基于UnityUGUI.zip

UnityUGUI的简易UI框架-可做参考。什么是UI框架?就是管理场景中所有的面板,控制面板之间的跳转。

2019-06-24

Android毕业论文设计--翻转课堂

近几年,随着移动计算机技术的快速发展,移动生活和学习越来越方便老师和学生。它旨在让学生与老师在学习和工作上具有更多的信息交流,让老师和学生第一时间获得想要的课堂信息。翻转课堂可以满足以上要求,更加贴近学习,让学生更加了解自己在课堂的信息,让老师更加明白学生的情况。

2018-04-19

Android理财软件--天天记账的设计--论文

Android理财软件--天天记账的设计--论文参考。本文运用Android平台,开发一款简单、美观、使用的基于安卓的个人理财应用程序。

2018-04-19

自定义的下拉刷新,上拉加载listview

参照博文:http://www.cnblogs.com/fuly550871915/p/4867231.html

2017-04-07

空空如也

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

TA关注的人

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