自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (2)
  • 问答 (3)
  • 收藏
  • 关注

原创 分离轴定理(SAT):凸多边形相交检测

通过检查多边形在一组分离轴上的投影是否有重叠,SAT能够快速准确地判断两个凸多边形是否相交,为游戏开发、碰撞检测和图形学等领域提供了强大的工具。它的基本原理非常简单:若两个凸多边形不相交,那么必定存在一条分离轴(即法向量),将它们在该轴上的投影分开。碰撞检测:在游戏开发中,需要检测游戏对象之间是否发生碰撞,SAT算法能够高效地判断两个凸多边形(如游戏角色、墙壁、障碍物等)是否发生碰撞。边界检测:在图形学中,需要对多边形进行裁剪、遮挡和渲染等操作,SAT算法可以快速排除不相交的多边形,优化渲染性能。

2023-07-25 17:18:33 930

原创 Unity 场景管理

通过序列化、AssetBundle加载、AOI和LOD的结合应用,我们能够实现高效的场景管理,动态加载和卸载场景物体,以及根据玩家位置和视野调整显示细节。通过只加载玩家所关注的物体,可以减少不必要的资源加载和渲染,提高游戏性能。通过结合这些技术,开发者可以实现高效的场景管理,动态加载和卸载场景物体,并根据玩家的位置和视野调整显示细节,提供优化的游戏性能和更好的用户体验。对于较大的场景,动态卸载可以帮助减少内存占用,而对于相对较小的场景,仅隐藏物体可能更合适,以避免频繁的加载和卸载操作。

2023-06-12 11:09:16 926

原创 Unity 中的Mono和IL2CPP

Mono的设计目标是使开发者能够在不同的操作系统和硬件平台上编写和运行相同的脚本代码,从而实现跨平台开发的便利性。Mono的IL支持使得开发者可以在运行时动态生成和执行代码,从而实现更高级的编程技术和动态性。总结起来,Mono和IL2CPP是Unity中常用的脚本运行时技术,它们分别具有各自的功能和优势。通过深入了解这两者的特点和适用场景,开发者可以做出明智的选择,并优化游戏的性能和开发效率。在Unity游戏引擎中,Mono和IL2CPP是两种常用的脚本运行时技术,它们在游戏开发过程中扮演着重要的角色。

2023-06-12 10:27:00 1252

原创 Unity VSCode一些插件 以及调试C#和Lua

Error Lens 通过使诊断更加突出,增强了语言的诊断功能,突出显示了由该语言生成的诊断所在的整行,并在代码行的位置以行方式在线打印了诊断消息。代码运行的插件,支持C/C++/python/lua/C#等几十种语法。选择Unity Editor,打好断点,F5运行就可以了。安装JDK,要求1.8以上,在扩展选项中编辑JDK路径。调试断点可以进行条件断点,开始方式,在断点处右键鼠标。在lua的入口处加上以下代码,路径记得改成自己的路径。在VSCode中编写Lua的插件,会进行语法检查。...

2022-08-12 16:01:12 4239 4

原创 FGUI编辑器插件开发(不推荐使用,当做参考吧)

可以现在FGUI编辑器中创建一个自定义的包,然后发布在main.lua中创建一个lua table,主要键值:create():当这个这个插件执行后并且inspector创建后会自动执行该方法updateUI():当UI面板发生变化时都会调用该方法在create()中将这个自定义面板创建出来,之后走自己的逻辑即可App.inspectorView:AddInspector(inspector, “自定义面板”, “自定义面板”);...

2022-08-12 15:58:01 1688 2

原创 python使用

官网:python.org准备和介绍Packages1,Numpy为python提供快速的多维数组处理能力Pandas:PythoN Data AnalysiS Library在Numpy基础上提供了更多的数据读写工具,比如ExcelScipy在Numpy基础上添加了众多科学计算工具MatplotlibPython丰富的绘图库安装官网;pypi.orgpip install xxxpip list:查看本机安装的包IDEAnaconda,VSCodeVSCode安装教程1

2022-04-25 22:33:15 1029

原创 Fairy GUI 使用

官网:https://www.fairygui.com/基本操作添加包:UIPackage.AddPackage(@“Assets/ArtContents\UIAssets\Sprites\homeChatBox\homeChatBox”);创建对象:var main = UIPackage.CreateObject(“homeChatBox”, “main”);显示:GRoot.inst.AddChild(main);元件(GObject)设置隐藏和显示visible = true/f

2022-04-24 16:55:43 1734

原创 xlua使用

开始准备下载地址:https://github.com/Tencent/xLua/tree/v2.1.16下载好后,将里面的XLua和Plugins导入到自己的工程中,如果需要热重载,将Assets的同级目录的Tools也放入自己的工程中并加上宏定义HOTFIX_ENABLE例如Unity2020.3.33中添加宏定义配置生成Warp类(1) 打标签,例如lua需要调用C#的某个类,那么就给这个类加上标签[LuaCallCSharp],这样Generate Code时会自动生成Warp类(2)

2022-04-24 16:53:13 2089

原创 .net C#垃圾回收

类比:自己去拿盘子 = 申请内存用完之后自已放到残渣中 = 手动释放阿姨来回收 = 自动回收(比如垃圾太多了,新客户来了)自己叫阿姨来回收 = 手动调用自动回收CLR的一个核心功能–垃圾回收垃圾回收的目的:提高内存利用率垃圾回收器,只回收托管堆中内存资源,不回收其他资源(数据库连接、文件句柄、网络端口)什么样的对象才会被回收?(1) 没有变量引用的变量,表示可以被回收了什么时候回收(1) 不确定,当程序需要新内存的时候开始执行回收(2) GC.Collect()手动调用回收。不建议使

2022-03-11 17:13:13 411

原创 Unity XCode 拨号和一键加群

拨号void CallPhone(const char* iphone){NSString nsIphone =[NSString stringWithFormat:@“tel://%s”,iphone];NSLog(nsIphone);NSURL url = [NSURL URLWithString:nsIphone];NSString *version = [UIDevice currentDevice].systemVersion;NSLog(version);if(version.do

2022-03-02 10:11:52 5286

原创 Unity Android 跳转拨号界面和一键加群

拨号AndroidStudio中public void CallPhone(String phone){ Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+phone)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);}AndroidManifest添加拨号权限Unity Android 一键加群

2022-03-02 10:10:23 608

原创 Unity性能分析优化

屏幕撕裂:在一次屏幕刷新中显示多个帧时显示,通常发生在屏幕水平移动解决方法:垂直同步(VerticalSync)它将同步图形显示器的刷新率,确保屏幕仅显示整个帧。例如:屏幕刷新率为60HZ,即16ms更换一次画面,而GPU只需要12ms的渲染时间。剩下的4ms时间就不是一个整块的画面。启用垂直同步的话,如果GPU完成,它将不会呈现在这些刷新率之间。意味着达到12毫秒时,我们能够提供一帧时,每次显示器都要刷新。因此,当我们第一次输入一个帧时,然后每次显示器刷新时,它总是找到GPU刚产生的新帧比如GPU

2022-02-28 15:16:08 3590

原创 使用StackTrace堆栈跟踪记录详细日志

StringBuilder sb = new StringBuilder();sb.Append("\n");System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(1, true);foreach (var frame in st.GetFrames()){var fileName = frame.GetFileName();if (string.IsNullOrEmpty(fileName))break;.

2022-02-11 16:18:41 378

原创 Unity XCode iOS 实现拍照和相册选择上传头像

显示弹窗通过UIAlertController来创建一个弹窗#if defined(__cplusplus)extern “C” {#endif//导出接口供unity使用void IOS_Open(){IOSCameraController* app = [[IOSCameraController alloc]init];[app Open];}#if defined(__cplusplus)}#endif-(void)Open{//创建窗口UIAlertControl.

2022-02-10 16:40:53 4237

原创 高级计算机网络

第一章:网络复习概述1.1什么是计算机网络从构成的角度来看:(1) 点:(端系统,网络应用)+路由器等网络交换设备(2) 边:链路(3) 协议:对等层实体在通信过程中所遵循的规则的集合:语法+语义+时序从服务的角度来看:(1) 能够为应用提供通信服务的通信架构(有连接可靠的服务和无连接的不可靠服务)(2) 使用通信服务相互配合工作的分布式应用1.2网络边缘(1) 网络的结构=网络边缘(应用,主机)+网络核心(路由器等网络交换设备及链路)+接入网络与通信链路(2) 网络边缘:运行应用的端

2022-01-27 10:22:11 3478

原创 Unity Android通过拍照和相册上传头像(图片)

Unity点击按钮调用AS中显示对话框选择是从相册中上传还是拍照上传,如果是相册直接获得路径传给Unity使用,如果是拍照,先拍照保存在本地,再将路径传递给Unity使用Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent对象可以封装传递下面6种信息:组件名称(ComponentName).

2022-01-24 14:12:59 5399 3

原创 Unity iOS XCode

打包流程首先在苹果开发者平台注册账号下载AppleDeveloper(加入开发者计划)和Xcode软件账号有三个类型;个人开发者:99美元,必须要发布到App Store,否则发布前手动添加设备的UUID(最大100台),只允许单人开发公司开发者:99美元,跟个人没啥区别,但是需要填写公司的邓百氏编码,支持多人开发企业开发者:299美元,不能发布到App Store,需要填写公司的邓百氏编码,支持多人开发或者使用TestFlight,必须要安装TestFlight使用个人开发者打包:需要证书

2022-01-19 13:39:29 6046

原创 Win10共享文件

右击文件,点击属性,在共享打开本地安全策略先新建一个文本.txt输入下面的内容@echo offpushd “%~dp0”dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txtdir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientToo

2022-01-19 13:33:58 97

原创 Unity ToLua 使用教程

下载地址https://github.com/jarjin/LuaFramework_NGUIhttps://github.com/jarjin/LuaFramework_UGUI环境搭建(1) 生成Wrap类打开这个工程,生成注册文件:这一步将Unity常用的C#类生成Warp类并注册到lua虚拟机中,这样在lua中就可以调用这些C#类了这一步等效于,在Unity中的完成这一步后,在Assets/LuaFramework/ToLua/Source/Generate目录看到许多Wrap类

2022-01-06 17:01:22 4995

原创 Lua使用

Lua在lua中,一切都是变量,除了关键字优点:轻量级:它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。可扩展性:lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些写功能,支持面向过程编程和函数式编程自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象语言内置模式匹配,闭包,函数也可以看作一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持通过闭包和table可以很方便地支持面向

2022-01-06 16:52:07 1465

原创 Socket补充

Poll:为了处理同步程序阻塞问题同步接收,发送,监听原理:如果缓存池中有数据可读或者可写,在进行写实现:bool Poll(int microSeconds, SelectMode mode);microSeconds:等待回应时间,以微妙为单位,如果为-1,表示一直等待,如果为0,表示非阻塞mode:SelectRead:如果Socket可读(可以接收数据),返回true,否则返回falseSelectWrite:如果socket可写,返回true,否则返回falseSelectError

2022-01-05 11:59:25 752

原创 帧同步简单流程

概念:服务器把所有的操作同步给所有的玩家,玩家在本地客户端根据服务器发过来的操作来推进游戏(同样的代码+同样的输入=同样的结果)优点:实时性非常好缺点:所有计算都放在客户端,容易作弊,跟单机没有太大的区别,不能同时同步的玩家太多,服务器每隔一段时间,将采集的玩家的操作,发给所有的客户端,继续采集下一次的操作,等下一次时间到,又把采集到的操作发送给所有客户端客户端:收到服务器的操作--------计算游戏逻辑—上报下一帧的操作给服务器帧的次数:上限取决于网络传输时间,下限取决于用户体验流畅数目[1

2022-01-05 11:57:00 2881

原创 网络同步策略

在CS架构中,无论采用什么样的同步方法,都始终遵循着客户端向服务器发送消息,服务器收到消息后稍作处理,再把这条消息发给需要的客户端们。所传递的消息可以是玩家的位置、旋转这样的状态值,可以是“向后走“这样的指令值。前者称为状态同步,后者称为指令同步。难点:由于存在网络延迟和抖动,先发送的包可能后到,后发的包可能先到,往往很难做到精确的同步。网络延迟参考:局域网:0.1毫秒PC宽带-外网服务器:12毫秒手机WiFi-外网服务器:25毫秒手机4G-外网服务器:50毫秒假设客户端每隔0.033秒向服务

2022-01-05 11:56:03 966

原创 Unity 和 Jar,自定义Unity安卓启动页

打Jar包流程1,新建一个AS的Java空项目2,修改plugins为com.android.library,删掉多余的配置,再点击Sync Now3,在这个目录下新建所需要的Java类4,打包5,找到jar包6,将这个jar包放入Unity工程下的Plugins/Android下即可C#调用Java:得到类:AndroidJavaClass class=new AndroidJavaClass(“包名.类名”);得到对象:AndroidJavaObject obj =new An

2021-12-31 16:33:14 3918 1

原创 Protocol buffer(Protobuf) 使用教程

概念protobuf是Google内部的混合语言数据标准,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行话,或者说序列化。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。对比XML和JSON:优点:性能方面:体积小,序列化后,数据大小可缩小约3倍。序列化速度快,比XML和JSON快2~50倍传输速度快:;因为体积小,传输起来宽带和速度都会优化 使用方面:使用简单,proto编译器自动进行序列化和反序列化

2021-12-05 21:59:03 2653

原创 Git原理和命令

基本命令git --version 查看版本clear 清屏git config --list 查看已有配置git config --global user.name “xxx” 项目用户名配置git config --global --unset user.name:删除配置信息git cofig --global user.email [email protected] 当前项目邮箱配置配置系统配置:–system,对整个系统都有效配置用户配置:–global,仅对当前用户有效配置当前项目配置:

2021-12-05 21:57:05 763

原创 IO操作,MD5

Directory.GetFiles、GetDirectories只有一个参数的:只搜索这个路径下的子节点,不会继续往下搜索两个参数的:在这个路径下按照第二个参数搜索模式进行搜索,搜索子文件,可以指定通配符限定。表示任意长度、?表示一个长度字符。例如.png搜索png的后缀图片路径三个参数的,默认只取当前目录下的文件或目录,SearchOption.TopDirectoryOnly只弄顶级目录,AllDirectories所有目录string dir = “Assets”;例如:Directory

2021-11-26 15:59:08 83

原创 Unity接入 阿里云OSS 腾讯云Cos的SDK,实现上传文件功能

概念Bucket(存储空间):Bucket是用户用来管理所存储Object的存储空间。每个用户可以拥有多个Bucket。Bucket的名称在OSS的范围内必须是全局唯一的,一旦创建之后无法修改名称。Bucket内部的Object数目是没有限制Object(对象,文件):Object是OSS存储数据的基本单元,称为OSS的对象,也被称为OSS的文件Bucket命名规范:1,只能包括小写字母,数字和短横线(-)2,必须以小写字母或者数字开头3,长度必须在3-63字节之间Object命名规范:1,

2021-11-26 11:58:54 3425

原创 ILRuntime 使用教程

下载:中国特别版Unity,直接在PackageManager里可以直接找到ILRuntime国际版Unity:在项目的的Packages/manifest.json,添加ILRuntime的源信息,在这个文件的dependencies节点前增加以下代码“scopedRegistries”: [{“name”: “ILRuntime”,“url”: “https://registry.npmjs.org”,“scopes”: [“com.ourpalm”]}],在打开Unity的Pa

2021-11-26 11:55:52 2929

原创 AssetBundle 热更新使用教程

AssetBundle原生API:或者通过UnityEditor.AssetBundleBuild创建一个AB打包,AssetBundleBuild解析:assetBundleName:打包出来的名字assetBundleVariant:用在不同版本资源的使用和动态替换AssetBundleassetNames:这个AB包中有哪些资源,资源路径AssetDataBase.GetDependencies(文件路径):获取这个文件的所有依赖,返回的事依赖路径开始打包(1) BuildPipeli

2021-11-26 11:45:10 3374

原创 Addressable 使用教程

实例化和卸载必须要一一对应,否则该物体会一直在内存中,除非退出程序AddressableAssetSettings使用第一步进入AddressablesGroups面板创建一个远程组将打包路径和加载路径设置为Remote,选择更新限制CanChangePostRelease 后续更新资源的话全量更新(直接替换旧资源),在发布后,允许被修改.与静态Group相对,这个Group对应的AB包,是可以在后续进行覆盖更新的,相对于增量更新,整个AB包的覆盖更新可能会让未改动的资源也重新下载.Canno

2021-11-26 11:42:04 4495 4

原创 Behavior Designer插件解析

选择节点和条件节点和并行节点这种非叶子节点都有一个中止类型当某个分支下某一个节点处于running时,会向父节点返回running状态,并将父节点设为running状态,然后一直往上传递记录,传递完成,当前行为树完成,等待下一次(下一帧)时重新进入分支时,会从孩子列表中寻找running状态的节点更优先继续执行。Self:当自身的孩子节点中有一个running状态时,自身不会设为running状态,而是设为初始状态。当自身是选择节点时,自身子节点执行顺序不受running影响了,当返回success

2021-11-26 11:04:27 436

原创 行为树概念

行为树主要采用4中节点(在行为树中,“节点”也称为“任务”)来描述行为逻辑,分别是顺序节点、选择节点、条件节点、行为节点。每一棵行为树表示一个AI逻辑,需要从根节点开始遍历执行整棵树。遍历执行的过程中,父节点根据自身的类别,确定需要如何执行、执行哪些子节点并继而执行,子节点执行完毕后,会将执行结果返回给父节点。节点从结构上分为两类:组合节点、叶节点。所谓组合节点就是树的中间节点,例如顺序节点和选择节点都是组合节点;叶节点包含两种类型的节点,分别是条件节点和行为节点1,条件节点可以理解为if条件测试,用

2021-11-26 11:02:53 2027

原创 AI 感知系统

AI角色感知的信息多种多样,通常会包含视觉和听觉信息,也可能包括脚步声、死去的同伴或敌人等。其中,视线查询(Line-of-Sight)几乎是必不可少的。在游戏中,AI角色可以通过两种方式获得游戏世界的信息–轮询和事件驱动。轮询:通过积极地观察世界的方式来获得信息,例如如果想知道周围有没有其他角色,在代码块中查找所有AI角色,看看是否在附近事件驱动:通过坐等消息的方式来获取信息解决方案:触发器(1) 当玩家射击时,一个声音触发器就被添加到场景中,这样,周围的AI角色会注意到枪声,决定是否逃避或赶来

2021-11-06 11:45:18 2535

原创 EasyAR 4.3 Unity云识别

首先在EasyAR官网创建云识别图库,试用使用日活,千万别选择次数,不然500次几分钟就用完了,而且还不能重新创建一个新的试用识别库在上传识别图,增加用于云识别APIKEY在Unity中,拖入Packages/EasyARSense/Prefabs/Composites/EasyAR_ImageTracker-1_CloudRecognizer-1预制体,在Unity中全局服务配置中填入ServerAddress:云识别图库中的密钥中的CloudURLs/Client-endAPIKey:云

2021-10-26 10:19:52 1967

原创 Unity 计算器

原理:后缀表达式1,在运算之前对字符串检测,确保改字符串没有问题2,创建两个栈,一个操作数栈S1,一个运算符栈S23,开始从左往右扫描字符串,3-1: 如果是操作数,入栈S13-2: 如果是运算符,while死循环3-2-1:如果S2为空或者S2的栈顶是左括号,则直接入栈,break3-2-2:如果当前运算符的优先级大于S2栈顶运算符优先级,直接入栈,break3-2-3:否则,将S2出栈入S1栈3-3:如果是左括号:直接入S2栈3-4:如果是右括号:在S2出栈寻找左括号,中间出栈的符号

2021-10-22 15:56:40 490

原创 操作系统原理笔记

1940S的操作系统操作系统:使程序能更好运行的系统软件1940s额计算机程序是相对机械的数值计算(1) 不需要也没有操作系统(2) 操作系统中唯一的对象就是独占计算机运行的程序1950s有了让多个程序共享一台计算机的需求计算机非常贵,集中管理、排队使用(1) 希望程序切换能够尽量无缝(2) 希望提供一些程序共同需要的功能,例如读写文件于是有了操作任务的系统(1) 批处理系统(2) 操作系统是一个简单的串行程序调度器和一系列库函数(3) 操作系统中开始有设备、文件、任务,但只有一个独

2021-10-20 16:30:18 402

原创 Unity 日志输出

日志文件存放路径Mac OS X ~/Library/Logs/Unity/Editor.logWindows C:\Users\username\AppData\Local\Unity\Editor\Editor.log编辑器下点击OpenEditorLog移动端,可以通过回调函数操作文件自己实现 Application.logMessageReceived += XPLog; void XPLog(string condition,string stackTrace, LogTy

2021-10-11 17:30:57 2293

原创 Unity游戏开发

脚本编译在编辑器下,每次修改完代码就会自动编译,最终所有代码将编译成DLL文件。DLL最终编译在Project/Library/ScriptAssemblies目录下。脚本分为运行时脚本和编译时脚本,运行时脚本会被编译到游戏包中,编辑时脚本仅用于编辑器模式下。脚本的存放的目录决定了他讲编译在哪个DLL文件中Plugins目录下的脚本最先被编译,编译成Assembly-CSharp-firstpass.dll,Plugins下的Editor编译在Assembly-CSharp-Editor-firstpa

2021-10-02 10:40:35 325

原创 AStar

A*寻路方式通常有三种:基于单元的导航图、基于可视点导航图与导航网络术语地图,目标估计,代价,节点(每个节点三个属性,g:从起始点到到当前点的代价,h:从当前节点到目标节点的代价,f=g+h),导航图基于单元的导航图(1) 基于单元的导航图是将游戏地图划分为多个正方形单元或六边形单元组成的规则网络,网格点或网络单元的中心可以看作是节点。(2) 由于结构很规则,因此易于动态更新,动态增加建筑物或障碍(3) 寻路是以网格为单位进行,但单个正方形过大,网格很粗糙,难以得到最好的路径;如果正方形小,网格

2021-10-01 08:23:03 1181

Fiddler中文版.zip

抓包工具

2022-01-06

Paint in 3D v1.9.14

画图涂鸦

2021-02-28

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

TA关注的人

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