
U3D项目经验
文章平均质量分 59
Unity3D项目开发经验
两水先木示
有时候,你不知不觉就完成了一个BUG!
展开
-
【Unity3D】摄像机适配场景以及Canvas适配
理由:小于代表真机高度比开发高度更大,因此不需要担心高度上的遮挡,而应担心宽度的遮挡,为了避免宽度上有遮挡问题,因此保证宽度不变策略;右图是真机分辨率下适配后的情况,保证宽度不变(可见宽度上的绿色边缘处是紧贴着屏幕边缘),将整个3D场景所有元素放于一个根节点下,往下移动一定距离来紧贴白色UI。左图是开发分辨率下的情况(宽度和高度均正常 设计上就是如此)开发分辨率 750*1334 (宽高比:0.56)(下面的一行白色是UGUI UGUI紧贴着屏幕底下边缘)真机宽高比<开发宽高比,采用宽度不变策略。原创 2025-03-22 18:20:50 · 613 阅读 · 0 评论 -
【Unity3D】实现横版2D游戏——攀爬绳索(简易版)
基于实现了单向平台后才能进行攀爬绳索到平台,否则攀爬到平台后会被阻挡,以及无法从平台往下攀爬。原创 2025-01-30 17:33:07 · 1147 阅读 · 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 · 780 阅读 · 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 · 571 阅读 · 0 评论 -
【Unity3D】实现2D角色/怪物死亡消散粒子效果
关于Billboard和Stretched Billboard区别是前者仅永远朝向摄像机,后者还会根据粒子速度越快拉伸粒子,越慢压缩粒子,呈现动态运动粒子效果,具体可以自行调整一些相关参数测试。Particle System3物体(拷贝物体2修改,与物体2区别噪声不带曲线变化固定为1,且改为非爆发式,而是随着时间逐步发射10000个粒子至结束)Particle System2物体(拷贝物体1修改,与1物体区别在于速度带噪声影响且速度前期平缓变化、后期变化幅度大)原创 2025-01-28 22:49:55 · 805 阅读 · 0 评论 -
【Unity3D】实现2D小地图效果
2D玩家添加Dotween移动DOPath效果,移动完成后进行刷新小地图(小地图会顺便刷新大地图)原创 2025-01-28 12:03:19 · 787 阅读 · 0 评论 -
【Unity3D】实现Decal贴花效果,模拟战旗游戏地形效果
涉及知识点:Decal贴花、屏幕后处理Bloom、屏幕空间构建世界空间、ChracterController物体移动、Terrain地形创建。原创 2025-01-27 18:15:04 · 851 阅读 · 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 · 1296 阅读 · 0 评论 -
【Unity3D】《跳舞的线》游戏的方块单方向拉伸实现案例
运行游戏点击空格动态创建拉伸的方块,由Speed控制速度,新方向是随机上下左右生成。通过网盘分享的文件:CubeMoveMusic.unitypackage。原创 2025-01-24 23:33:12 · 472 阅读 · 0 评论 -
【Unity3D】aab包太大无法上传Google问题
勾选Split Application Binary:资源会被拆分成多个部分,超过150MB的部分使用Play Asset Delivery进行分发,可以根据设备类型自动分发不同架构的资源,减少用户设备的存储需求。不勾选Split Application Binary:所有资源包含在一个单一的aab包中,不需要额外的下载步骤,但可能会增加aab包的大小。原创 2025-01-24 17:47:16 · 1011 阅读 · 0 评论 -
【Unity3D】Unity混淆工具Obfuscator使用
混淆后屏蔽TestA.dll混淆默认日志文件。原创 2025-01-23 21:40:29 · 2152 阅读 · 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 · 1451 阅读 · 0 评论 -
【Unity3D】AB包加密(AssetBundle加密)
API从磁盘加载AB包,其中crc填0,代表没有任何CRC校验,offset填加密所使用的偏移量8(你可以改,但一定和加密时偏移量一样。测试代码如下,加载名为"prefab_ab"的AB包,并加载名为"Cube"的资源,是一个预制体。加密后,直接无法加载ab,所以无法正常看到ab内容。原创 2025-01-07 21:37:04 · 726 阅读 · 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 · 399 阅读 · 0 评论 -
【Unity3D】基于UGUI——简易版 UI框架
若打开的面板不允许同时显示多个,检测到已有同名面板处于Active状态(通过检查面板所属窗体对象的活跃面板栈>0)则对显示中的同名面板进行【特殊关闭】,并缓存面板状态数据放入窗体对象的【面板状态数据栈】,以备恢复面板使用。关闭当前面板后,检查面板窗体对象的不活跃面板队列>0,且【面板状态数据栈】>0时,则需恢复同名面板的【特殊显示】。关闭当前面板前,若关闭的面板是全屏UI,且【全屏UI活跃数】== 1 时,则进行恢复显示出全部被隐藏的活跃面板。若打开的面板是全屏UI,则打开后对所有活跃的面板Hide。原创 2025-01-02 02:37:11 · 505 阅读 · 0 评论 -
【Unity3D】Particle粒子特效或3D物体显示在UGUI上的方案
解释下为什么传递的是世界坐标系的Mask区域,因为Shader使用的是直接将vertex模型坐标系传递到frag,此时frag的worldPosition是精细化的粒子特效模型坐标,而粒子特效位于3D空间下,不属于Canvas空间的,这个模型坐标实际就是世界坐标,因此需要用同样是世界坐标的坐标进行计算。由于粒子特效的ColorMask默认是RGB,没有A(透明通道),而渲染粒子特效的摄像机Background的Alpha是0,就会导致没有A通道的是无法被摄像机渲染出来的(反正测试是这样)原创 2024-12-24 15:37:13 · 1768 阅读 · 0 评论 -
【Unity3D】实现可视化链式结构数据(节点数据)
LinkObj类是节点类,里面有一个位置pos数据是存储该节点窗口位于编辑器的位置SerializableVector2类型是一个可被Json序列化的Vector2,不然无法被序列化。void DrawNodeWindow(int id) 传入的id即GUI.Window第一个参数,一般传节点唯一标识ID。Handles.DrawBezier(起点,终点,起点切线向量,终点切线向量,颜色,null, 线粗度) 绘制贝塞尔曲线。关键词:UnityEditor、可视化节点编辑、Unity编辑器自定义窗口工具。原创 2024-12-19 15:50:14 · 459 阅读 · 0 评论 -
【C#】实现Json转Lua (Json2Lua)
由该方法进行转化json为lua,使用JObject.Parse(json)转为Json对象,后经过判断是数组还是对象类型进行使用不同函数转化(JsonArray2LuaTable、JsonObject2LuaTable)LuaTable:封装JsonArray或JsonObject类型对象,主要是将数组或对象内的成员封装为LuaObject存储起来,数组存储于list,对象成员存储于map,核心GetString方法返回表的字符串形式。前提需引入NewtonsofJson。原创 2024-12-18 20:41:28 · 791 阅读 · 0 评论 -
【Unity3D】动态调整图片HSV色相、饱和度、明度
注意:#include "Assets/HSVDemo/Utility.hlsl" 路径可能有所变化,要填写你实际文件路径。具体shader代码的公式是百度得到,百度有N多种方式,只采用了较为正确与PS相近的。原创 2024-12-16 22:37:11 · 319 阅读 · 0 评论 -
【Unity3D】报错libil2cpp.so找不到问题
因此会导致libil2cpp.so无法正常生成。注意:仅有导出Android工程后,使用Android工程打包apk的情况会出现,正常直接使用Unity3D引擎打包apk则不会,因为Android工程里的build.gradle没有生成libil2cpp.so的代码,而Unity3D引擎会根据。以此类推如果发现一些东西在升级版本后,编译或运行游戏时看到日志有xxxx.so文件找不到了,大概率就是.gradle文件缺少了生成这个文件的代码。选中IL2CPP,自动帮你添加上生成libil2cpp.so的代码。原创 2024-12-16 21:50:32 · 526 阅读 · 0 评论 -
【Unity3D】无限循环列表(扩展版)
注意事项:无限循环列表的Item物体是重复利用的,因此OnHide回调后必须将传递进来的物体所有相关的缓存引用清空,例如案例是将其从字典移除。原创 2024-12-15 23:13:33 · 864 阅读 · 0 评论 -
【Lua坑】Lua协程coroutine无法正常完整执行问题
(持有已入池对象行为)后面发生什么就是你会发现有些协程好像无法正常执行完成,明明上一个还在正常输出,下一个就突然消失了,也就是存在这种持有已入池对象行为,要把这种行为全部抹除才能恢复正常,或者直接干脆不用对象池了,可能性能开销会上升点,不然就得排查全部相关的持有代码,将上面代码加一行延迟1帧或延迟渲染结束就能解决问题(保证至少执行过1次延迟!我试过在remove后直接将co=nil,insert时检查co~=nil再进行,还是会有异常情况。如果Lua协程本身是没有对象池缓存机制的,那就不会存在我说的问题。原创 2024-09-18 18:20:59 · 634 阅读 · 0 评论 -
Unity版本升级2022 Gradle 升级7.x版本调整
务必删除mainTemplate.gradle的所有maven{ url ... },所以查到是仍然支持的,但现在只需要settingsTemplate.gradle。settingsTemplate.gradle是新增的一个文件,用于统一管理所有的maven依赖加载路径。并且位于最前方,如果你还有其他的maven{ url ... } 请放置在它们下方。调整settingsTemplate.gradle文件的maven,必须添加有。mainTemplate.gradle有所变化,主要如下标红行。原创 2024-09-04 11:13:21 · 1643 阅读 · 0 评论 -
【Google】您的最新正式版本 (xx (x.x.xx)) 中存在 SDK 方面的问题 com.google.android.gms:play-services-safetynet
解决google发布后警告safetynet问题, 查看Android项目依赖项(树结构)方法。com.google.android.gms:play-services-safetynet问题原创 2024-03-20 16:38:11 · 742 阅读 · 1 评论 -
【Unity】com.android.build.gradle.internal.tasks.FinalizeBundleTask$BundleToolRunnable Java heap space
launcher:signReleaseBundle com.android.build.gradle.internal.tasks.FinalizeBundleTask$BundleToolRunnable Java heap space 原因:JVM使用空间不足,一般是工程非常大时候会突然出现,而且出现时会有很多其他额外的报错,均是JVM无法正常运行时导致的后续各种依赖库之类的报错。解决方案:提升JVM可使用空间原创 2024-03-08 11:46:29 · 957 阅读 · 1 评论 -
【Unity】崩溃JNI CallVoidMethodV called with pending exception java.lang.SecurityException: listen
(同理设置PlayerSetting - Mute Other Audio Sources勾选),默认为false,为true会导致游戏后台无法播放音乐,只允许有游戏音乐。问题:mumu模拟器12 (Android12版)调起Google登录窗口,输入账密或直接选账户后,窗口正常关闭,紧接着应用崩溃(闪退)查日志得出如下报错。TelephonyManager.listen 在Andorid12 已过期,因此导致一系列错误而崩溃。升级Unity引擎(如:2021.3.12f1)原创 2024-03-05 15:44:19 · 976 阅读 · 0 评论 -
【Unity】UnityWebRequest time out 0 bytes received问题
关键词:UnityWebRequest、Http协议、Get请求、0 bytes received。网上方案(均无法解决)request.useHttpContinue = false自定义downloadhandlerSystem.Net.ServicePointManager.DefaultConnectionLimit=50(默认为2)最终方案:可更改为Post方式请求解决。原创 2024-03-05 15:05:43 · 761 阅读 · 0 评论 -
【Google】转让谷歌应用流程及注意事项
转让应用后,谷歌支付服务器验证失败,无权限,应用内商品无法购买问题解决方案原创 2024-02-29 17:56:25 · 1644 阅读 · 2 评论 -
【Unity】导入IAP插件后依赖冲突问题 com.android.billingclient冲突
意思就是项目自身有引入billing:6.0.0版本模块,它内部有一个com.android.billingclient组,和某个插件(IAP)引入的依赖billing:3.0.3版本模块冲突,即com.android.billingclient组被重复引入了,Unity不知道用哪个,因此直接忽略掉某一个即可。exclude group: '组名', module: '模块名'如果你报错的是其他的,就一个个改填上去就好了。原创 2024-02-28 17:28:30 · 983 阅读 · 0 评论 -
【Unity】Library/PackageCache/com.unity.xxx@xxx not found、Library删除不会重新生成问题
关掉Unity,打开工程根目录将Library、Obj、Temp文件夹删除,没找到说明已经被删了。重新打开Unity等待自动生成。原创 2024-02-23 09:51:50 · 2926 阅读 · 0 评论 -
【Unity】双击C#脚本文件以单个文件打开(Visual Studio)、父类找不到、引用找不到、无法跳转等问题
问题:新安装一个Unity后,突然发现在工程里双击C#脚本,会一个一个打开,虽然也是用VS软件打开了,但是它无法被正确识别为Unity工程的C#脚本,也就是说所有命名空间无效,因为没关联上整个工程的解决方案。我们选用了具体的某个IDE后,在Unity里双击.txt后缀文件依然会使用VS打开,这时候就要采用特殊方法去实现用指定一个exe软件打开指定后缀的文件。关键词:C#脚本异常、IDE智能提示无效、命名空间无效、父类无效、无法跳转引用、指定后缀文件用指定exe打开。原创 2024-02-21 18:29:52 · 1752 阅读 · 0 评论 -
【Unity】双击txt文件以记事本形式(文本文档)打开
step1是Unity默认处理文件打开函数,如果返回false则代表你不在第一步处理,并且交给Unity处理,如果Unity依旧处理不了(不可识别文件)那么就会进入到step2函数,如果你处理成功了就应该返回true,否则返回false交给Unity处理。这篇参考文章是打开不可识别文件的,所以它会在step1不进行任何处理,而放到step2处理,而我是打开可识别文件txt,json有明确后缀且能正确被Unity识别的,直接处理在step1。原创 2024-02-21 18:12:19 · 652 阅读 · 0 评论 -
【GoogleAdmob接入后续】app-ads.txt以及部署Firebase Hosting
firebase login failed, app-ads.txt, Google Admob广告审核验证解决。原创 2024-02-09 17:04:58 · 3753 阅读 · 0 评论 -
【Unity】动态申请权限
Unity 2020.2 API接口开放了 Permission.RequestUserPermissions(权限字符串数组) 以及 PermissionCallback 回调。(动态申请权限也要定义在AndroidManifest.xml )判断是否有权限:bool Permission.HasUserAuthorizedPermission(权限字符串)请求权限:Permission.RequestUserPermission(权限字符串)原创 2024-01-08 14:08:58 · 1443 阅读 · 0 评论 -
【SVN】Windows版合并提交bat文件+自定义菜单快捷键
然后你可以直接双击执行了,它会依次进行cleanup、update、merge、commit操作,如果有冲突则会自动停止,有冲突的解决方法最好还是回归手动可视化一步步解决,但我们这种常规合并内容到分支或主干是很少冲突的,有兴趣是可以进行使用自定义菜单快捷键来进行执行bat的。其中C:\YourBranchProj是你要合并版本的目标工程,而C:\YourTrunkProj则是合并源工程,意思就是从主干合并内容到分支,也可以反过来设置路径则是分支合并内容到主干。原创 2023-12-28 15:11:34 · 575 阅读 · 0 评论 -
【Unity3D】Android打包报错AAPT2:xxx Linkxxx
也有离线maven玩法的,也就是自己做本地maven库,使用mavenLocal()替代google()和jcenter()其中3.4.0就是你当前的gradle plugin版本 对应gradle是5.1.1,这些对应关系能百度到不再阐述。找最新可用的镜像url,替换google()和jcenter(), 可以直接使用public替换这2个。Gradle Plugin 与Gradle版本不匹配问题 或 相关依赖库下载不完全问题;原创 2023-12-05 13:49:19 · 773 阅读 · 0 评论 -
XmlException: An XML comment cannot contain ‘--‘, and ‘-‘ cannot be the last character. Line 11, pos
- 注释信息 --> 是否写错了,比如。-- 注册信息 -- > 多一个空格之类的。原创 2023-11-29 10:29:18 · 454 阅读 · 0 评论 -
【Unity3D】自动构建Android包时指定aab或apk以及设置sdk版本
注意可能在#UNITY_ANDROID宏内无法通过引用形式查找出来的,应该整个工程全搜索找到这些地方去改动。为true打出Android App bunle文件(.aab) 默认为false打出apk文件。设置指定目标SDK版本。指定最小支持SDK版本。原创 2023-11-21 13:16:53 · 504 阅读 · 0 评论 -
【Unity3D】获取UGUI位置不正确问题
1、Layout影响,布局控件导致位置异常,必须强制刷新才可以正常获取位置2、Animator影响,动画控制器锁死最后一帧,参数无法赋值,参数被完全锁死。原创 2023-11-07 11:57:59 · 643 阅读 · 0 评论 -
【Unity3D】实现UI点击事件穿透
注意:EventSystem.current.RaycastAll获取到的对象列表是能够接受事件的,假如你的按钮Button自己身上没有Image,而是Button的子物体有,那么你就要给这个子物体也加上标签Tag才能响应到。如果ExecuteEvents.Execute不管用,可以试试ExecuteEvents.ExecuteHierarchy。原创 2023-10-02 16:46:46 · 2329 阅读 · 0 评论