使用AI编程实现一个简单的"坐下"mod功能
miside吧
全部回复
仅看楼主
level 13
惠更斯X 楼主
某日楼主逛B站时无意中刷到一个叫做neuro mita的米塔AI对话项目,他们的mod效果看起来很厉害,但只支持英语和俄语。于是想着学习一下unity相关的内容看看能不能稍做修改,但大致过一遍后发现该看不懂还是看不懂。原因是米塔本身使用了一种叫做il2cpp的技术,这种方式无法直接看到原始逻辑想要看懂的话还需要学习c++,简而言之就是越学发现要填的坑越多;但好在现在有AI编程,我们可以跳过很多学习内容甚至加入一些自己的想法尝试一下让模型做简单的空间理解[吐舌]
2026年06月28日 07点06分 1
level 13
惠更斯X 楼主
特别声明:本demo仅用于技术交流和学习讨论,部分逻辑在得到neuro mita项目github中issue允许情况下参考了neuro mita的逻辑,在这里附上他们的项目链接(github前缀,直接放会被吞)/VinerX/NeuroMita;代码中包含的任何对游戏原生API的调用仅为运行时内存修改;如果原游戏开发者(Aihasto)、相关插件版权方或NeuroMita作者认为本demo存在任何侵权或不妥之处,请直接在Issue中留言或联系我,我将及时予以删除。
2026年06月28日 07点06分 2
前排提醒:鄙人并非专业开发者,所描述的内容可能存在错误或歧义。欢迎诸君斧正,或者且当图一乐
2026年06月28日 07点06分
level 13
惠更斯X 楼主
既然想要尝试让模型第一视角进行简单的空间理解,那么我们第一步自然是要在米塔的眼睛位置挂载一个新的摄像头,结合unity explorer的物体列表层级,我们在gemini的辅助下很轻松的就可以实现这个功能
2026年06月28日 07点06分 3
level 13
惠更斯X 楼主
接下来,我们需要选择一个擅长空间推理的模型作为测试目标,本次测试使用Qwen3.5-397B-A17B;因为千问系列模型在空间推理和2D定位上做过强化训练,如图这是2025-11-26在SpatialBench空间推理基准测试榜单,虽然数据有一点老旧但足以证明模型可以胜任这个简单的功能
2026年06月28日 07点06分 4
level 13
惠更斯X 楼主
补一张hugging face跑分:在这个测试中我们主要考验RefCOCO(avg)项这项测试的核心任务称为“指代表达理解”(REC),具体形式是:给模型一张图片和一句用自然语言描述目标的文字(如“穿蓝衬衫的女士”),要求模型定位并框出该目标物体。这要求模型同时具备强大的视觉理解和语言理解能力。由左至右分别是GPT5.2 Claude 4.5 Opus Gemini-3 Pro Qwen3-VL-235B-A22B K2.5-1T-A32B Qwen3.5-397B-A17B
2026年06月28日 07点06分 5
本次项目测试中使用的是魔搭每天白嫖的两千次API,hugging face中这一项qwen3.6 27b与qwen3.5-397b-a17b跑分几乎相同可以作为性价比替代
2026年06月28日 08点06分
level 13
惠更斯X 楼主
在将模型挂载在了米塔的眼睛处后,我们可以先让米塔根据截图和描述进行简单的2D定位,使用归一化的四个参数[a,b,c,d],例如有一个物体占据截图中右下角四分之一的位置就是[0.5,0.5,0.5,0.5](在长50%,宽50%的位置作为左上角固定点,基于这个固定点拉取一个长方形的框)
2026年06月28日 07点06分 6
level 13
惠更斯X 楼主
在这个测试中,我们描述查找的目标是“绿色沙发”,得到了模型回复<tool_call>get_object_list[0.2,0.3,0.5,0.3]</tool_call>。也就是黄色的框所标记的视锥体投影的区域。图中即为米塔第一视角(这里米塔扭了头使得黄线焦点对不上)和玩家我们的第一视角截图
2026年06月28日 08点06分 7
level 13
惠更斯X 楼主
那么,在这个视锥体内部都查找到了哪些物体呢?得到的答案是有五个,分别是WallMain(客厅的墙)距离2.7389米,CornerSofa(角落沙发)距离6.9418米,RoomMain(主方间)距离3.2352米,Plant 6(植物6)距离7.2412米,Books2(书2)距离2.6002。这里模型很轻松的就可以选择CornerSofa这一项。
2026年06月28日 08点06分 8
level 13
惠更斯X 楼主
有了目标物体,我们就可以更好的进行下一步了。但有一点那就是为了游戏优化,游戏中物体的碰撞体和真实形状往往是不一致的,以米塔房间的床为例,图中蓝色的长方体才是床的碰撞体。如果要强行坐在那里,米塔会悬浮在半空中。
2026年06月28日 08点06分 9
level 13
惠更斯X 楼主
对于这个问题,GPT给出的解决方案是两个,一是把坐下来的目标设置为目标物体高度的百分之四十,而是直接预制每一个物体的高度。但显而易见,这两种方式对于不同物体的兼容性都是非常差的。为此,我尝试询问Gemini 3.1 pro,谷歌手握全球最大搜索引擎,可以用于训练的世界知识是最多的,当然也是最有可能给出更好的解决方案方法的。谷歌给出的答案是深度图重建法
2026年06月28日 08点06分 10
level 13
惠更斯X 楼主
什么是深度图重建法?顾名思义,我们将使用AB包加载一个自定义shader在目标物体的上方最高的20厘米处拍下一张256*256的截图,这张截图的内容只有一样那就是每一个位置距离摄像机的高度。这张演示图片由GPT生成,虽然细节方面可能存在小问题,但确实是这个实现方式。
2026年06月28日 08点06分 11
level 13
惠更斯X 楼主
把这个方案搬到游戏中是什么样子呢?如图所示,基本上可以正确的贴合物体表面的曲线,凹凸等等。图一看起来似乎有几条缝,实则不然;里面有的是和床的表面高度完全重合了导致一直在闪烁,有的则是在床的下方非常接近的位置,通过游戏自带的自由视角可以看的非常清晰。
2026年06月28日 08点06分 12
level 13
惠更斯X 楼主
有了可以贴合物体表面的曲线面,下一步对于“坐下来”这个功能,需要确认的就是哪里可以坐,哪里不适合坐。一个可以坐下来的地方必然是可以走到附近,有足够的面积放下屁股,距离边缘不是太远。为此,我们在这些高度图生成的点附近进行测算,当附件存在物体导致无法抵达时标记无法达到点。青色=完整代理表面,绿色=可承重,紫色=适合边缘坐姿动作,红色=不可用,橙色=高度软警告。
2026年06月28日 08点06分 13
level 13
惠更斯X 楼主
同样,对于玩家我们自己的存在也不应该排除在外。如果我们站在一个位置,米塔不应该穿过我们的身体直奔那个位置,所以我们本身也是环境碰撞体判断的一部分。
2026年06月28日 08点06分 14
level 13
惠更斯X 楼主
但模型对于紫色区域的定位就不像粗糙完整物体定位那么准确了,所以我们必须实现一个简单的容错机制:如果没有点中紫色区域,那么就计算最近的紫色区域位置发送给模型,询问那个位置是否同意,同意就直接选中,不同意就继续上一步2D重选。如图是一次没有精确选中的案例,红色的×是模型选中的位置,绿色的圈是自动计算的最近的点。
2026年06月28日 08点06分 15
1 2 尾页