GameLogic 代表游戏的核心管理组件。它接收所有游戏内事件,并将其分发到适当的子系统,有效减少代码耦合。Transponder组件会自动检测到交互,并将玩家靠近事件传递给GameLogic组件。作为响应,UIFactory会实例化一个用于用户输入的UI面板。GameLogic。TripoClient组件(注意:必须事先提供有效的TripoAPIKey)。TripoAPI组装请求,发送请求,并开始定期轮询服务器以检查更新。一旦成功,玩家会从Tripo服务器收到一个用于生成模型的TaskID。然后,此TaskID用于请求骨骼生成。TripoAPI将模型的下载URL返回给TripoClient。TripoClient随后通过glTFfast插件加载并解析GLB格式模型。RuntimeHumanoidAvatarBuilder组件被挂载到模型上。此组件将GLB模型的骨骼映射到Unity的Humanoid Avatar系统,从而实现动画重定向。TripoClient在场景中实例化模型。此时,开发者可以使用现有的人形动画资源来驱动新生成的模型。GameLogic组件监听玩家的键盘输入,以在玩家和生成的模型之间动态切换控制。具体来说,它会调整摄像机优先级并重新分配ThirdPersonController的控制目标。Unity 版本:2022.3.55
源代码和场景路径: Assets-LowPoly Environment Pack - Demo - Demo1
创建新项目
导入所需资源包
请打开浏览器并访问 Unity Asset Store。搜索并下载以下免费包(也包含在提供的项目文件中):
添加到“My Resources”,并在后续弹出的窗口中点击“Open in Unity”并下载。
下载每个包后,前往 Unity > Assets(位于 Unity 菜单顶部)> Import Package > Custom Package,然后逐个导入。在每个提示中点击“Import”。
一些导入的材质可能显示为粉红色(表示着色器问题)。要进行转换:
选项1:通过Git安装(需要本地Git环境)
选项2:从Tripo官网下载,其中也包含glTFast插件。
设置自定义环境:
导航到:Assets > StarterAsset > ThirdPersonController > Prefabs
将以下三个预制体拖到Hierarchy面板中:
上述设置使用Unity提供的第三人称控制器脚本。此时,点击Unity工具栏中的播放按钮,您可以使用WASD键控制角色的移动。角色和摄像机现在应该会相应地移动和调整!
当玩家靠近特定对象时,应出现一个UI输入面板。当玩家离开时,面板应消失。
Transponder,并用 Cursor 打开脚本。请生成一个名为 Transponder 的 Unity C# 脚本,当带有“player”标签的 GameObject 进入碰撞器时触发 OnPlayerEnter,当玩家退出时触发 OnPlayerExit。
在场景中右键单击 > Create Empty,将其重命名为 GameLogicManager(作为逻辑容器)。
GameManager 的新脚本,它将处理场景的核心逻辑。我们引用 Transponder 组件,然后监听玩家进入或退出时的事件。参考提示词如下:
请生成一个名为 GameManager 的 Unity C# 脚本,监听 Transponder 实例的 OnPlayerEnter 和 OnPlayerExit 事件。在 OnPlayerEnter 时,使用 UIFactory 脚本实例化一个 UI 提示预制体。在 OnPlayerExit 时,销毁此 UI 预制体。
保存脚本后,将 GameManager 脚本拖到 GameManager 对象上,并将 Transponder 组件拖到 Transponder 字段中。这样就完成了对玩家进入和退出事件的监听。
在 Hierarchy 中,右键单击 > UI > Panel,创建一个新面板。
在面板下添加2个子组件:
使用 Game 视图作为预览,调整布局和定位。
完成后,将整个 Panel 对象拖到 Assets 文件夹中以创建预制体。
注意:如果您使用的是 TextMeshPro,请确保分配一个兼容中文的字体,例如 NotoSansSC SDF,以避免文本中出现方块字符。
InputDialog脚本:处理输入逻辑参考提示词:
ThirdPersonController)。将 InputDialog 组件挂载到 InputDialogPrefab。将相应的 Text 和 InputField 对象拖到组件的相应字段中(Dependencies)。
创建一个名为 UIFactory 的新 C# 脚本
参考提示词:
此组件作为中间件,将 UI 创建逻辑与游戏事件处理解耦。
仔细检查所有组件依赖是否已正确分配。
在 GameManager 对象中,分配:
UIFactory 组件。测试:点击 Unity 中的“Play”。
注意:我们的源文件为面板的生成位置设置了固定值。根据您选择的 Trigger 的 Transform 属性修改此值。或者,您可以将 UI 预制体的 Canvas > RenderMode 设置为 ScreenSpace - Overlay,这样 UI 将在屏幕空间数据中渲染,而不会进入世界空间。
目前,我们还无法实时向 Tripo 服务器提交提示。但是,用于提示提交、网络请求、模型生成、骨骼绑定、映射、适配器和动画重定向的必要代码已经准备就绪。这些脚本将在未来的更新中完全集成到 Tripo for Unity 插件中。(注意:请确保您的场景中存在 UIEvent 系统,否则 UI 将不会响应!)
在 Unity 项目面板(通常在左侧)中,从您的下载文件夹中找到源文件 TripoClient.cs、TripoAPI.cs 和 RuntimeHumanoidAvatarBuilder.cs。
以下是每个脚本的功能:
TripoClient.cs 和 TripoAPI.cs:处理提示提交和与 Tripo 服务器的网络通信。RuntimeHumanoidAvatarBuilder.cs:使用 GLTFast 插件将模型的骨骼映射到 Unity 的人形骨骼。TripoClient.cs 和 TripoAPI.cs 是 Tripo For Unity 插件的精简版本,但具有绑定功能。我们将在未来的版本中继续更新和简化此过程。
TripoClient.cs 和 TripoAPI.cs 拖到此新对象上以附加脚本。由于我们已经升级了玩家输入系统,我们需要更新 GameManager 中的提示传输逻辑。默认情况下,GameManager 脚本应该已经监听了 OnPlayerEnter 和 OnPlayerExit 事件。如果您正在使用 AI 生成的代码或跨多个组件链式调用逻辑,将之前生成的代码粘贴作为上下文会很有帮助。
我们提供的脚本已经定义了 GameManager 向 UIFactory 发出实例调用时的回调函数。当然,还有其他解决方案,但在本例中,可用于完成这部分逻辑的提示词如下所示。
更新的行为:在 GameManager 脚本中
UIFactory 实例化一个输入对话框(InputDialog 预制体)。一旦玩家完成提示词输入,它将通过 tripoClient.TextToModel(prompt, pos); 这样的调用示例传递给 TripoClient 脚本。修改相关脚本。
修改 GameManager.cs:
tripoClient 字段已在 GameManager 组件中正确分配。测试您的设置
现在您已准备好在 Unity 中生成自己的 AI 模型。祝您构建愉快!
模型生成后,下一步是将现有动画资源映射到模型的骨骼上。确保 RuntimeHumanoidAvatarBuilder 脚本已添加到您的项目中。此脚本处理从人形 GLB 骨骼到 Unity Avatar 的映射,并且 TripoClient 脚本将自动将其挂载到生成的模型上。
让我们首先整理项目的结构和依赖关系。游戏开始前,除了环境对象,自定义 GameObject 应处于以下状态。展开每个脚本组件并确保所有字段都已正确分配。如果您遇到任何问题,请与源文件进行比较,以检查组件分配是否不正确。
否则,在我们的演示中,模型是一个战斗机甲,所以它的 Transform > Scale 属性放大了十倍。这也适用于其 Controller 相关的属性。
选择 ModelContainer 组件,并依次添加以下组件(均由 Starter Assets 包提供):
在 Third Person Controller 组件中,将 Camera 字段设置为场景中的 MainCamera。
创建一个空的子组件,命名为 ModelCamera,并为其添加一个 CinemachineFreeLook 组件(您需要导入 Cinemachine 插件,该插件包含在 Starter Assets 包中)。
然后在 ModelContainer 下创建一个子组件,命名为 CameraRoot,并将其 Y 坐标调整为 5(模型腰部高度)。将 ModelCamera 的 Follow 和 LookAt 字段都分配给 CameraRoot。现在摄像机将跟随模型的移动。
此时,变形金刚应该播放其待机动画,但还无法控制。
这些组件:CharacterController、PlayerInput、ThirdPersonController、BasicRigidBody 和 StarterAssetsInputs,由 Unity 的 StarterAssets 提供并处理玩家输入。Animator 组件控制动画,RuntimeHumanoidAvatarBuilder 生成的 Avatar 也会自动分配给 Animator 的 Avatar 字段。
测试方法:
现在在运行时,变形金刚可以被控制。然后最后一步是实现控制切换逻辑。
更新 GameLogic 脚本的 Update 函数中的以下逻辑:
进入变形金刚时:
退出变形金刚时:
一旦上述逻辑完成,按下 F 键即可让玩家进入并控制变形金刚。再次按下 F 键可将控制权切换回玩家,同时变形金刚留在原地,但玩家精确地重新出现在变形金刚的位置。
至此,演示功能已全部完成。如果您想优化体验,可以:
恭喜!
感谢您的辛勤工作!您现在已经完成了整个演示。您可以利用自己的想法和资产自由生成和控制变形金刚模型。
需要帮助?
如果您在使用 TripoGame 时遇到任何困难或有任何反馈,请随时通过我们的官方邮箱联系我们!tripogame@vastai3d.com。我们很乐意倾听您的意见!
本教程旨在演示如何在实时游戏中利用 Tripo API。游戏设计本身仅供参考。希望能够主动解决开发者可能遇到的潜在问题。
目前,由于绑定要求,演示仅支持生成人形模型。如果由于 AI 生成的骨骼权重不稳定导致动画出现异常,请使用 Avatar Mask 遮挡有问题身体部位的动画。例如,源文件已在 NoArmPerson Controller 中禁用了手部动画。
为了加快生成速度,您可以使用 TripoV2/TripoV1Turbo。只需将 TripoAPI 脚本中的 model_version 数字“v2.5-20250123”替换为
FBX 和 GLB 模型具有不同的方向,这可能导致导入时出现依赖问题。如果需要导入 FBX,请使用 TriLib 等插件加载模型并相应地处理适配。
moving at the speed of creativity, achieving the depths of imagination.