
Unity3d
文章平均质量分 53
两水先木示
有时候,你不知不觉就完成了一个BUG!
展开
-
【Unity3D】摄像机适配场景以及Canvas适配
理由:小于代表真机高度比开发高度更大,因此不需要担心高度上的遮挡,而应担心宽度的遮挡,为了避免宽度上有遮挡问题,因此保证宽度不变策略;右图是真机分辨率下适配后的情况,保证宽度不变(可见宽度上的绿色边缘处是紧贴着屏幕边缘),将整个3D场景所有元素放于一个根节点下,往下移动一定距离来紧贴白色UI。左图是开发分辨率下的情况(宽度和高度均正常 设计上就是如此)开发分辨率 750*1334 (宽高比:0.56)(下面的一行白色是UGUI UGUI紧贴着屏幕底下边缘)真机宽高比<开发宽高比,采用宽度不变策略。原创 2025-03-22 18:20:50 · 526 阅读 · 0 评论 -
【Unity3D】Addressables使用流程
如果你的shader是Standary 标准着色器,这个着色器变体非常多,会导致包体变大,可以去获取shader源码 Standary.shader 简化Standary只保留需要使用的,具体可以百度应该有。Remote.LocalPath 改为 http://ip:port/[BuildTarget] 例如:http:localhost:6800/[BuildTarget] (不过我的默认就是对的)默认是:http://[PrivateIpAddress]:[HostingServicePort]原创 2025-03-16 20:58:12 · 875 阅读 · 0 评论 -
【Unity3D】Jenkins Pipeline流水线自动构建Apk
解决groovy.lang.MissingPropertyException: No such property: Platform for class: Cannot invoke "java.util.Map.size()" because "map" is null使用Pipeline Script 脚本式Groovy语法流水线式自动构建安卓apk包Tomcat 10.0.5 + Jenkins 2.492.1(.war) + JDK 17 启动Jenkins Unity保持使用JDK 1.8原创 2025-02-12 23:32:46 · 996 阅读 · 5 评论 -
【Unity3D】Unable to detect SDK in the selected directory
打开Android Studio的SDK Manager更新Android SDK Tools。某天突然发现SDK选中自己的目录 或 打安卓包时 提示SDK Tools相关的报错。原创 2025-02-12 11:05:15 · 354 阅读 · 0 评论 -
【Unity3D】UGUI的anchoredPosition锚点坐标
本文直接以实战去理解这三个坐标,围绕着将一个UI移动到另一个UI位置的需求进行说明。(anchoredPosition)UI锚点坐标,它是UI物体的中心点坐标,以UI物体锚点为中心的坐标系得来,UI锚点坐标受锚点(Anchors Min、Max)和 中心点Pivot影响。原创 2025-02-10 20:00:31 · 1100 阅读 · 0 评论 -
【Unity3D】实现横版2D游戏——攀爬绳索(简易版)
基于实现了单向平台后才能进行攀爬绳索到平台,否则攀爬到平台后会被阻挡,以及无法从平台往下攀爬。原创 2025-01-30 17:33:07 · 1125 阅读 · 0 评论 -
【Unity3D】实现横版2D游戏——单向平台(简易版)
项目Demo直接使用免费资源:Hero Knight - Pixel Art (Asset Store搜索)打开Demo场景,进行如下修改,注意Tag是自定义标签SingleDirCollider对HeroKnight增加如下脚本:核心思路:利用Physics2D.IgnoreCollision(碰撞器1,碰撞器2,[true])忽略或恢复传入的2个碰撞器之间的碰撞。原创 2025-01-30 00:26:11 · 743 阅读 · 0 评论 -
【Unity3D】实现横版2D游戏角色二段跳、蹬墙跳、扶墙下滑
蹬墙跳要调整好Jump On Wall H Force 横向力 和 Jump On Wall V Force 纵向力 数值才能表现正常,其中 V Force 是在 1的基础上的增量值,这里的力并非物理力实际是速度增量倍率。代码则是:Mathf.Sqrt(2f * jumpHeight * -gravity),加速度是重力反方向,跳跃高度固定,则计算出了速度增量,之后用它乘以(1+V Force)得出的一个对Y轴速度影响的增量。跳跃对Y轴速度影响是用公式:根号2gh。可做辅助射线查看是否正常射线检测到墙体。原创 2025-01-29 11:43:25 · 544 阅读 · 0 评论 -
【Unity3D】实现2D角色/怪物死亡消散粒子效果
关于Billboard和Stretched Billboard区别是前者仅永远朝向摄像机,后者还会根据粒子速度越快拉伸粒子,越慢压缩粒子,呈现动态运动粒子效果,具体可以自行调整一些相关参数测试。Particle System3物体(拷贝物体2修改,与物体2区别噪声不带曲线变化固定为1,且改为非爆发式,而是随着时间逐步发射10000个粒子至结束)Particle System2物体(拷贝物体1修改,与1物体区别在于速度带噪声影响且速度前期平缓变化、后期变化幅度大)原创 2025-01-28 22:49:55 · 762 阅读 · 0 评论 -
【Unity3D】实现2D小地图效果
2D玩家添加Dotween移动DOPath效果,移动完成后进行刷新小地图(小地图会顺便刷新大地图)原创 2025-01-28 12:03:19 · 701 阅读 · 0 评论 -
【Unity3D】实现Decal贴花效果,模拟战旗游戏地形效果
涉及知识点:Decal贴花、屏幕后处理Bloom、屏幕空间构建世界空间、ChracterController物体移动、Terrain地形创建。原创 2025-01-27 18:15:04 · 746 阅读 · 0 评论 -
【Unity3D】Tilemap俯视角像素游戏案例
自上而下分别是:tile_0025、tile_0012、tile_0014、tile_0036、tile_0038、tile_0026、tile_0024、tile_0037、tile_0013、tile_0039、tile_0040、tile_0041、tile_0042。之后在Scene场景绘制地形即可,如下操作,先打开素材库Tile Palette,再选中画笔后,选择素材库的其中一个素材,例如泥土地形,然后直接去到Scene窗口左键白色描边格子绘制。会生成这些Tile文件。原创 2025-01-27 00:48:29 · 1170 阅读 · 0 评论 -
【Unity3D】《跳舞的线》游戏的方块单方向拉伸实现案例
运行游戏点击空格动态创建拉伸的方块,由Speed控制速度,新方向是随机上下左右生成。通过网盘分享的文件:CubeMoveMusic.unitypackage。原创 2025-01-24 23:33:12 · 458 阅读 · 0 评论 -
【Unity3D】aab包太大无法上传Google问题
勾选Split Application Binary:资源会被拆分成多个部分,超过150MB的部分使用Play Asset Delivery进行分发,可以根据设备类型自动分发不同架构的资源,减少用户设备的存储需求。不勾选Split Application Binary:所有资源包含在一个单一的aab包中,不需要额外的下载步骤,但可能会增加aab包的大小。原创 2025-01-24 17:47:16 · 942 阅读 · 0 评论 -
【Unity3D】Unity混淆工具Obfuscator使用
混淆后屏蔽TestA.dll混淆默认日志文件。原创 2025-01-23 21:40:29 · 1919 阅读 · 0 评论 -
【Unity3D】3D物体摆放、场景优化案例Demo
通过网盘分享的文件:PlaceGameDemo2.unitypackage链接:提取码: fpfm1、负责加载建筑数据表(BUILD_CONFIG_JSON_STR)json内容id:1,Build_A(立方体)、id:2,Build_B(球体)2、构建世界World类对象(1000*1000*1000大小)以100*100*100的立方体为房间Room填充World空间。World由若干个Room组成,Room下可存放若干个处于Room范围内的物体(Unit封装)原创 2025-01-20 18:42:18 · 1391 阅读 · 0 评论 -
【Unity3D】利用Hinge Joint 2D组件制作绳索效果
其子节点的情况和动态绳索一样,挂载2D刚体、HingeJoint2D以及2D碰撞体,区别在于没有Anchor空物体作为节点头部,而是直接以whitecircle作为第一个节点,它连接的2D刚体是StaticRope的2D刚体。1、关于绳索节点图片,使用的是50*50的白色圆形图片,不要有多余的透明区域,否则会影响绳索表现,例如图片留白很多,绳索节点的形变会很抽象,还有使用长方形图片也有点抽象,尽量选择相同宽高的图片作为节点。2、所有DynamicRope下的物体都有HingeJoint2D组件,原创 2025-01-17 22:54:25 · 846 阅读 · 0 评论 -
【Unity3D】远处的物体会闪烁问题(深度冲突) Reversed-Z
因为深度值是浮点类型float32,其浮点数记录无法保证精确度的,它仅有23个二进制有效位保存数据,8位是指数位,1位是符号位,其中23位只是小数有效位,若只谈纯整数它有24位有效位,2^24代表16777216个整数,例如:1.1111111....111 小数点后面是23个1,指数是2^23,那么就会得到 11111111...1111 (24个1)的二进制数,这个最前面的1是默认存在的(IEEE754规范)例如,左图Y轴[80,100]范围,其红色点密集,代表深度大的物体能准确表达深度;原创 2025-01-17 01:48:18 · 786 阅读 · 0 评论 -
【Unity3D】利用IJob、Burst优化处理切割物体
麻烦的地方是所有List都要改成NativeArray,所有Dictionary都要改成NativeHashMap,以及不能传递GameObject,Transform等,也就是不能有任何的引用类型对象出现在继承了IJob接口的脚本,而且CutJob是一个struct结构体。使用Job、Burst会将切割数据处理放到一个非主线程处理,并行加速计算。原创 2025-01-11 22:24:17 · 344 阅读 · 0 评论 -
【Shader案例】大地图迷雾实现思路
场景布局:地板Scale(40,1,40) 云层Cloud平面Scale(40,1,40) 保持一样大小,将云层平面X和Z值保持与地板一样,Y值拉大,让云层平面正位于地板上空。新建1个层级:Cloud,云层物体Layer层级设置为Cloud,射线检测只检测这一层的。其他代码部分相当简单了,就是射线检测拿到uv转局部坐标(x,y)去设置动态生成的遮罩纹理Texture2D(x,y)的像素R通道为0,就达到了裁剪这一个格子效果。原创 2025-01-10 19:49:51 · 606 阅读 · 0 评论 -
【Shader】漫反射、高光反射案例
【代码】【Shader】漫反射、高光反射案例。原创 2025-01-08 23:19:37 · 202 阅读 · 0 评论 -
【Unity3D】导出Android项目以及Java混淆
只有上面的这种成功信息,不要只看CONFIGURE SUCCESSFUl,而是其他相关的警告也没有才正常,正常后就能看到Build Apk,否则是无法看到的。利用镜像地址加速下载gradle-6.7.1-all gradle压缩包,下载到C:\Users\用户名\.gradle\wrapper\dists下。可通过观察这些文件后缀版本名看自己的对应多少版本或网上查询,这些版本不对应上就会出很多编译问题,即使你是空工程!gradle plugin 4.2.0版本对应gradle 6.7.1版本。原创 2025-01-08 18:25:22 · 1157 阅读 · 0 评论 -
Minimum supported Gradle version is 6.7.1. Current version is 5.4.1.
Minimum supported Gradle version is 6.7.1. Current version is 5.4.1. 意思是让我们去将gradle-5.4.1-all.zip改为gradle-6.7.1-all.zip,修改如下,并使用镜像地址加速下载。如果镜像地址不行了,可以自行百度找找有没其他的。原创 2025-01-08 14:59:09 · 410 阅读 · 0 评论 -
【Unity3D】apk加密(global-metadata.dat加密)
进入test文件夹,将\test\assets\bin\Data\Managed\Metadata\global-metadata.dat挪到项目里加密,然后再覆盖test文件夹内的,接着进行重打包apk得到ex_test.apk。上面这个操作,当i%5=4时,取到a[4]是'\0',data[i] ^ '\0' = data[i] 不会发生变化的,因此C#侧加密代码需要如下写法,当i%5=4时,我直接continue跳过,不对bytes[i]做处理。文件对齐后还需要使用apksigner,进行签名。原创 2025-01-08 03:20:59 · 1380 阅读 · 0 评论 -
【Unity3D】AB包加密(AssetBundle加密)
API从磁盘加载AB包,其中crc填0,代表没有任何CRC校验,offset填加密所使用的偏移量8(你可以改,但一定和加密时偏移量一样。测试代码如下,加载名为"prefab_ab"的AB包,并加载名为"Cube"的资源,是一个预制体。加密后,直接无法加载ab,所以无法正常看到ab内容。原创 2025-01-07 21:37:04 · 665 阅读 · 0 评论 -
LuaException: [string “chunk“]:1: attempt to call a nil value (global ‘require‘)
attempt to call a nil value (global 'require')原因:luaTable没有正确赋值元表metatable,或元表__index参数没有正确赋值luaEnv.Global。原创 2025-01-07 19:14:50 · 328 阅读 · 0 评论 -
【xLua】xLua-master签名、加密Lua文件
userLoader就是进入到我们在实例化SignatureLoader时传入的第二个参数(一个委托对象),委托执行了加载原文件字节数组、解密操作,而load_and_verify函数是先进行的userLoader,拿到解密后的byte[]再进行签名解码,所以只能先签名文件、后加密文件,对应先解密文件,后解码签名。是我自定义的提供外部解码byte[]的,需自行加载文件原始byte[],以及传入lua文件相对路径(不带.lua后缀)实际也可以写个不用传路径的方法,因为只是用来警告提示的。原创 2025-01-07 19:09:02 · 797 阅读 · 0 评论 -
【Unity3D】Text文本文字掉落效果
UGUI Text直接挂Canvas(World Space) 将它挪到镜头前,然后我是调整它的透明度为0的(不会影响网格生成),并挂载Gravity3DText组件,Gravity3DText组件参数拖拽自身Canvas和一个TextMesh物体预制体(3D文本),相关技术:Text、TextMesh、Rigidbody(刚体)、BoxCollider(碰撞体)、TextGenerator、文本网格、文字网格。运行游戏后点击空格生成3D文本。原创 2025-01-06 01:49:37 · 364 阅读 · 0 评论 -
【Unity3D】UGUI获取图片网格、文本网格大小、位置(Rect)
注意这个API最后得到的Rect,并不是rectTransform.rect,它的(x,y)是网格中心点(Canvas空间),它的(z,w)是网格宽度和高度。Rect(rectTransform.localPosition.x, rectTransform.localPosition.y, rectTransform.rect.width, rectTransform.height)构成。原创 2025-01-04 23:52:43 · 335 阅读 · 0 评论 -
【Unity3D】UGUI Canvas画布渲染流程
Canvas组件:画布组件是进行 UI 布局和渲染的抽象空间。所有 UI 元素都必须是附加了画布组件的游戏对象的子对象。优化UI合批:Image图片合批;文本和图片相交、排序对合批的影响;Mask对合批的影响;Canvas对合批的影响。原创 2025-01-03 18:31:29 · 920 阅读 · 0 评论 -
【Unity3D】遮挡剔除 Occlusion
版本:Unity 2021.2.7f1c1位于射线前创建若干个立方体,将最前面的立方体放大遮挡住后面的立方体。打开Occlusion面板可单独选中遮挡物:勾选Occluder Static,将其变为遮挡静态物体其他被遮挡物体则勾选Occludee Static然后点击Bake,之后选中Main Camera 并点击进入Visualization勾选Occlusion culling开启遮挡剔除,就生效了。遮挡剔除包含2个部分的剔除,1、剔除视椎体之外的物体。原创 2025-01-03 13:40:15 · 1270 阅读 · 0 评论 -
【Unity3D】LOD Group 多细节层次(CrossFade淡出淡入效果)
unity_LODFade.x是传入的渐变透明度,当是负数时说明是淡入物体的透明度值,需要+1操作,负数时是从-1变化到0,+1后就是从0变化到1。经过如下修改后支持Cross Fade 淡出淡入效果(注意3个物体的材质是不一样的,Shader一样)LOD_FADE_CROSSFADE变体是由LOG Group选择Cross Fade模式自动设置的。可发现我勾选了Cross Fade并没有渐隐效果,是因为Shader是不透明的,不支持。当是正数时,说明是淡出物体的透明度值,直接拿来使用。原创 2025-01-03 00:40:37 · 367 阅读 · 0 评论 -
【Unity3D】3D渲染流水线总结
场景数据从硬盘HDD加载到内存RAM,网格和纹理等数据会再次加载到显存VRAM,显卡对显存访问速度更快。1、顶点着色器:能够对网格的单个订单进行操作,必须实现将顶点坐标从模型空间转换到齐次裁剪空间。三角形设置:使用几何阶段输出的三角形顶点屏幕坐标进行插值运算得出三角边界坐标点。②通过测试的片元颜色值和颜色缓冲区的颜色进行合并(混合),再放回颜色缓冲区。通过片元的纹理坐标对纹理进行采样得到颜色值,可以对这个颜色值进行修改输出。①模板测试、深度测试,决定每个片元是否可见,通过测试才可见。原创 2025-01-02 22:54:17 · 360 阅读 · 0 评论 -
【Unity3D】基于UGUI——简易版 UI框架
若打开的面板不允许同时显示多个,检测到已有同名面板处于Active状态(通过检查面板所属窗体对象的活跃面板栈>0)则对显示中的同名面板进行【特殊关闭】,并缓存面板状态数据放入窗体对象的【面板状态数据栈】,以备恢复面板使用。关闭当前面板后,检查面板窗体对象的不活跃面板队列>0,且【面板状态数据栈】>0时,则需恢复同名面板的【特殊显示】。关闭当前面板前,若关闭的面板是全屏UI,且【全屏UI活跃数】== 1 时,则进行恢复显示出全部被隐藏的活跃面板。若打开的面板是全屏UI,则打开后对所有活跃的面板Hide。原创 2025-01-02 02:37:11 · 481 阅读 · 0 评论 -
【Unity3d】C#浮点数丢失精度问题
(-1^0 * 6) * 10^-1 = 1 * 6 * 0.1 = 0.6 (实际上程序并不会跑我这写的这段代码,因为所有运算+-*/都会用decimal的形式计算,而不是我们理解的运算方法了,如果想把decimal转成小数显示出来,那大概会只是在字符串形式上进行拿到整型后 对小数点字符进行左移而已,猜测是如此)decimal的存储计算情况还没了解,而float的情况和double一样,其小数部分是23位存储,但实际有效范围是2^24,double是2^53,因为。猜测是计算机会偏向较大值进位。原创 2024-12-31 12:15:55 · 1336 阅读 · 0 评论 -
【Unity3D】A*寻路(2D究极简单版)
UICamera深度要比MainCamera大,Clear Flags:Depth only,正交视野。运行后点击透明格子empty即执行从(0,0)起点到点击为止终点(测试是(5,5))如下图。MainCamera保持原样;注意Line绘线物体的位置大小旋转信息,不然无法看到线条。empty是透明图片格子,代表可通过路径节点;wall是白色图片格子,代表墙体。原创 2024-12-31 02:32:21 · 385 阅读 · 0 评论 -
【Unity3D】ECS入门学习(十三)Unity Physics
搜索:Unity Physics创建球体预制体如下脚本设置: 二、ECS 物理 射线检测代码只创建一个球体,且球体设置为静态的物体。使用Job Burst优化代码如下:注意:不能将BuildPhysicsWorld、CollisionWorld直接传递进Job类,而是将PhysicsWorld传入,使用NativeArray缓存射线检测到的刚体数组,而不是实体。原创 2024-12-29 17:24:38 · 625 阅读 · 0 评论 -
【Unity3D】ECS入门学习(十二)IJob、IJobFor、IJobParallelFor
IJob:开启单个线程进行计算,线程内不允许对同一个数据进行操作,也就是如果你想用多个IJob分别计算,将其结果存储到同一个NativeArray数组是不允许的,所以不要这样做,如下例子就是反面教材,应该直接用一个IJob去进行for循环,将结果存储到传入的NativeArray。IJobParallelFor:进行并行计算移动物体的位置信息(帧数在35左右)或者并发与并行兼容的,允许并行操作情况下才会进行并行。原创 2024-12-29 15:04:46 · 456 阅读 · 0 评论 -
【Unity3D】ECS入门学习(十一)ComponentSystem、JobComponentSystem
ScheduleParallel:仅能获取局部成员,可以读取实体,但不能修改实体,并且可读数据只允许存储到WithReadOnly(xxx)方法标记的只读变量内。JobComponentSystem:仅支持多线程,不支持主线程,可以使用扩展方法,并且重写的方法与其他都不同,它需要一个JobHandle返回值。ComponentSystem:仅支持主线程执行,不支持多线程,并且无法使用SystemBase介绍的扩展方法。Schedule:仅能获取局部成员,可修改实体。【新开一个后台线程执行】原创 2024-12-29 00:02:22 · 581 阅读 · 0 评论 -
【Unity3D】ECS入门学习(十)NativeContainer、EntityCommandBuffer、CompleteDependency
当前的lambda表达式在主线程执行,并且禁用Burst,让你可以在里面对entity进行架构的改变。不过,为了效率,尽量使用EntityCommandBuffer,而不是使用这个。为保证数据在多线程下的安全准确性,需要使用[NativeContainer]修饰的存储结构类来定义变量NativeArray 数组。AddComponent(entity, component) 追加一个针对实体进行添加组件操作放入实体指令缓存器。不正确的指针使用可能导致应用程序中出现细微的错误、不稳定和崩溃)原创 2024-12-28 22:08:41 · 422 阅读 · 0 评论