Compare commits
38 Commits
9b23cb1d24
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| bc1cd45c38 | |||
| 2342b63fc2 | |||
| ac7a3abda9 | |||
| 3b851a195e | |||
| 39a34577da | |||
| fd40217ab8 | |||
| 85c2062318 | |||
| 5df451011c | |||
| 00ca7044c7 | |||
| a4fd3d3092 | |||
| 8ee21e5e80 | |||
| c4ea51b7e6 | |||
| caadd87d8f | |||
| 82fb409a9e | |||
| 0b060b0a74 | |||
| 91b390d577 | |||
| 6f8b599629 | |||
| 3d0b835593 | |||
| f86ffb511e | |||
| 7d0bfc123b | |||
| e63ae56021 | |||
| 4c6c8db1a8 | |||
| 86967bb256 | |||
| e982464cb3 | |||
| ac8c67ffc6 | |||
| 2f7d0fa2f8 | |||
| ca78e9c4cf | |||
| 042bebe9d7 | |||
| 17fbf9fe3f | |||
| 810c3a030c | |||
| cbdf941da5 | |||
| f74883701d | |||
| fe770daf77 | |||
| 3c69445d90 | |||
| f1932667aa | |||
| f2f4d0f382 | |||
| 2cf295f95d | |||
| c509223e08 |
@@ -2,3 +2,4 @@
|
||||
- [UE5.7 Python API](ue57-python-api.md) — 实测 API 差异(set_actor_rotation、new_level、CWD、import 路径、Rotator 关键字参数)
|
||||
- [V01 Bugfix](level-builder-bugfix-v01.md) — 8个白模关卡问题诊断修复(搭建指南6+解析器双重解析+构建器静默fallback)
|
||||
- [BSP Pivot Types](bsp-pivot-types.md) — 38种 BSP 资产实测锚点+自动补偿机制(角落/底边中心/底面中心)
|
||||
- [交互系统架构](interaction-effect-architecture.md) — v1.0 Effect/Action 数据驱动架构(Manager在GI、AInfo Tick、门派生、Prompt独立)
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
name: interaction-effect-architecture
|
||||
description: 交互系统 v1.0 Effect/Action 数据驱动架构决策记录
|
||||
metadata:
|
||||
type: project
|
||||
---
|
||||
|
||||
## 交互系统架构决策(v1.0 重构,2026-06-11)
|
||||
|
||||
### 核心架构:Effect/Action 数据驱动
|
||||
|
||||
交互物不关心"交互后发生什么",只配置 Effect(由 Action 组成)交给 EffectManager 执行。
|
||||
|
||||
**Why:** v0.1 用 switch(Type) 硬编码,新增交互类型需改代码。v1.0 配数据即可。
|
||||
|
||||
### Manager 归属
|
||||
- FInteractionManager / FEffectManager 是普通 C++ 类,不是 UObject
|
||||
- 由 ASystemDriver (AInfo) 持有,随 World 生灭
|
||||
- 不依赖 UE Subsystem 生命周期,显式控制创建顺序和 Tick 顺序
|
||||
- 所有 UObject 引用用 TWeakObjectPtr,回调用 TFunction
|
||||
- GameInstance 不持有任何交互系统对象,只有 UPersistenceSubsystem 跨 World
|
||||
|
||||
### 分层规则
|
||||
- 表现层只读 Manager 缓存(getter),不碰 Component
|
||||
- Manager 在选择变化时从 Component 读一次并缓存
|
||||
- 逻辑事件仅用于 "A 影响 B"(如 Consume → Persistence)
|
||||
|
||||
### 协调方式
|
||||
- Character 输入回调通过 ASystemDriver::Get(World) 访问两个 Manager
|
||||
- Driver::BeginPlay 中 TFunction 连线 EffectManager.OnEffectComplete → Manager.OnInteractionFinished
|
||||
- PromptComponent 通过 Driver 获取 Manager,只读缓存
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
name: subagent-permissions
|
||||
description: 后台子 Agent 需要预授权 Edit/Write 权限才能修改文件
|
||||
metadata:
|
||||
type: feedback
|
||||
---
|
||||
|
||||
后台子 Agent(game-dev 等)无法弹出交互式权限确认,缺少 Edit/Write 授权时会直接被拒绝文件修改。
|
||||
|
||||
**Why:** 首次启动 game-dev 后台 Agent 实现 P-011 时,因 settings.json 缺少 Edit/Write 权限,Agent 只读了技术文档但无法修改源码。
|
||||
|
||||
**How to apply:** 在 `.claude/settings.json` 的 `permissions.allow` 中添加 `"Edit"` 和 `"Write"`(2026-06-10 已添加)。如果后续新增需要后台运行的工具,同样需要预授权对应权限。
|
||||
@@ -2,3 +2,4 @@
|
||||
|
||||
- [Gitea Token Permission](gitea-token-permission.md) — reviewer token 仅可评论,标签操作需用 PM token
|
||||
- [P-006 Review](p006-review-note.md) — Issue #17 白模搭建审查通过记录
|
||||
- [P-009 Review](p009-review-note.md) — Issue #20 收集系统程序设计审查通过记录
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
name: p009-review-note
|
||||
description: Issue #20 P-009 收集系统程序设计审查通过记录
|
||||
metadata:
|
||||
type: project
|
||||
---
|
||||
|
||||
## P-009 收集系统程序设计审查 (2026-06-10)
|
||||
|
||||
- Issue: #20
|
||||
- 审查类型: 程序设计(质量门 2)
|
||||
- 产出文件: `docs/technical/收集系统-技术方案.md`
|
||||
- 结果: **通过**
|
||||
|
||||
### 审查要点
|
||||
- 技术方案文档路径实际为中文文件名 `收集系统-技术方案.md`(非 Issue 中标注的 `collection-system-tech.md`)
|
||||
- 执行案文件名也是中文:`收集系统-执行案.md`(非 `collection-system-execution.md`)
|
||||
- 6 个检查维度全部通过:执行案覆盖度、美术资源需求、架构清晰度、数据流、技术风险、工作量与拆分建议
|
||||
- 标签操作:移除了 gate:art-fail(30) 和 status:in-review(14),添加了 review:pass(33)
|
||||
@@ -243,6 +243,34 @@ GameConfig/ # 数值配置表
|
||||
|
||||
---
|
||||
|
||||
## Git 工作流(develop 分支模型)
|
||||
|
||||
项目使用 `develop` 长期开发分支。所有 agent 在 develop 上工作,迭代结束时由 PM 发起 PR 合并回 main。
|
||||
|
||||
### 开始工作
|
||||
```bash
|
||||
bash .claude/scripts/git-workflow.sh ready
|
||||
```
|
||||
|
||||
### 提交文档
|
||||
```bash
|
||||
bash .claude/scripts/git-workflow.sh commit docs <scope> "中文描述"
|
||||
```
|
||||
示例:`bash .claude/scripts/git-workflow.sh commit docs design "交互系统执行案"`
|
||||
|
||||
### 推送
|
||||
```bash
|
||||
bash .claude/scripts/git-workflow.sh push
|
||||
```
|
||||
|
||||
### 完成工作后
|
||||
1. 推送文档到 develop
|
||||
2. 通过 gitea-collab 在对应 Issue 下评论汇报进度
|
||||
3. 更新 Issue 标签为 `status:in-review`
|
||||
4. 启动 `game-reviewer` 子代理
|
||||
|
||||
---
|
||||
|
||||
## 审查交接
|
||||
|
||||
完成工作并发布 Issue 评论后,启动审查流程:
|
||||
|
||||
@@ -221,6 +221,42 @@ skills:
|
||||
|
||||
---
|
||||
|
||||
## Git 工作流(develop 分支模型)
|
||||
|
||||
项目使用 `develop` 长期开发分支。所有 agent 在 develop 上工作,迭代结束时由 PM 发起 PR 合并回 main。
|
||||
|
||||
### 开始开发
|
||||
```bash
|
||||
bash .claude/scripts/git-workflow.sh ready
|
||||
```
|
||||
确认在 develop 分支上且代码最新。
|
||||
|
||||
### 提交代码
|
||||
```bash
|
||||
bash .claude/scripts/git-workflow.sh commit <type> <scope> "中文描述"
|
||||
```
|
||||
- ⚠️ 只提交自己修改的文件,避免提交其他 agent 的 WIP
|
||||
- 蓝图(.uasset)和 C++ 分开提交
|
||||
- commit message subject ≤ 50 字符
|
||||
|
||||
### 推送
|
||||
```bash
|
||||
bash .claude/scripts/git-workflow.sh push
|
||||
```
|
||||
|
||||
### 完成开发后
|
||||
1. 推送代码到 develop
|
||||
2. 通过 gitea-collab 在对应 Issue 下评论汇报进度
|
||||
3. 更新 Issue 标签为 `status:in-review`
|
||||
4. 启动 `game-reviewer` 子代理
|
||||
|
||||
### 开发中发现 main 有更新
|
||||
```bash
|
||||
bash .claude/scripts/git-workflow.sh catchup
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 代码规范
|
||||
|
||||
- C++ 和蓝图遵循 UE5 编码规范
|
||||
|
||||
@@ -103,6 +103,36 @@ skills:
|
||||
|
||||
---
|
||||
|
||||
## Git 工作流(develop 分支模型)
|
||||
|
||||
项目使用 `develop` 长期开发分支,所有 agent 在 develop 上工作。
|
||||
|
||||
### PM 日常
|
||||
```bash
|
||||
# 会话开始时同步
|
||||
bash .claude/scripts/git-workflow.sh ready
|
||||
```
|
||||
|
||||
### 迭代完成 → 发布
|
||||
当所有 Issue 都 review:pass 且用户确认发布时:
|
||||
|
||||
```bash
|
||||
# 创建 develop → main 的 PR
|
||||
bash .claude/scripts/git-workflow.sh release "迭代名称"
|
||||
# 或手动:
|
||||
# node .claude/skills/gitea-pm/gitea.js --role pm pr create --base main --head develop --title "标题" --body "描述"
|
||||
```
|
||||
|
||||
通知用户在 Gitea 审查并合并 PR。
|
||||
|
||||
### 用户合并后同步
|
||||
```bash
|
||||
bash .claude/scripts/git-workflow.sh post-release
|
||||
```
|
||||
自动同步 main 并将 merge commit 同步回 develop。
|
||||
|
||||
---
|
||||
|
||||
## 决策框架
|
||||
|
||||
### 你可以自主决定:
|
||||
|
||||
@@ -6,23 +6,30 @@
|
||||
|
||||
## 分支策略
|
||||
|
||||
**轻量 Feature Branch** — 单人开发,`main` 永远可玩可编译。
|
||||
**develop 长期开发分支模型** — 单人开发 + 多 Agent 协作。
|
||||
|
||||
```
|
||||
main ─────────── 永远可玩可编译,受保护,禁止直接推送
|
||||
│
|
||||
│ PR (Gitea) ← 里程碑/迭代结束时,PM 发起
|
||||
│
|
||||
└── develop ──── 长期分支,所有 agent 在此工作
|
||||
```
|
||||
|
||||
| 分支 | 生命期 | 说明 |
|
||||
|---|---|---|
|
||||
| `main` | 永久 | 稳定版本,受保护 |
|
||||
| `develop` | 永久 | 日常开发分支,所有 agent 共用 |
|
||||
|
||||
**辅助分支(可选,用于实验):**
|
||||
|
||||
| 分支 | 前缀 | 生命期 | 说明 |
|
||||
|---|---|---|---|
|
||||
| 主线 | `main` | 永久 | 稳定版本,不直接在上面开发 |
|
||||
| 功能 | `feature/` | 合并后删 | 新系统、新功能 |
|
||||
| 修复 | `fix/` | 合并后删 | Bug 修复 |
|
||||
| 原型 | `prototype/` | 实验完即删 | 技术验证,随便写 |
|
||||
| 发布 | `release/` | 永久 | 从 main 切出,版本标记 |
|
||||
|
||||
**命名规则:** `<类型>/<小写连字符描述>`
|
||||
```
|
||||
feature/player-movement fix/camera-clipping release/v0.1
|
||||
```
|
||||
|
||||
**流程:**
|
||||
1. 从 `main` 拉分支 → 2. 开发并提交 → 3. 测试通过后合并回 `main` → 4. 删除分支
|
||||
1. 所有开发在 `develop` 上进行 → 2. 迭代完成时创建 PR → 3. 审查通过后合并回 `main`
|
||||
|
||||
---
|
||||
|
||||
@@ -100,3 +107,33 @@ Host gitea micecola.top
|
||||
**内网地址**(家里用):`ssh://sc-gitea@192.168.1.22:2223/starmen1265/ChildHood.git`
|
||||
|
||||
完整规范见 → [GIT-GUIDE.md](GIT-GUIDE.md)
|
||||
|
||||
---
|
||||
|
||||
## 自动化工作流
|
||||
|
||||
`git-workflow.sh` 脚本封装了常用 git 操作:
|
||||
|
||||
```bash
|
||||
# 开始工作:确保在 develop 上且最新
|
||||
bash .claude/scripts/git-workflow.sh ready
|
||||
|
||||
# 提交修改
|
||||
bash .claude/scripts/git-workflow.sh commit <type> <scope> "中文描述"
|
||||
|
||||
# 推送到远程
|
||||
bash .claude/scripts/git-workflow.sh push
|
||||
|
||||
# 查看状态
|
||||
bash .claude/scripts/git-workflow.sh status
|
||||
```
|
||||
|
||||
### PM 发布流程
|
||||
|
||||
```bash
|
||||
# 创建 develop → main PR
|
||||
bash .claude/scripts/git-workflow.sh release "迭代名称"
|
||||
|
||||
# 用户在 Gitea 合并后同步
|
||||
bash .claude/scripts/git-workflow.sh post-release
|
||||
```
|
||||
|
||||
+36
-60
@@ -7,81 +7,57 @@
|
||||
|
||||
## 一、分支策略
|
||||
|
||||
采用**轻量级 Feature Branch 模型**,避免企业级复杂流程,保持 `main` 分支随时可玩。
|
||||
采用 **develop 长期开发分支模型**,适合单人开发 + 多 AI Agent 协作场景。所有 agent 在 `develop` 上工作,迭代结束时通过 PR 合并回 `main`。
|
||||
|
||||
### 1.1 分支总览
|
||||
|
||||
```
|
||||
main ──────────────────────────────────────── 稳定主线
|
||||
│
|
||||
├── feature/player-movement ───→ 合并后删除
|
||||
├── feature/inventory-system ──→ 合并后删除
|
||||
├── fix/camera-clipping ───────→ 合并后删除
|
||||
├── prototype/procedural-gen ──→ 实验完即删
|
||||
└── release/v0.1 ──────────────→ 永久保留
|
||||
main ──────────── 永远可玩可编译,受保护,禁止直接推送
|
||||
│
|
||||
│ PR (Gitea) ← 里程碑/迭代结束时,PM 发起
|
||||
│
|
||||
└── develop ──── 长期分支,所有 agent 的日常工作分支
|
||||
│
|
||||
├── 程序1 提交代码
|
||||
├── 策划 提交文档
|
||||
├── 程序2 提交代码
|
||||
└── 迭代就绪 → PR develop→main
|
||||
```
|
||||
|
||||
### 1.2 分支类型
|
||||
|
||||
| 分支 | 前缀 | 用途 | 合并目标 | 生命周期 |
|
||||
|---|---|---|---|---|
|
||||
| 主线 | `main` | 稳定可玩版本,每次提交都能编译运行 | — | 永久 |
|
||||
| 功能 | `feature/` | 新系统、新功能开发 | `main` | 完成后删除 |
|
||||
| 修复 | `fix/` | Bug 修复 | `main` | 完成后删除 |
|
||||
| 原型 | `prototype/` | 技术验证、玩法实验 | 合并或丢弃 | 实验完即删 |
|
||||
| 发布 | `release/` | 版本发布标记,只从 `main` 切出 | — | 永久保留 |
|
||||
| 分支 | 用途 | 生命周期 |
|
||||
|---|---|---|
|
||||
| `main` | 稳定可玩版本,受保护 | 永久 |
|
||||
| `develop` | 日常开发,所有 agent 共用 | 永久 |
|
||||
| `prototype/` | 技术验证、玩法实验 | 实验完即删 |
|
||||
| `release/` | 版本发布标记,只从 main 切出 | 永久保留 |
|
||||
|
||||
### 1.3 命名规范
|
||||
|
||||
格式:`<类型>/<简短描述>`,全小写,用连字符分隔单词。
|
||||
### 1.3 工作流程
|
||||
|
||||
```
|
||||
# ✅ 好的命名
|
||||
feature/player-movement
|
||||
feature/inventory-system
|
||||
feature/dialogue-tree
|
||||
fix/camera-clipping-through-walls
|
||||
fix/enemy-ai-stuck-on-navmesh
|
||||
prototype/procedural-dungeon
|
||||
release/v0.1
|
||||
1. 开始工作(agent 自动执行)
|
||||
bash .claude/scripts/git-workflow.sh ready
|
||||
|
||||
# ❌ 不好的命名
|
||||
my-new-feature
|
||||
fix-bug
|
||||
test
|
||||
feature/AddPlayerMovement
|
||||
2. 开发并提交
|
||||
bash .claude/scripts/git-workflow.sh commit <type> <scope> "描述"
|
||||
|
||||
3. 推送到远程
|
||||
bash .claude/scripts/git-workflow.sh push
|
||||
|
||||
4. 迭代完成,PM 创建 PR
|
||||
bash .claude/scripts/git-workflow.sh release "迭代名称"
|
||||
|
||||
5. 用户在 Gitea 合并后同步
|
||||
bash .claude/scripts/git-workflow.sh post-release
|
||||
```
|
||||
|
||||
### 1.4 工作流程
|
||||
### 1.4 核心原则
|
||||
|
||||
```
|
||||
1. 开始新功能
|
||||
git checkout main
|
||||
git pull
|
||||
git checkout -b feature/xxx
|
||||
|
||||
2. 开发过程中(随时提交)
|
||||
git add .
|
||||
git commit -m "wip(xxx): 进度描述"
|
||||
|
||||
3. 功能完成,测试通过
|
||||
git checkout main
|
||||
git merge feature/xxx
|
||||
git branch -d feature/xxx # 删除已合并分支
|
||||
|
||||
4. 到达里程碑
|
||||
git checkout main
|
||||
git tag -a v0.1.0 -m "第一个可玩原型"
|
||||
git checkout -b release/v0.1
|
||||
git push origin release/v0.1
|
||||
```
|
||||
|
||||
### 1.5 核心原则
|
||||
|
||||
- **`main` 永远可玩**:坏了就留在 feature 分支继续改,不要合并进 main
|
||||
- **功能分支粒度**:一个分支做一件事,不要在一个分支里同时做多个系统
|
||||
- **原型不怕乱**:`prototype/` 分支随便写,验证完再决定合并还是丢弃
|
||||
- **定期清理**:已合并的 feature/fix 分支及时删除,避免分支堆积
|
||||
- **`main` 永远可玩**:通过 develop → main PR 合并,不直接推送
|
||||
- **develop 是工作台**:所有 agent 在 develop 上并行工作
|
||||
- **不同文件不冲突**:各 agent 修改不同文件,可真正并行
|
||||
- **同一文件需协调**:两个 agent 修改同一文件时需顺序执行
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
> 本模板供策划产出关卡执行案时使用。关卡执行案是场景设计案的"空间精度版本"——将氛围描述转化为带有坐标、尺寸和资产建议的结构化搭建指南,供程序在 UE5 编辑器中搭建白模。
|
||||
>
|
||||
> **注意**:交互物和收集品的放置**不在本模板范围内**,由交互系统/收集系统后续在白盒关卡上叠加。
|
||||
>
|
||||
> 文件命名:`关卡-v<XX>-<名称>-执行案.md`(如 `关卡-v01-城郊街区-执行案.md`)
|
||||
> 存放位置:`docs/design/<阶段>/`(与其他执行案同目录)
|
||||
|
||||
@@ -131,30 +133,18 @@
|
||||
| Zx-P02 | | | | | |
|
||||
| ... | | | | | |
|
||||
|
||||
#### 3.x.4 可交互物体标记
|
||||
#### 3.x.4 组合资产标记
|
||||
|
||||
<!-- 引用交互系统执行案中的交互物,此处只标注空间位置 -->
|
||||
<!-- 需要多个 Primitives 拼搭的物件(无直接 BSP 匹配)。如无此类物件可删除本节。 -->
|
||||
|
||||
| 交互编号 | 物件名称 | 交互类型 | 相对原点偏移 (ΔX,ΔY,ΔZ) | 触发半径 (cm) | 引用 |
|
||||
|---------|---------|---------|----------------------|-------------|------|
|
||||
| Zx-I01 | <!-- 如 旧冰箱 --> | <!-- 如 观察 --> | (200,400,10) | <!-- 如 150 --> | 交互系统-执行案 #n |
|
||||
| Zx-I02 | | | | | |
|
||||
| ... | | | | | |
|
||||
|
||||
> 交互类型参照交互系统执行案中的分类(观察/拾取/操作/对话等)。
|
||||
> "引用"列填写交互系统执行案中对应交互物的编号,确保跨文档一致。
|
||||
|
||||
#### 3.x.5 收集品标记
|
||||
|
||||
<!-- 引用收集系统执行案中的收集品,此处只标注空间位置 -->
|
||||
|
||||
| 收集编号 | 物品名称 | 稀有度 | 相对原点偏移 (ΔX,ΔY,ΔZ) | 引用 |
|
||||
|---------|---------|--------|----------------------|------|
|
||||
| Zx-C01 | <!-- 如 彩色弹珠 --> | <!-- 如 普通/稀有 --> | (500,200,0) | 收集系统-执行案 #n |
|
||||
| 编号 | 物件名称 | 期望尺寸 (约, cm) | 推荐拼搭方案 | 说明 |
|
||||
|------|---------|-----------------|-------------|------|
|
||||
| Zx-C01 | <!-- 如 旧收音机 --> | <!-- 如 20x15x12 --> | <!-- 如 Cube(0.2,0.15,0.12) + Cylinder天线 --> | <!-- 如 放在柜台上 --> |
|
||||
| Zx-C02 | | | | |
|
||||
| ... | | | | | |
|
||||
|
||||
> 稀有度影响拾取物的视觉效果标识(普通=白色光,稀有=金色光),具体表现由收集系统技术方案定义。
|
||||
> 组合资产将在搭建指南生成阶段展开为多个 Primitive Actor,并在组合资产清单中记录拼搭方案。
|
||||
> 用户确认后的组合资产方案将回馈到 asset-catalog 模板库,供后续关卡直接引用。
|
||||
|
||||
---
|
||||
|
||||
@@ -183,14 +173,6 @@
|
||||
| G-E02 | | | | | |
|
||||
| ... | | | | | |
|
||||
|
||||
### 4.3 收集品位置汇总
|
||||
|
||||
| # | 物品名称 | 所在区域 | 绝对坐标 (X,Y,Z) | 稀有度 | 引用 |
|
||||
|---|---------|---------|-----------------|--------|------|
|
||||
| 1 | | | | | 收集系统-执行案 #n |
|
||||
| 2 | | | | | |
|
||||
| ... | | | | | |
|
||||
|
||||
---
|
||||
|
||||
## 五、场景边界与遮挡
|
||||
@@ -225,10 +207,10 @@
|
||||
### 策划填写要点
|
||||
|
||||
1. **先确定区域坐标布局**(第二章),确保所有区域在总尺寸内不重叠、流线合理
|
||||
2. **逐区域填写**(第三章),按"结构体 → 布景 → 交互物 → 收集品"的顺序
|
||||
2. **逐区域填写**(第三章),按"结构体 → 布景 → 组合资产"的顺序
|
||||
3. **BSP 资产建议是方向性指引**:写资产类别名和组合方式即可(如 "Wall_400x300 × 2"),不需要写文件路径
|
||||
4. **尺寸以 cm 为单位**,对应 UE5 的 1 uu = 1 cm
|
||||
5. **交叉引用**:交互物和收集品必须引用对应系统执行案中的编号,保持跨文档一致
|
||||
5. **组合资产**:无法用单个 BSP 资产匹配的物件,在 3.x.4 中记录拼搭方案
|
||||
|
||||
### 不要填写的内容
|
||||
|
||||
@@ -237,6 +219,7 @@
|
||||
- ❌ Blueprint 类名
|
||||
- ❌ 精确的硬编码参数值(标注"建议值,可调"并附范围)
|
||||
- ❌ 代码或脚本
|
||||
- ❌ 交互物和收集品位置(由系统后续叠加)
|
||||
|
||||
### 与场景设计案的关系
|
||||
|
||||
|
||||
@@ -0,0 +1,326 @@
|
||||
#!/usr/bin/env bash
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# git-workflow.sh — ChildHood 项目 Git 工作流自动化
|
||||
#
|
||||
# 基于 develop 长期开发分支模型。
|
||||
# 所有 agent 在 develop 上工作,迭代结束时通过 PR 合并回 main。
|
||||
#
|
||||
# 用法: bash .claude/scripts/git-workflow.sh <command> [args...]
|
||||
#
|
||||
# 命令:
|
||||
# ready 确保在 develop 上且最新
|
||||
# commit <type> <scope> "<msg>" 格式化提交
|
||||
# push 推送 develop 到远程
|
||||
# submit <issue-number> 一键 commit + push(从 Issue 拉取信息)
|
||||
# release [milestone-name] 创建 develop→main 的 PR
|
||||
# post-release 合并后同步 main 和 develop
|
||||
# catchup 将 develop 合并最新 main 的内容
|
||||
# status 显示当前分支和状态
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# ─── 配置 ───
|
||||
DEVELOP_BRANCH="develop"
|
||||
MAIN_BRANCH="main"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
GITEA_PM_CLI="node $PROJECT_ROOT/.claude/skills/gitea-pm/gitea.js"
|
||||
GITEA_COLLAB_CLI="node $PROJECT_ROOT/.claude/skills/gitea-collab/gitea.js"
|
||||
|
||||
# ─── 颜色 ───
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
info() { echo -e "${BLUE}ℹ️ $*${NC}"; }
|
||||
ok() { echo -e "${GREEN}✅ $*${NC}"; }
|
||||
warn() { echo -e "${YELLOW}⚠️ $*${NC}"; }
|
||||
fail() { echo -e "${RED}❌ $*${NC}"; exit 1; }
|
||||
|
||||
# ─── 当前分支 ───
|
||||
current_branch() { git rev-parse --abbrev-ref HEAD; }
|
||||
|
||||
# ─── 检查是否有未提交的修改 ───
|
||||
has_changes() { [ -n "$(git status --porcelain)" ]; }
|
||||
|
||||
# ─── 检测 UE5 二进制文件 ───
|
||||
has_ue5_binaries() {
|
||||
git diff --cached --name-only 2>/dev/null | grep -qE '\.(uasset|umap)$'
|
||||
}
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# 命令实现
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
cmd_ready() {
|
||||
info "准备工作环境..."
|
||||
|
||||
local branch
|
||||
branch=$(current_branch)
|
||||
|
||||
# 如果不在 develop 上,切换过去
|
||||
if [ "$branch" != "$DEVELOP_BRANCH" ]; then
|
||||
if has_changes; then
|
||||
warn "有未提交的修改,暂存中..."
|
||||
git stash push --include-untracked -m "auto-stash-$(date +%s)"
|
||||
fi
|
||||
git checkout "$DEVELOP_BRANCH" 2>/dev/null || {
|
||||
# 本地没有 develop 分支,从 main 创建
|
||||
info "本地没有 $DEVELOP_BRANCH 分支,从 $MAIN_BRANCH 创建..."
|
||||
git checkout "$MAIN_BRANCH"
|
||||
git pull origin "$MAIN_BRANCH"
|
||||
git checkout -b "$DEVELOP_BRANCH"
|
||||
}
|
||||
fi
|
||||
|
||||
# 拉取最新 develop
|
||||
if git remote get-url origin &>/dev/null; then
|
||||
info "拉取远程 $DEVELOP_BRANCH..."
|
||||
git pull origin "$DEVELOP_BRANCH" 2>/dev/null || {
|
||||
# 远程没有 develop,首次推送
|
||||
warn "远程没有 $DEVELOP_BRANCH 分支,将首次推送"
|
||||
}
|
||||
fi
|
||||
|
||||
local commit_hash
|
||||
commit_hash=$(git rev-parse --short HEAD)
|
||||
ok "已在 $DEVELOP_BRANCH 分支上 (${commit_hash})"
|
||||
}
|
||||
|
||||
cmd_commit() {
|
||||
local type="${1:-}"
|
||||
local scope="${2:-}"
|
||||
local message="${3:-}"
|
||||
|
||||
if [ -z "$type" ] || [ -z "$scope" ] || [ -z "$message" ]; then
|
||||
fail "用法: git-workflow.sh commit <type> <scope> \"<message>\"\n 示例: git-workflow.sh commit feat player \"实现角色跳跃\""
|
||||
fi
|
||||
|
||||
# 校验分支
|
||||
if [ "$(current_branch)" != "$DEVELOP_BRANCH" ]; then
|
||||
warn "当前不在 $DEVELOP_BRANCH 分支上 (当前: $(current_branch))"
|
||||
read -rp "继续提交? [y/N] " confirm
|
||||
[[ "$confirm" != [yY] ]] && { info "已取消"; return; }
|
||||
fi
|
||||
|
||||
# 暂存所有修改
|
||||
if ! has_changes; then
|
||||
warn "没有检测到修改"
|
||||
return
|
||||
fi
|
||||
|
||||
git add -A
|
||||
|
||||
# UE5 二进制文件检测
|
||||
if has_ue5_binaries; then
|
||||
warn "检测到 .uasset/.umap 文件,请确保 commit message 清楚描述了变更内容"
|
||||
fi
|
||||
|
||||
# 格式化 commit message
|
||||
local commit_msg="${type}(${scope}): ${message}"
|
||||
|
||||
# subject ≤ 50 字符检查(仅消息部分)
|
||||
local msg_len=${#commit_msg}
|
||||
if [ "$msg_len" -gt 72 ]; then
|
||||
warn "提交消息较长 ($msg_len 字符),建议精简"
|
||||
fi
|
||||
|
||||
git commit -m "$commit_msg"
|
||||
ok "已提交: $commit_msg"
|
||||
}
|
||||
|
||||
cmd_push() {
|
||||
local branch
|
||||
branch=$(current_branch)
|
||||
|
||||
info "推送 $branch 到远程..."
|
||||
|
||||
# 设置上游分支(首次)
|
||||
if ! git rev-parse --abbrev-ref "@{upstream}" &>/dev/null; then
|
||||
git push -u origin "$branch"
|
||||
else
|
||||
git push origin "$branch"
|
||||
fi
|
||||
|
||||
ok "已推送 $branch 到远程"
|
||||
}
|
||||
|
||||
cmd_submit() {
|
||||
local issue_number="${1:-}"
|
||||
if [ -z "$issue_number" ]; then
|
||||
fail "用法: git-workflow.sh submit <issue-number>"
|
||||
fi
|
||||
|
||||
info "提交工作 (Issue #$issue_number)..."
|
||||
|
||||
# 从 Issue 拉取标题作为 commit 参考
|
||||
local issue_title=""
|
||||
issue_title=$($GITEA_COLLAB_CLI --role dev issue get "$issue_number" --json 2>/dev/null | grep -o '"title":"[^"]*"' | head -1 | sed 's/"title":"//;s/"//') || true
|
||||
|
||||
# 提交
|
||||
if has_changes; then
|
||||
if [ -n "$issue_title" ]; then
|
||||
info "Issue 标题: $issue_title"
|
||||
fi
|
||||
warn "有未提交的修改,请先运行: git-workflow.sh commit <type> <scope> \"<message>\""
|
||||
return
|
||||
fi
|
||||
|
||||
# 推送
|
||||
cmd_push
|
||||
|
||||
ok "工作已提交到 $DEVELOP_BRANCH (关联 Issue #$issue_number)"
|
||||
}
|
||||
|
||||
cmd_release() {
|
||||
local milestone_name="${1:-}"
|
||||
|
||||
info "准备发布 PR ($DEVELOP_BRANCH → $MAIN_BRANCH)..."
|
||||
|
||||
# 确保在 develop 上
|
||||
if [ "$(current_branch)" != "$DEVELOP_BRANCH" ]; then
|
||||
fail "请先切换到 $DEVELOP_BRANCH 分支"
|
||||
fi
|
||||
|
||||
# 确保本地最新
|
||||
git pull origin "$DEVELOP_BRANCH"
|
||||
|
||||
# 获取里程碑名称
|
||||
if [ -z "$milestone_name" ]; then
|
||||
# 尝试从当前里程碑获取
|
||||
milestone_name=$($GITEA_PM_CLI --role pm milestone list --state open --json 2>/dev/null | grep -o '"title":"[^"]*"' | head -1 | sed 's/"title":"//;s/"//') || "迭代发布"
|
||||
if [ -z "$milestone_name" ]; then
|
||||
milestone_name="迭代发布"
|
||||
fi
|
||||
fi
|
||||
|
||||
local pr_title="Merge develop → main: ${milestone_name}"
|
||||
|
||||
# 构造 PR body(汇总已关闭的 Issue)
|
||||
local pr_body="## 发布合并\n\n将 \`${DEVELOP_BRANCH}\` 分支的成果合并到 \`${MAIN_BRANCH}\`。\n\n### 里程碑\n${milestone_name}"
|
||||
|
||||
# 创建 PR
|
||||
info "创建 PR: $pr_title"
|
||||
local pr_result
|
||||
pr_result=$($GITEA_PM_CLI --role pm pr create \
|
||||
--base "$MAIN_BRANCH" \
|
||||
--head "$DEVELOP_BRANCH" \
|
||||
--title "$pr_title" \
|
||||
--body "$(echo -e "$pr_body")" \
|
||||
--json 2>&1) || {
|
||||
fail "创建 PR 失败: $pr_result"
|
||||
}
|
||||
|
||||
local pr_number
|
||||
pr_number=$(echo "$pr_result" | grep -o '"number":[0-9]*' | head -1 | sed 's/"number"://') || true
|
||||
|
||||
if [ -n "$pr_number" ]; then
|
||||
ok "PR #$pr_number 已创建: $pr_title"
|
||||
info "请在 Gitea 审查并合并: http://micecola.top:8418/starmen1265/ChildHood/pulls/$pr_number"
|
||||
else
|
||||
ok "PR 已创建,请查看 Gitea"
|
||||
fi
|
||||
}
|
||||
|
||||
cmd_post_release() {
|
||||
info "合并后同步..."
|
||||
|
||||
# 同步 main
|
||||
info "同步 $MAIN_BRANCH..."
|
||||
git checkout "$MAIN_BRANCH"
|
||||
git pull origin "$MAIN_BRANCH"
|
||||
ok "$MAIN_BRANCH 已更新"
|
||||
|
||||
# 切回 develop 并合并 main(保持 develop 包含 merge commit)
|
||||
info "同步 $DEVELOP_BRANCH..."
|
||||
git checkout "$DEVELOP_BRANCH"
|
||||
git merge "$MAIN_BRANCH" --no-edit
|
||||
git push origin "$DEVELOP_BRANCH"
|
||||
ok "$DEVELOP_BRANCH 已同步(包含 $MAIN_BRANCH 的 merge commit)"
|
||||
|
||||
local commit_hash
|
||||
commit_hash=$(git rev-parse --short HEAD)
|
||||
ok "完成,当前在 $DEVELOP_BRANCH (${commit_hash})"
|
||||
}
|
||||
|
||||
cmd_catchup() {
|
||||
info "将 develop 跟上最新的 $MAIN_BRANCH..."
|
||||
|
||||
if [ "$(current_branch)" != "$DEVELOP_BRANCH" ]; then
|
||||
fail "请先切换到 $DEVELOP_BRANCH 分支"
|
||||
fi
|
||||
|
||||
git fetch origin
|
||||
git merge "origin/$MAIN_BRANCH" --no-edit
|
||||
ok "$DEVELOP_BRANCH 已合并最新 $MAIN_BRANCH"
|
||||
}
|
||||
|
||||
cmd_status() {
|
||||
local branch
|
||||
branch=$(current_branch)
|
||||
local commit_hash
|
||||
commit_hash=$(git rev-parse --short HEAD)
|
||||
local changed
|
||||
changed=$(git status --porcelain | wc -l | tr -d ' ')
|
||||
|
||||
echo -e "${BLUE}═══ Git 工作流状态 ═══${NC}"
|
||||
echo " 当前分支: ${branch} (${commit_hash})"
|
||||
|
||||
if [ "$branch" = "$DEVELOP_BRANCH" ]; then
|
||||
echo -e " ${GREEN}✓ 在 develop 开发分支上${NC}"
|
||||
elif [ "$branch" = "$MAIN_BRANCH" ]; then
|
||||
echo -e " ${YELLOW}⚠ 在 main 分支上,请切换到 develop 开始工作${NC}"
|
||||
else
|
||||
echo -e " ${YELLOW}⚠ 在非标准分支上: $branch${NC}"
|
||||
fi
|
||||
|
||||
echo " 未提交修改: ${changed} 个文件"
|
||||
|
||||
if [ "$changed" -gt 0 ]; then
|
||||
echo ""
|
||||
git status --short
|
||||
fi
|
||||
|
||||
# 远程同步状态
|
||||
if git rev-parse "@{upstream}" &>/dev/null; then
|
||||
local ahead behind
|
||||
ahead=$(git rev-list --count "@{upstream}..HEAD" 2>/dev/null || echo "0")
|
||||
behind=$(git rev-list --count "HEAD..@{upstream}" 2>/dev/null || echo "0")
|
||||
echo " 远程状态: ahead ${ahead}, behind ${behind}"
|
||||
fi
|
||||
}
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
# 入口
|
||||
# ═══════════════════════════════════════════════════════════════
|
||||
|
||||
case "${1:-}" in
|
||||
ready) cmd_ready ;;
|
||||
commit) shift; cmd_commit "$@" ;;
|
||||
push) cmd_push ;;
|
||||
submit) shift; cmd_submit "$@" ;;
|
||||
release) shift; cmd_release "$@" ;;
|
||||
post-release) cmd_post_release ;;
|
||||
catchup) cmd_catchup ;;
|
||||
status) cmd_status ;;
|
||||
*)
|
||||
echo "git-workflow.sh — ChildHood 项目 Git 工作流自动化"
|
||||
echo ""
|
||||
echo "用法: bash .claude/scripts/git-workflow.sh <command> [args...]"
|
||||
echo ""
|
||||
echo "命令:"
|
||||
echo " ready 确保在 develop 上且最新"
|
||||
echo " commit <type> <scope> \"<msg>\" 格式化提交"
|
||||
echo " push 推送 develop 到远程"
|
||||
echo " submit <issue-number> 推送并关联 Issue"
|
||||
echo " release [milestone-name] 创建 develop→main PR"
|
||||
echo " post-release 合并后同步 main 和 develop"
|
||||
echo " catchup 将 develop 合并最新 main"
|
||||
echo " status 显示当前分支和状态"
|
||||
echo ""
|
||||
echo "工作流模型: develop 长期开发分支 → 迭代完成时 PR 合并回 main"
|
||||
;;
|
||||
esac
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash(dir:*)",
|
||||
"Bash(git:*)",
|
||||
"mcp__web-reader__webReader",
|
||||
"mcp__zread__get_repo_structure",
|
||||
"mcp__web-search-prime__webSearchPrime",
|
||||
"WebSearch",
|
||||
"Read:*",
|
||||
"Bash(\"C:/Program Files/Epic Games/UE_5.7/Engine/Build/BatchFiles/Build.bat\":*)"
|
||||
"Read",
|
||||
"Edit",
|
||||
"Write",
|
||||
"Bash"
|
||||
]
|
||||
},
|
||||
"hooks": {
|
||||
|
||||
@@ -148,7 +148,43 @@ node .claude/skills/gitea-collab/gitea.js --role reviewer issue labels <number>
|
||||
|
||||
---
|
||||
|
||||
## 7. 汇报模板
|
||||
## 7. PR 查询
|
||||
|
||||
非 PM 角色可以查看 PR 状态(创建和合并由 PM 负责):
|
||||
|
||||
```bash
|
||||
# 列出 PR
|
||||
node .claude/skills/gitea-collab/gitea.js --role <角色名> pr list
|
||||
|
||||
# 查看 PR 详情
|
||||
node .claude/skills/gitea-collab/gitea.js --role <角色名> pr get <number>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Git 工作流
|
||||
|
||||
所有 agent 在 `develop` 长期开发分支上工作:
|
||||
|
||||
```bash
|
||||
# 开始工作时:确保在 develop 上
|
||||
bash .claude/scripts/git-workflow.sh ready
|
||||
|
||||
# 提交代码/文档
|
||||
bash .claude/scripts/git-workflow.sh commit <type> <scope> "中文描述"
|
||||
|
||||
# 推送到远程
|
||||
bash .claude/scripts/git-workflow.sh push
|
||||
|
||||
# 查看当前状态
|
||||
bash .claude/scripts/git-workflow.sh status
|
||||
```
|
||||
|
||||
详见 `.claude/refs/GIT-GUIDE-LITE.md` 的"自动化工作流"章节。
|
||||
|
||||
---
|
||||
|
||||
## 9. 汇报模板
|
||||
|
||||
### 策划汇报
|
||||
|
||||
|
||||
@@ -222,6 +222,27 @@ class GiteaAPI {
|
||||
});
|
||||
}
|
||||
|
||||
// ====== Pull Requests ======
|
||||
|
||||
listPullRequests(params = {}) {
|
||||
return this.request('GET', '/pulls', null, { state: 'open', limit: 50, ...params });
|
||||
}
|
||||
|
||||
getPullRequest(number) {
|
||||
return this.request('GET', `/pulls/${number}`);
|
||||
}
|
||||
|
||||
createPullRequest(data) {
|
||||
return this.request('POST', '/pulls', data);
|
||||
}
|
||||
|
||||
mergePullRequest(number, data = {}) {
|
||||
return this.request('POST', `/pulls/${number}/merge`, {
|
||||
Do: data.style || 'merge',
|
||||
...data,
|
||||
});
|
||||
}
|
||||
|
||||
// ====== 辅助方法 ======
|
||||
|
||||
/** 通过名称查找标签,返回 ID(不存在则返回 null) */
|
||||
|
||||
@@ -520,6 +520,84 @@ cmd.pipeline = {
|
||||
},
|
||||
};
|
||||
|
||||
// ──────── pr ────────
|
||||
|
||||
cmd.pr = {
|
||||
async list(api, opts) {
|
||||
const params = {};
|
||||
if (opts.options.state) params.state = opts.options.state;
|
||||
if (opts.options.base) params.base = opts.options.base;
|
||||
if (opts.options.head) params.head = opts.options.head;
|
||||
|
||||
const prs = await api.listPullRequests(params);
|
||||
out(prs);
|
||||
if (!opts.options.json) {
|
||||
outText(`\n🔀 Pull Requests (${prs.length || 0})\n`);
|
||||
if (!prs || !prs.length) { outText(' (无)'); return; }
|
||||
table(
|
||||
['#', '标题', '状态', 'Base', 'Head', '合并'],
|
||||
prs.map(p => [
|
||||
p.number,
|
||||
truncate(p.title, 35),
|
||||
p.state,
|
||||
p.base?.ref || '—',
|
||||
p.head?.ref || '—',
|
||||
p.merged ? '✅' : '—',
|
||||
])
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
async get(api, opts) {
|
||||
const num = opts.rest[0];
|
||||
if (!num) { fail('用法: pr get <number>'); return; }
|
||||
const pr = await api.getPullRequest(num);
|
||||
out(pr);
|
||||
if (!opts.options.json) {
|
||||
outText(`\n🔀 PR #${pr.number}: ${pr.title}`);
|
||||
outText(` 状态: ${pr.state}`);
|
||||
outText(` ${pr.base?.ref} ← ${pr.head?.ref}`);
|
||||
outText(` 合并: ${pr.merged ? '✅ 已合并' : '❌ 未合并'}`);
|
||||
if (pr.body) {
|
||||
outText(`\n--- Body ---\n${pr.body.slice(0, 500)}${pr.body.length > 500 ? '…' : ''}`);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async create(api, opts) {
|
||||
const base = opts.options.base || 'main';
|
||||
const head = opts.options.head;
|
||||
const title = opts.options.title;
|
||||
const body = opts.options.body || '';
|
||||
|
||||
if (!head || !title) {
|
||||
fail('用法: pr create --head <分支> --title "标题" [--base main] [--body "描述"]');
|
||||
return;
|
||||
}
|
||||
|
||||
const pr = await api.createPullRequest({ base, head, title, body });
|
||||
out(pr);
|
||||
if (!opts.options.json) {
|
||||
ok(`PR #${pr.number} 已创建: ${pr.title}`);
|
||||
outText(` ${pr.html_url}`);
|
||||
}
|
||||
},
|
||||
|
||||
async merge(api, opts) {
|
||||
const num = opts.rest[0];
|
||||
if (!num) { fail('用法: pr merge <number> [--style merge|squash|rebase]'); return; }
|
||||
const style = opts.options.style || 'merge';
|
||||
|
||||
const pr = await api.getPullRequest(num);
|
||||
if (pr.merged) { fail(`PR #${num} 已合并,无需重复操作`); return; }
|
||||
if (pr.mergeable === false) { fail(`PR #${num} 存在冲突,无法自动合并。请先解决冲突。`); return; }
|
||||
|
||||
const result = await api.mergePullRequest(num, { style });
|
||||
out(result);
|
||||
if (!opts.options.json) ok(`PR #${num} 已合并 (${style})`);
|
||||
},
|
||||
};
|
||||
|
||||
// ──────── test ────────
|
||||
|
||||
cmd.test = {
|
||||
@@ -682,6 +760,11 @@ Gitea CLI — 项目管理工具
|
||||
pipeline status 查看当前流水线进度
|
||||
pipeline update <#> 更新 Pipeline 字段 --field <阶段|当前迭代> --value <值>
|
||||
|
||||
pr list 列出 Pull Requests [--state open|closed|all] [--base <分支>] [--head <分支>]
|
||||
pr get <#> 查看 PR 详情
|
||||
pr create 创建 PR --head <分支> --title "标题" [--base main] [--body "描述"]
|
||||
pr merge <#> 合并 PR [--style merge|squash|rebase]
|
||||
|
||||
test 验证所有 API 接口
|
||||
|
||||
角色自动映射:
|
||||
|
||||
@@ -218,7 +218,36 @@ Pipeline Tracker 是一个 Meta Issue,仅记录**无法从 Issue/Milestone 推
|
||||
|
||||
---
|
||||
|
||||
## 8. 标签体系
|
||||
## 8. PR 操作(发布合并)
|
||||
|
||||
迭代完成时,PM 负责创建 develop → main 的 PR:
|
||||
|
||||
```bash
|
||||
# 列出当前 PR
|
||||
node .claude/skills/gitea-pm/gitea.js --role pm pr list
|
||||
|
||||
# 创建发布 PR
|
||||
bash .claude/scripts/git-workflow.sh release "迭代名称"
|
||||
|
||||
# 或手动创建
|
||||
node .claude/skills/gitea-pm/gitea.js --role pm pr create \
|
||||
--base main --head develop \
|
||||
--title "Merge develop → main: 迭代名称" \
|
||||
--body "发布描述"
|
||||
|
||||
# 查看 PR 详情
|
||||
node .claude/skills/gitea-pm/gitea.js --role pm pr get <number>
|
||||
|
||||
# 合并 PR(用户审查确认后)
|
||||
node .claude/skills/gitea-pm/gitea.js --role pm pr merge <number> --style merge
|
||||
|
||||
# 合并后同步
|
||||
bash .claude/scripts/git-workflow.sh post-release
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. 标签体系
|
||||
|
||||
从 `gitea-config.json` 的 `labels` 字段定义。`label init` 命令从此配置创建标签。
|
||||
|
||||
|
||||
@@ -222,6 +222,27 @@ class GiteaAPI {
|
||||
});
|
||||
}
|
||||
|
||||
// ====== Pull Requests ======
|
||||
|
||||
listPullRequests(params = {}) {
|
||||
return this.request('GET', '/pulls', null, { state: 'open', limit: 50, ...params });
|
||||
}
|
||||
|
||||
getPullRequest(number) {
|
||||
return this.request('GET', `/pulls/${number}`);
|
||||
}
|
||||
|
||||
createPullRequest(data) {
|
||||
return this.request('POST', '/pulls', data);
|
||||
}
|
||||
|
||||
mergePullRequest(number, data = {}) {
|
||||
return this.request('POST', `/pulls/${number}/merge`, {
|
||||
Do: data.style || 'merge', // merge | squash | rebase
|
||||
...data,
|
||||
});
|
||||
}
|
||||
|
||||
// ====== 辅助方法 ======
|
||||
|
||||
/** 通过名称查找标签,返回 ID(不存在则返回 null) */
|
||||
|
||||
@@ -520,6 +520,87 @@ cmd.pipeline = {
|
||||
},
|
||||
};
|
||||
|
||||
// ──────── pr ────────
|
||||
|
||||
cmd.pr = {
|
||||
async list(api, opts) {
|
||||
const params = {};
|
||||
if (opts.options.state) params.state = opts.options.state;
|
||||
if (opts.options.base) params.base = opts.options.base;
|
||||
if (opts.options.head) params.head = opts.options.head;
|
||||
|
||||
const prs = await api.listPullRequests(params);
|
||||
out(prs);
|
||||
if (!opts.options.json) {
|
||||
outText(`\n🔀 Pull Requests (${prs.length || 0})\n`);
|
||||
if (!prs || !prs.length) { outText(' (无)'); return; }
|
||||
table(
|
||||
['#', '标题', '状态', 'Base', 'Head', '合并'],
|
||||
prs.map(p => [
|
||||
p.number,
|
||||
truncate(p.title, 35),
|
||||
p.state,
|
||||
p.base?.ref || '—',
|
||||
p.head?.ref || '—',
|
||||
p.merged ? '✅' : '—',
|
||||
])
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
async get(api, opts) {
|
||||
const num = opts.rest[0];
|
||||
if (!num) { fail('用法: pr get <number>'); return; }
|
||||
const pr = await api.getPullRequest(num);
|
||||
out(pr);
|
||||
if (!opts.options.json) {
|
||||
outText(`\n🔀 PR #${pr.number}: ${pr.title}`);
|
||||
outText(` 状态: ${pr.state}`);
|
||||
outText(` ${pr.base?.ref} ← ${pr.head?.ref}`);
|
||||
outText(` 合并: ${pr.merged ? '✅ 已合并' : '❌ 未合并'}`);
|
||||
outText(` 创建: ${pr.created_at?.slice(0, 10)}`);
|
||||
outText(` 更新: ${pr.updated_at?.slice(0, 10)}`);
|
||||
if (pr.body) {
|
||||
outText(`\n--- Body ---\n${pr.body.slice(0, 500)}${pr.body.length > 500 ? '…' : ''}`);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async create(api, opts) {
|
||||
const base = opts.options.base || 'main';
|
||||
const head = opts.options.head;
|
||||
const title = opts.options.title;
|
||||
const body = opts.options.body || '';
|
||||
|
||||
if (!head || !title) {
|
||||
fail('用法: pr create --head <分支> --title "标题" [--base main] [--body "描述"]');
|
||||
return;
|
||||
}
|
||||
|
||||
const pr = await api.createPullRequest({ base, head, title, body });
|
||||
out(pr);
|
||||
if (!opts.options.json) {
|
||||
ok(`PR #${pr.number} 已创建: ${pr.title}`);
|
||||
outText(` ${pr.html_url}`);
|
||||
}
|
||||
},
|
||||
|
||||
async merge(api, opts) {
|
||||
const num = opts.rest[0];
|
||||
if (!num) { fail('用法: pr merge <number> [--style merge|squash|rebase]'); return; }
|
||||
const style = opts.options.style || 'merge';
|
||||
|
||||
// 先检查 PR 状态
|
||||
const pr = await api.getPullRequest(num);
|
||||
if (pr.merged) { fail(`PR #${num} 已合并,无需重复操作`); return; }
|
||||
if (pr.mergeable === false) { fail(`PR #${num} 存在冲突,无法自动合并。请先解决冲突。`); return; }
|
||||
|
||||
const result = await api.mergePullRequest(num, { style });
|
||||
out(result);
|
||||
if (!opts.options.json) ok(`PR #${num} 已合并 (${style})`);
|
||||
},
|
||||
};
|
||||
|
||||
// ──────── test ────────
|
||||
|
||||
cmd.test = {
|
||||
@@ -682,6 +763,11 @@ Gitea CLI — 项目管理工具
|
||||
pipeline status 查看当前流水线进度
|
||||
pipeline update <#> 更新 Pipeline 字段 --field <阶段|当前迭代> --value <值>
|
||||
|
||||
pr list 列出 Pull Requests [--state open|closed|all] [--base <分支>] [--head <分支>]
|
||||
pr get <#> 查看 PR 详情
|
||||
pr create 创建 PR --head <分支> --title "标题" [--base main] [--body "描述"]
|
||||
pr merge <#> 合并 PR [--style merge|squash|rebase]
|
||||
|
||||
test 验证所有 API 接口
|
||||
|
||||
角色自动映射:
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -25,6 +25,7 @@ public class ChildHood : ModuleRules
|
||||
|
||||
PublicIncludePaths.AddRange(new string[] {
|
||||
"ChildHood",
|
||||
"ChildHood/Interaction",
|
||||
"ChildHood/Variant_Platforming",
|
||||
"ChildHood/Variant_Platforming/Animation",
|
||||
"ChildHood/Variant_Combat",
|
||||
|
||||
@@ -11,60 +11,79 @@
|
||||
#include "EnhancedInputSubsystems.h"
|
||||
#include "InputActionValue.h"
|
||||
#include "ChildHood.h"
|
||||
#include "Interaction/InteractionManager.h"
|
||||
|
||||
AChildHoodCharacter::AChildHoodCharacter()
|
||||
{
|
||||
// Set size for collision capsule
|
||||
GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f);
|
||||
|
||||
|
||||
// Don't rotate when the controller rotates. Let that just affect the camera.
|
||||
bUseControllerRotationPitch = false;
|
||||
bUseControllerRotationYaw = false;
|
||||
bUseControllerRotationRoll = false;
|
||||
|
||||
// Configure character movement
|
||||
GetCharacterMovement()->bOrientRotationToMovement = true;
|
||||
GetCharacterMovement()->RotationRate = FRotator(0.0f, 500.0f, 0.0f);
|
||||
|
||||
// Note: For faster iteration times these variables, and many more, can be tweaked in the Character Blueprint
|
||||
// instead of recompiling to adjust them
|
||||
GetCharacterMovement()->JumpZVelocity = 500.f;
|
||||
GetCharacterMovement()->AirControl = 0.35f;
|
||||
GetCharacterMovement()->MaxWalkSpeed = 500.f;
|
||||
GetCharacterMovement()->MinAnalogWalkSpeed = 20.f;
|
||||
GetCharacterMovement()->BrakingDecelerationWalking = 2000.f;
|
||||
GetCharacterMovement()->BrakingDecelerationFalling = 1500.0f;
|
||||
// Configure character movement — v0.1 player controller tech design parameters
|
||||
auto* CMC = GetCharacterMovement();
|
||||
CMC->bOrientRotationToMovement = true; // 角色朝移动方向旋转
|
||||
CMC->RotationRate = FRotator(0.0f, 720.0f, 0.0f); // 转向速度 720°/s(远快于鼠标 150°/s)
|
||||
CMC->MaxWalkSpeed = 450.0f; // 跑步速度 4.5 m/s
|
||||
CMC->MaxAcceleration = 2250.0f; // 起步加速 0.2s (450/0.2)
|
||||
CMC->BrakingDecelerationWalking = 1500.0f; // 停止减速 0.3s (450/0.3)
|
||||
CMC->BrakingDecelerationFalling = 1500.0f;
|
||||
CMC->MinAnalogWalkSpeed = 20.f;
|
||||
|
||||
// Create a camera boom (pulls in towards the player if there is a collision)
|
||||
CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
|
||||
CameraBoom->SetupAttachment(RootComponent);
|
||||
CameraBoom->TargetArmLength = 400.0f;
|
||||
CameraBoom->TargetArmLength = 350.0f; // 摄像机距离 3.5m
|
||||
CameraBoom->SocketOffset = FVector(0.f, 0.f, 80.f); // 摄像机高度 0.8m(头部上方)
|
||||
CameraBoom->bUsePawnControlRotation = true;
|
||||
|
||||
// 摄像机软跟随
|
||||
CameraBoom->bEnableCameraLag = true;
|
||||
CameraBoom->CameraLagSpeed = 6.0f;
|
||||
CameraBoom->bEnableCameraRotationLag = false;
|
||||
|
||||
// 摄像机碰撞处理
|
||||
CameraBoom->bDoCollisionTest = true;
|
||||
CameraBoom->ProbeSize = 12.0f;
|
||||
CameraBoom->ProbeChannel = ECC_Camera;
|
||||
|
||||
// Create a follow camera
|
||||
FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
|
||||
FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName);
|
||||
FollowCamera->bUsePawnControlRotation = false;
|
||||
|
||||
// Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character)
|
||||
// are set in the derived blueprint asset named ThirdPersonCharacter (to avoid direct content references in C++)
|
||||
// 创建交互管理器组件
|
||||
InteractionManager = CreateDefaultSubobject<UInteractionManager>(TEXT("InteractionManager"));
|
||||
}
|
||||
|
||||
void AChildHoodCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
|
||||
{
|
||||
// Set up action bindings
|
||||
if (UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(PlayerInputComponent)) {
|
||||
|
||||
// Jumping
|
||||
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Started, this, &ACharacter::Jump);
|
||||
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);
|
||||
|
||||
// Moving
|
||||
EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AChildHoodCharacter::Move);
|
||||
|
||||
// Looking (gamepad + mouse)
|
||||
EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AChildHoodCharacter::Look);
|
||||
EnhancedInputComponent->BindAction(MouseLookAction, ETriggerEvent::Triggered, this, &AChildHoodCharacter::Look);
|
||||
|
||||
// Looking
|
||||
EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AChildHoodCharacter::Look);
|
||||
// Interaction — delegates to InteractionManager
|
||||
if (InteractAction)
|
||||
{
|
||||
EnhancedInputComponent->BindAction(InteractAction, ETriggerEvent::Started, this, &AChildHoodCharacter::OnInteract);
|
||||
}
|
||||
if (CancelAction)
|
||||
{
|
||||
EnhancedInputComponent->BindAction(CancelAction, ETriggerEvent::Started, this, &AChildHoodCharacter::OnCancel);
|
||||
}
|
||||
if (SwitchInteractAction)
|
||||
{
|
||||
EnhancedInputComponent->BindAction(SwitchInteractAction, ETriggerEvent::Started, this, &AChildHoodCharacter::OnSwitchInteract);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -90,8 +109,42 @@ void AChildHoodCharacter::Look(const FInputActionValue& Value)
|
||||
DoLook(LookAxisVector.X, LookAxisVector.Y);
|
||||
}
|
||||
|
||||
void AChildHoodCharacter::OnInteract(const FInputActionValue& Value)
|
||||
{
|
||||
if (UInteractionManager* IM = GetInteractionManager())
|
||||
{
|
||||
// E 键双重功能:Free 发起交互,Active 结束交互
|
||||
IM->BeginInteract();
|
||||
IM->CancelInteract();
|
||||
}
|
||||
}
|
||||
|
||||
void AChildHoodCharacter::OnCancel(const FInputActionValue& Value)
|
||||
{
|
||||
if (UInteractionManager* IM = GetInteractionManager())
|
||||
{
|
||||
IM->CancelInteract();
|
||||
}
|
||||
}
|
||||
|
||||
void AChildHoodCharacter::OnSwitchInteract(const FInputActionValue& Value)
|
||||
{
|
||||
if (UInteractionManager* IM = GetInteractionManager())
|
||||
{
|
||||
float DirectionValue = Value.Get<float>();
|
||||
int32 Direction = (DirectionValue >= 0.f) ? 1 : -1;
|
||||
IM->SwitchTarget(Direction);
|
||||
}
|
||||
}
|
||||
|
||||
void AChildHoodCharacter::DoMove(float Right, float Forward)
|
||||
{
|
||||
// 交互中屏蔽移动
|
||||
if (bIsInteracting)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetController() != nullptr)
|
||||
{
|
||||
// find out which way is forward
|
||||
@@ -101,10 +154,10 @@ void AChildHoodCharacter::DoMove(float Right, float Forward)
|
||||
// get forward vector
|
||||
const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
|
||||
|
||||
// get right vector
|
||||
// get right vector
|
||||
const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
|
||||
|
||||
// add movement
|
||||
// add movement
|
||||
AddMovementInput(ForwardDirection, Forward);
|
||||
AddMovementInput(RightDirection, Right);
|
||||
}
|
||||
@@ -120,14 +173,27 @@ void AChildHoodCharacter::DoLook(float Yaw, float Pitch)
|
||||
}
|
||||
}
|
||||
|
||||
void AChildHoodCharacter::DoJumpStart()
|
||||
// ============================================================================
|
||||
// 交互系统方法
|
||||
// ============================================================================
|
||||
|
||||
UInteractionManager* AChildHoodCharacter::GetInteractionManager() const
|
||||
{
|
||||
// signal the character to jump
|
||||
Jump();
|
||||
return InteractionManager;
|
||||
}
|
||||
|
||||
void AChildHoodCharacter::DoJumpEnd()
|
||||
void AChildHoodCharacter::SetInteracting(bool bValue)
|
||||
{
|
||||
// signal the character to stop jumping
|
||||
StopJumping();
|
||||
bIsInteracting = bValue;
|
||||
}
|
||||
|
||||
bool AChildHoodCharacter::IsInteracting() const
|
||||
{
|
||||
return bIsInteracting;
|
||||
}
|
||||
|
||||
bool AChildHoodCharacter::IsRunning() const
|
||||
{
|
||||
return GetVelocity().SizeSquared() > 100.f // 速度 > 10 cm/s 阈值
|
||||
&& GetCharacterMovement()->IsMovingOnGround();
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
class USpringArmComponent;
|
||||
class UCameraComponent;
|
||||
class UInputAction;
|
||||
class UInteractionManager;
|
||||
struct FInputActionValue;
|
||||
|
||||
DECLARE_LOG_CATEGORY_EXTERN(LogTemplateCharacter, Log, All);
|
||||
@@ -30,12 +31,8 @@ class AChildHoodCharacter : public ACharacter
|
||||
/** Follow camera */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components", meta = (AllowPrivateAccess = "true"))
|
||||
UCameraComponent* FollowCamera;
|
||||
|
||||
protected:
|
||||
|
||||
/** Jump Input Action */
|
||||
UPROPERTY(EditAnywhere, Category="Input")
|
||||
UInputAction* JumpAction;
|
||||
protected:
|
||||
|
||||
/** Move Input Action */
|
||||
UPROPERTY(EditAnywhere, Category="Input")
|
||||
@@ -49,10 +46,45 @@ protected:
|
||||
UPROPERTY(EditAnywhere, Category="Input")
|
||||
UInputAction* MouseLookAction;
|
||||
|
||||
/** Interact Input Action (E key) — delegates to interaction system */
|
||||
UPROPERTY(EditAnywhere, Category="Input")
|
||||
UInputAction* InteractAction;
|
||||
|
||||
/** Cancel Input Action (ESC key) — delegates to interaction system */
|
||||
UPROPERTY(EditAnywhere, Category="Input")
|
||||
UInputAction* CancelAction;
|
||||
|
||||
/** Switch Interact Target Input Action (Tab / Mouse Wheel) — delegates to interaction system */
|
||||
UPROPERTY(EditAnywhere, Category="Input")
|
||||
UInputAction* SwitchInteractAction;
|
||||
|
||||
/** 交互管理器组件 */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Interaction", meta = (AllowPrivateAccess = "true"))
|
||||
UInteractionManager* InteractionManager;
|
||||
|
||||
/** Whether the character is currently in an interaction */
|
||||
bool bIsInteracting = false;
|
||||
|
||||
public:
|
||||
|
||||
/** Constructor */
|
||||
AChildHoodCharacter();
|
||||
AChildHoodCharacter();
|
||||
|
||||
/** 获取交互管理器组件 */
|
||||
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Interaction")
|
||||
UInteractionManager* GetInteractionManager() const;
|
||||
|
||||
/** Set interaction state — called by interaction system */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction")
|
||||
void SetInteracting(bool bValue);
|
||||
|
||||
/** Query: is the character currently interacting? */
|
||||
UFUNCTION(BlueprintCallable, BlueprintPure, Category="Interaction")
|
||||
bool IsInteracting() const;
|
||||
|
||||
/** Query: is the character currently running (moving on ground)? */
|
||||
UFUNCTION(BlueprintCallable, BlueprintPure, Category="Interaction")
|
||||
bool IsRunning() const;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -67,6 +99,15 @@ protected:
|
||||
/** Called for looking input */
|
||||
void Look(const FInputActionValue& Value);
|
||||
|
||||
/** Called for interact input (E) — delegates to InteractionManager */
|
||||
void OnInteract(const FInputActionValue& Value);
|
||||
|
||||
/** Called for cancel input (ESC) — delegates to InteractionManager */
|
||||
void OnCancel(const FInputActionValue& Value);
|
||||
|
||||
/** Called for switch interact target input (Tab/Wheel) — delegates to InteractionManager */
|
||||
void OnSwitchInteract(const FInputActionValue& Value);
|
||||
|
||||
public:
|
||||
|
||||
/** Handles move inputs from either controls or UI interfaces */
|
||||
@@ -77,14 +118,6 @@ public:
|
||||
UFUNCTION(BlueprintCallable, Category="Input")
|
||||
virtual void DoLook(float Yaw, float Pitch);
|
||||
|
||||
/** Handles jump pressed inputs from either controls or UI interfaces */
|
||||
UFUNCTION(BlueprintCallable, Category="Input")
|
||||
virtual void DoJumpStart();
|
||||
|
||||
/** Handles jump pressed inputs from either controls or UI interfaces */
|
||||
UFUNCTION(BlueprintCallable, Category="Input")
|
||||
virtual void DoJumpEnd();
|
||||
|
||||
public:
|
||||
|
||||
/** Returns CameraBoom subobject **/
|
||||
@@ -93,4 +126,3 @@ public:
|
||||
/** Returns FollowCamera subobject **/
|
||||
FORCEINLINE class UCameraComponent* GetFollowCamera() const { return FollowCamera; }
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
// ChildHood Project - 跨关卡持久数据持有者 实现
|
||||
|
||||
#include "ChildHoodGameInstance.h"
|
||||
|
||||
bool UChildHoodGameInstance::IsItemCollected(FName ItemId) const
|
||||
{
|
||||
return CollectedItemIDs.Contains(ItemId);
|
||||
}
|
||||
|
||||
void UChildHoodGameInstance::MarkItemCollected(FName ItemId)
|
||||
{
|
||||
CollectedItemIDs.Add(ItemId);
|
||||
}
|
||||
|
||||
bool UChildHoodGameInstance::IsDoorOpen(FName DoorId) const
|
||||
{
|
||||
const bool* Found = DoorStates.Find(DoorId);
|
||||
return Found ? *Found : false;
|
||||
}
|
||||
|
||||
void UChildHoodGameInstance::SetDoorOpen(FName DoorId, bool bIsOpen)
|
||||
{
|
||||
DoorStates.Add(DoorId, bIsOpen);
|
||||
}
|
||||
|
||||
void UChildHoodGameInstance::ResetAll()
|
||||
{
|
||||
CollectedItemIDs.Empty();
|
||||
DoorStates.Empty();
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
// ChildHood Project - 跨关卡持久数据持有者
|
||||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第12节(跨场景持久化设计)
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Engine/GameInstance.h"
|
||||
#include "ChildHoodGameInstance.generated.h"
|
||||
|
||||
/**
|
||||
* UChildHoodGameInstance
|
||||
*
|
||||
* 跨关卡持久数据持有者。UE5 的 OpenLevel() 会销毁整个旧 World(包括
|
||||
* Character 及其所有 UActorComponent),因此需要将持久数据与运行时行为分离。
|
||||
*
|
||||
* v0.1 为单场景原型,此 GameInstance 以空数据初始化。
|
||||
* 后续多场景版本只需在 Project Settings 中将 GameInstance Class 设为此类即可。
|
||||
*/
|
||||
UCLASS()
|
||||
class UChildHoodGameInstance : public UGameInstance
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
// === 物品消耗状态 ===
|
||||
|
||||
/** 查询指定物品是否已被收集(跨场景持久) */
|
||||
bool IsItemCollected(FName ItemId) const;
|
||||
|
||||
/** 标记指定物品为已收集(写入持久层) */
|
||||
void MarkItemCollected(FName ItemId);
|
||||
|
||||
// === 门状态 ===
|
||||
|
||||
/** 查询指定门的开关状态(跨场景持久),未记录的门默认为关闭 */
|
||||
bool IsDoorOpen(FName DoorId) const;
|
||||
|
||||
/** 设置指定门的开关状态(写入持久层) */
|
||||
void SetDoorOpen(FName DoorId, bool bIsOpen);
|
||||
|
||||
// === 重置 ===
|
||||
|
||||
/** 重置所有持久数据(新游戏时调用) */
|
||||
void ResetAll();
|
||||
|
||||
private:
|
||||
|
||||
/** 已收集物品ID集合 */
|
||||
UPROPERTY()
|
||||
TSet<FName> CollectedItemIDs;
|
||||
|
||||
/** 门开关状态映射(true=打开,false=关闭) */
|
||||
UPROPERTY()
|
||||
TMap<FName, bool> DoorStates;
|
||||
};
|
||||
@@ -13,6 +13,19 @@ void AChildHoodPlayerController::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
// C3: 设置摄像机俯仰角限制(垂直旋转 +45°/-30°)
|
||||
if (PlayerCameraManager)
|
||||
{
|
||||
PlayerCameraManager->ViewPitchMin = -30.0f; // 向下看最多 30°
|
||||
PlayerCameraManager->ViewPitchMax = 45.0f; // 向上看最多 45°
|
||||
}
|
||||
|
||||
// C1: 初始俯角 -15°(摄像机默认略向下看向角色)
|
||||
if (GetControlRotation().Pitch == 0.f)
|
||||
{
|
||||
SetControlRotation(FRotator(-15.0f, GetControlRotation().Yaw, GetControlRotation().Roll));
|
||||
}
|
||||
|
||||
// only spawn touch controls on local player controllers
|
||||
if (ShouldUseTouchControls() && IsLocalPlayerController())
|
||||
{
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
// ChildHood Project - 通用交互物 Actor 基类 实现
|
||||
|
||||
#include "Interaction/InteractableActor.h"
|
||||
#include "Interaction/InteractableComponent.h"
|
||||
|
||||
#include "Components/StaticMeshComponent.h"
|
||||
|
||||
// ============================================================================
|
||||
// 构造函数
|
||||
// ============================================================================
|
||||
|
||||
AInteractableActor::AInteractableActor()
|
||||
{
|
||||
PrimaryActorTick.bCanEverTick = false;
|
||||
|
||||
// 创建 Mesh 为根组件
|
||||
MeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComp"));
|
||||
RootComponent = MeshComp;
|
||||
MeshComp->SetCollisionProfileName(TEXT("BlockAll"));
|
||||
|
||||
// 创建交互组件(UActorComponent 不需要 SetupAttachment,数据驱动型组件)
|
||||
InteractableComp = CreateDefaultSubobject<UInteractableComponent>(TEXT("InteractableComp"));
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 交互回调
|
||||
// ============================================================================
|
||||
|
||||
void AInteractableActor::OnInteractStarted_Implementation(UInteractableComponent* Comp)
|
||||
{
|
||||
if (!Comp || !MeshComp) return;
|
||||
|
||||
const FInteractableData& Data = Comp->GetInteractableData();
|
||||
|
||||
// 门类型:根据开关状态旋转 Mesh
|
||||
if (Data.Type == EInteractType::Operate && Data.OperateSubType == EOperateSubType::Door)
|
||||
{
|
||||
FRotator CurrentRot = MeshComp->GetRelativeRotation();
|
||||
float TargetYaw = Comp->IsDoorOpen() ? 90.0f : 0.0f;
|
||||
MeshComp->SetRelativeRotation(FRotator(CurrentRot.Pitch, TargetYaw, CurrentRot.Roll));
|
||||
}
|
||||
}
|
||||
|
||||
void AInteractableActor::OnInteractEnded_Implementation(UInteractableComponent* Comp)
|
||||
{
|
||||
// 默认空实现,子类可覆盖
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
// ChildHood Project - 通用交互物 Actor 基类
|
||||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第3节(类设计)
|
||||
// 职责:持有 Mesh + InteractableComponent,提供可被子类覆盖的交互回调
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "InteractableActor.generated.h"
|
||||
|
||||
class UInteractableComponent;
|
||||
|
||||
/**
|
||||
* AInteractableActor
|
||||
*
|
||||
* 通用交互物 Actor 基类。场景中的每个交互物(冰箱、门、NPC 等)
|
||||
* 均为该类的实例或其子类的实例。
|
||||
*
|
||||
* 组成:
|
||||
* - UStaticMeshComponent* MeshComp(根组件,承载可视模型)
|
||||
* - UInteractableComponent* InteractableComp(交互逻辑与数据)
|
||||
*
|
||||
* 子类可覆盖 OnInteractStarted / OnInteractEnded 以实现类型特定行为,
|
||||
* 如门开关时的 Mesh 旋转、拾取物的消失效果等。
|
||||
*/
|
||||
UCLASS()
|
||||
class AInteractableActor : public AActor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
AInteractableActor();
|
||||
|
||||
// === 组件访问 ===
|
||||
|
||||
/** 获取静态网格组件 */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interact")
|
||||
UStaticMeshComponent* GetMeshComp() const { return MeshComp; }
|
||||
|
||||
/** 获取交互组件 */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interact")
|
||||
UInteractableComponent* GetInteractableComp() const { return InteractableComp; }
|
||||
|
||||
// === 可被子类覆盖的交互回调 ===
|
||||
|
||||
/**
|
||||
* 交互开始时调用(门开关切换、状态恢复时也调用)。
|
||||
* 默认实现:门类型根据开关状态对 Mesh 做 Yaw 旋转(开门+90度/关门0度)。
|
||||
*/
|
||||
UFUNCTION(BlueprintNativeEvent, Category = "Interact")
|
||||
void OnInteractStarted(UInteractableComponent* Comp);
|
||||
virtual void OnInteractStarted_Implementation(UInteractableComponent* Comp);
|
||||
|
||||
/** 交互结束时调用。默认为空实现,子类可覆盖。 */
|
||||
UFUNCTION(BlueprintNativeEvent, Category = "Interact")
|
||||
void OnInteractEnded(UInteractableComponent* Comp);
|
||||
virtual void OnInteractEnded_Implementation(UInteractableComponent* Comp);
|
||||
|
||||
protected:
|
||||
|
||||
/** 交互物的可视模型 */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
|
||||
UStaticMeshComponent* MeshComp;
|
||||
|
||||
/** 交互物的交互组件(数据 + 检测 + 状态) */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
|
||||
UInteractableComponent* InteractableComp;
|
||||
};
|
||||
@@ -0,0 +1,221 @@
|
||||
// ChildHood Project - 可交互物组件 实现
|
||||
|
||||
#include "Interaction/InteractableComponent.h"
|
||||
#include "Interaction/InteractableActor.h"
|
||||
#include "Interaction/InteractionManager.h"
|
||||
#include "ChildHoodGameInstance.h"
|
||||
#include "ChildHood.h"
|
||||
|
||||
#include "Components/SphereComponent.h"
|
||||
#include "Engine/World.h"
|
||||
#include "GameFramework/Character.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
|
||||
// ============================================================================
|
||||
// 构造函数
|
||||
// ============================================================================
|
||||
|
||||
UInteractableComponent::UInteractableComponent()
|
||||
{
|
||||
// 不需要 Tick,检测由碰撞事件驱动
|
||||
PrimaryComponentTick.bCanEverTick = false;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 生命周期
|
||||
// ============================================================================
|
||||
|
||||
void UInteractableComponent::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
AActor* Owner = GetOwner();
|
||||
if (!Owner)
|
||||
{
|
||||
UE_LOG(LogChildHood, Warning, TEXT("InteractableComponent: 无 Owner,跳过初始化"));
|
||||
return;
|
||||
}
|
||||
|
||||
// --- 创建检测球 ---
|
||||
DetectionSphere = NewObject<USphereComponent>(this, USphereComponent::StaticClass(), TEXT("DetectionSphere"));
|
||||
if (DetectionSphere)
|
||||
{
|
||||
DetectionSphere->SetupAttachment(Owner->GetRootComponent());
|
||||
DetectionSphere->RegisterComponent();
|
||||
DetectionSphere->SetSphereRadius(Data.TriggerRadius);
|
||||
DetectionSphere->SetCollisionProfileName(TEXT("OverlapAllDynamic"));
|
||||
// 关闭物理模拟,仅用于 Overlap 检测
|
||||
DetectionSphere->SetGenerateOverlapEvents(true);
|
||||
DetectionSphere->SetCanEverAffectNavigation(false);
|
||||
|
||||
// 绑定碰撞事件
|
||||
DetectionSphere->OnComponentBeginOverlap.AddDynamic(this, &UInteractableComponent::OnDetectionOverlapBegin);
|
||||
DetectionSphere->OnComponentEndOverlap.AddDynamic(this, &UInteractableComponent::OnDetectionOverlapEnd);
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(LogChildHood, Error, TEXT("InteractableComponent: DetectionSphere 创建失败"));
|
||||
}
|
||||
|
||||
// --- 恢复跨场景持久状态 ---
|
||||
if (UChildHoodGameInstance* GI = GetWorld()->GetGameInstance<UChildHoodGameInstance>())
|
||||
{
|
||||
RestorePersistentState(GI);
|
||||
}
|
||||
|
||||
UE_LOG(LogChildHood, Log, TEXT("InteractableComponent Init: %s (Type=%s, Radius=%f)"),
|
||||
Data.DisplayName.IsEmpty() ? TEXT("(unnamed)") : *Data.DisplayName,
|
||||
*UEnum::GetValueAsString(Data.Type),
|
||||
Data.TriggerRadius);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 提示文本
|
||||
// ============================================================================
|
||||
|
||||
FString UInteractableComponent::GetPromptText() const
|
||||
{
|
||||
FString Verb = Data.InteractVerb;
|
||||
// 门类型:根据当前开关状态选择动词
|
||||
if (Data.Type == EInteractType::Operate && Data.OperateSubType == EOperateSubType::Door)
|
||||
{
|
||||
Verb = bDoorIsOpen ? Data.InteractVerbAlt : Data.InteractVerb;
|
||||
}
|
||||
return FString::Printf(TEXT("[E] %s %s"), *Verb, *Data.DisplayName);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 消耗管理
|
||||
// ============================================================================
|
||||
|
||||
void UInteractableComponent::Consume()
|
||||
{
|
||||
bIsConsumed = true;
|
||||
|
||||
// 禁用检测球,不再触发 Overlap
|
||||
if (DetectionSphere)
|
||||
{
|
||||
DetectionSphere->SetCollisionEnabled(ECollisionEnabled::NoCollision);
|
||||
}
|
||||
|
||||
// 写入持久层
|
||||
if (UWorld* World = GetWorld())
|
||||
{
|
||||
if (UChildHoodGameInstance* GI = World->GetGameInstance<UChildHoodGameInstance>())
|
||||
{
|
||||
GI->MarkItemCollected(Data.ItemId);
|
||||
}
|
||||
}
|
||||
|
||||
UE_LOG(LogChildHood, Log, TEXT("InteractableComponent 已消耗: %s"), *Data.ItemId.ToString());
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 门状态管理
|
||||
// ============================================================================
|
||||
|
||||
void UInteractableComponent::ToggleDoor()
|
||||
{
|
||||
bDoorIsOpen = !bDoorIsOpen;
|
||||
UE_LOG(LogChildHood, Log, TEXT("InteractableComponent 门状态切换: %s → %s"),
|
||||
*Data.ItemId.ToString(),
|
||||
bDoorIsOpen ? TEXT("开") : TEXT("关"));
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 位置查询
|
||||
// ============================================================================
|
||||
|
||||
FVector UInteractableComponent::GetWorldLocation() const
|
||||
{
|
||||
AActor* Owner = GetOwner();
|
||||
return Owner ? Owner->GetActorLocation() : FVector::ZeroVector;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 跨场景持久状态恢复
|
||||
// ============================================================================
|
||||
|
||||
void UInteractableComponent::RestorePersistentState(UChildHoodGameInstance* GI)
|
||||
{
|
||||
if (!GI) return;
|
||||
|
||||
// oneShot 物品:已消耗 → 隐藏 + 禁用检测
|
||||
if (Data.bOneShot && GI->IsItemCollected(Data.ItemId))
|
||||
{
|
||||
bIsConsumed = true;
|
||||
if (DetectionSphere)
|
||||
{
|
||||
DetectionSphere->SetCollisionEnabled(ECollisionEnabled::NoCollision);
|
||||
}
|
||||
if (AInteractableActor* Owner = Cast<AInteractableActor>(GetOwner()))
|
||||
{
|
||||
Owner->SetActorHiddenInGame(true);
|
||||
}
|
||||
UE_LOG(LogChildHood, Log, TEXT("RestorePersistentState: 已消耗物品隐藏: %s"), *Data.ItemId.ToString());
|
||||
}
|
||||
|
||||
// 门:恢复开关状态
|
||||
if (Data.Type == EInteractType::Operate && Data.OperateSubType == EOperateSubType::Door)
|
||||
{
|
||||
bDoorIsOpen = GI->IsDoorOpen(Data.ItemId);
|
||||
// 通知 Actor 应用视觉状态(Mesh 旋转)
|
||||
if (AInteractableActor* Owner = Cast<AInteractableActor>(GetOwner()))
|
||||
{
|
||||
Owner->OnInteractStarted(this);
|
||||
}
|
||||
UE_LOG(LogChildHood, Log, TEXT("RestorePersistentState: 门状态恢复: %s → %s"),
|
||||
*Data.ItemId.ToString(),
|
||||
bDoorIsOpen ? TEXT("开") : TEXT("关"));
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 碰撞回调
|
||||
// ============================================================================
|
||||
|
||||
void UInteractableComponent::OnDetectionOverlapBegin(UPrimitiveComponent* OverlappedComponent,
|
||||
AActor* OtherActor,
|
||||
UPrimitiveComponent* OtherComp,
|
||||
int32 OtherBodyIndex,
|
||||
bool bFromSweep,
|
||||
const FHitResult& SweepResult)
|
||||
{
|
||||
if (!OtherActor) return;
|
||||
|
||||
// 只响应 Character(玩家)的进入
|
||||
ACharacter* Character = Cast<ACharacter>(OtherActor);
|
||||
if (!Character) return;
|
||||
|
||||
// 已消耗的交互物不再注册
|
||||
if (bIsConsumed) return;
|
||||
|
||||
UE_LOG(LogChildHood, Verbose, TEXT("检测到角色进入范围: %s ← %s"),
|
||||
*Data.DisplayName, *OtherActor->GetName());
|
||||
|
||||
// 获取角色的 InteractionManager 并注册自己
|
||||
if (UInteractionManager* IM = Character->FindComponentByClass<UInteractionManager>())
|
||||
{
|
||||
IM->RegisterInteractable(this);
|
||||
}
|
||||
}
|
||||
|
||||
void UInteractableComponent::OnDetectionOverlapEnd(UPrimitiveComponent* OverlappedComponent,
|
||||
AActor* OtherActor,
|
||||
UPrimitiveComponent* OtherComp,
|
||||
int32 OtherBodyIndex)
|
||||
{
|
||||
if (!OtherActor) return;
|
||||
|
||||
ACharacter* Character = Cast<ACharacter>(OtherActor);
|
||||
if (!Character) return;
|
||||
|
||||
UE_LOG(LogChildHood, Verbose, TEXT("角色离开范围: %s ← %s"),
|
||||
*Data.DisplayName, *OtherActor->GetName());
|
||||
|
||||
// 获取角色的 InteractionManager 并注销自己
|
||||
if (UInteractionManager* IM = Character->FindComponentByClass<UInteractionManager>())
|
||||
{
|
||||
IM->UnregisterInteractable(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
// ChildHood Project - 可交互物组件
|
||||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第3节(类设计)+ 第12节(跨场景持久化)
|
||||
// 职责:单个交互物配置数据、触发区域、运行时状态、跨场景持久状态恢复
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Components/ActorComponent.h"
|
||||
#include "InteractionTypes.h"
|
||||
#include "InteractableComponent.generated.h"
|
||||
|
||||
class UChildHoodGameInstance;
|
||||
class USphereComponent;
|
||||
|
||||
/**
|
||||
* UInteractableComponent
|
||||
*
|
||||
* 挂载在 AInteractableActor(或其子类)上的组件。
|
||||
* 持有该交互物的全部配置数据(FInteractableData)、运行时触发检测球、
|
||||
* 消耗/门状态管理,以及跨场景持久状态恢复。
|
||||
*/
|
||||
UCLASS(ClassGroup=(Interaction), meta=(BlueprintSpawnableComponent))
|
||||
class UInteractableComponent : public UActorComponent
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
UInteractableComponent();
|
||||
|
||||
// === 配置数据 ===
|
||||
|
||||
/** 该交互物的全部配置数据,编辑器中按实例独立配置 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact")
|
||||
FInteractableData Data;
|
||||
|
||||
// === 查询接口 ===
|
||||
|
||||
/** 获取配置数据引用(只读) */
|
||||
const FInteractableData& GetInteractableData() const { return Data; }
|
||||
|
||||
/**
|
||||
* 获取提示文本,格式:"[E] 动作词 名称"
|
||||
* 门类型根据当前开关状态选择动词
|
||||
*/
|
||||
FString GetPromptText() const;
|
||||
|
||||
/** 该交互物是否已被消耗(oneShot 模式) */
|
||||
bool IsConsumed() const { return bIsConsumed; }
|
||||
|
||||
/** 标记为已消耗,禁用检测球,写入持久层 */
|
||||
void Consume();
|
||||
|
||||
// === 门状态管理 ===
|
||||
|
||||
/** 切换门开关状态 */
|
||||
void ToggleDoor();
|
||||
|
||||
/** 门是否处于打开状态 */
|
||||
bool IsDoorOpen() const { return bDoorIsOpen; }
|
||||
|
||||
/** 获取交互物在世界空间的位置 */
|
||||
FVector GetWorldLocation() const;
|
||||
|
||||
/** 从 GameInstance 恢复跨场景持久状态(BeginPlay 中调用) */
|
||||
void RestorePersistentState(UChildHoodGameInstance* GI);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
private:
|
||||
|
||||
/** 运行时创建的检测球,用于触发玩家进入/离开交互范围 */
|
||||
UPROPERTY()
|
||||
USphereComponent* DetectionSphere;
|
||||
|
||||
/** oneShot 物品是否已被消耗 */
|
||||
bool bIsConsumed = false;
|
||||
|
||||
/** 门是否处于打开状态(仅 Operate+Door 类型使用) */
|
||||
bool bDoorIsOpen = false;
|
||||
|
||||
// === 碰撞回调 ===
|
||||
|
||||
/** 玩家进入检测范围 */
|
||||
UFUNCTION()
|
||||
void OnDetectionOverlapBegin(UPrimitiveComponent* OverlappedComponent,
|
||||
AActor* OtherActor,
|
||||
UPrimitiveComponent* OtherComp,
|
||||
int32 OtherBodyIndex,
|
||||
bool bFromSweep,
|
||||
const FHitResult& SweepResult);
|
||||
|
||||
/** 玩家离开检测范围 */
|
||||
UFUNCTION()
|
||||
void OnDetectionOverlapEnd(UPrimitiveComponent* OverlappedComponent,
|
||||
AActor* OtherActor,
|
||||
UPrimitiveComponent* OtherComp,
|
||||
int32 OtherBodyIndex);
|
||||
};
|
||||
@@ -0,0 +1,897 @@
|
||||
// ChildHood Project - 交互管理器核心组件 实现
|
||||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第6节(行为规则实现)
|
||||
|
||||
#include "Interaction/InteractionManager.h"
|
||||
#include "Interaction/InteractableComponent.h"
|
||||
#include "Interaction/InteractableActor.h"
|
||||
#include "Interaction/PushCameraActor.h"
|
||||
#include "Interaction/InteractionPromptWidget.h"
|
||||
#include "Interaction/NarrativeTextWidget.h"
|
||||
#include "ChildHoodCharacter.h"
|
||||
#include "ChildHoodGameInstance.h"
|
||||
#include "ChildHood.h"
|
||||
|
||||
#include "GameFramework/Character.h"
|
||||
#include "GameFramework/PlayerController.h"
|
||||
#include "GameFramework/SpringArmComponent.h"
|
||||
#include "Camera/CameraComponent.h"
|
||||
#include "Components/SphereComponent.h"
|
||||
#include "Engine/World.h"
|
||||
#include "TimerManager.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
#include "Blueprint/WidgetBlueprintLibrary.h"
|
||||
|
||||
// 定义交互系统日志类别
|
||||
DECLARE_LOG_CATEGORY_EXTERN(LogInteraction, Log, All);
|
||||
DEFINE_LOG_CATEGORY(LogInteraction);
|
||||
|
||||
// ============================================================================
|
||||
// 构造函数
|
||||
// ============================================================================
|
||||
|
||||
UInteractionManager::UInteractionManager()
|
||||
{
|
||||
// 默认关闭 Tick,首个交互物注册时开启
|
||||
PrimaryComponentTick.bCanEverTick = true;
|
||||
PrimaryComponentTick.bStartWithTickEnabled = false;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 生命周期
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
// Spawn 推镜用临时摄像机 Actor(使用专用的 APushCameraActor)
|
||||
// 随 Character 生命周期,不反复创建/销毁
|
||||
FActorSpawnParameters SpawnParams;
|
||||
SpawnParams.Owner = GetOwner();
|
||||
SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
|
||||
|
||||
APushCameraActor* SpawnedCamera = GetWorld()->SpawnActor<APushCameraActor>(APushCameraActor::StaticClass(), FVector::ZeroVector, FRotator::ZeroRotator, SpawnParams);
|
||||
PushCameraActor = SpawnedCamera;
|
||||
if (PushCameraActor)
|
||||
{
|
||||
PushCameraActor->SetActorHiddenInGame(true);
|
||||
}
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("InteractionManager: BeginPlay 完成, PushCameraActor=%s"),
|
||||
PushCameraActor ? *PushCameraActor->GetName() : TEXT("nullptr"));
|
||||
|
||||
// --- 创建 UI Widget ---
|
||||
APlayerController* PC = GetWorld()->GetFirstPlayerController();
|
||||
if (PC)
|
||||
{
|
||||
// 创建提示 UI
|
||||
if (PromptWidgetClass)
|
||||
{
|
||||
PromptWidget = CreateWidget<UInteractionPromptWidget>(PC, PromptWidgetClass);
|
||||
if (PromptWidget)
|
||||
{
|
||||
PromptWidget->AddToViewport(10);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(LogInteraction, Warning, TEXT("InteractionManager: PromptWidgetClass 未设置,提示 UI 不可用"));
|
||||
}
|
||||
|
||||
// 创建文本底框 UI
|
||||
if (NarrativeWidgetClass)
|
||||
{
|
||||
NarrativeWidget = CreateWidget<UNarrativeTextWidget>(PC, NarrativeWidgetClass);
|
||||
if (NarrativeWidget)
|
||||
{
|
||||
NarrativeWidget->AddToViewport(20);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(LogInteraction, Warning, TEXT("InteractionManager: NarrativeWidgetClass 未设置,文本 UI 不可用"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Tick 驱动
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
|
||||
{
|
||||
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
|
||||
|
||||
if (State == EInteractionState::Free)
|
||||
{
|
||||
// Free 状态下更新提示 UI 的屏幕位置
|
||||
if (PromptWidget && PromptWidget->IsVisible() &&
|
||||
NearbyInteractables.Num() > 0 && NearbyInteractables.IsValidIndex(SelectedIndex))
|
||||
{
|
||||
UInteractableComponent* Selected = NearbyInteractables[SelectedIndex];
|
||||
if (Selected)
|
||||
{
|
||||
UpdatePromptScreenPosition(Selected);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
switch (Phase)
|
||||
{
|
||||
case EInteractPhase::Enter:
|
||||
TickEnterPhase(DeltaTime);
|
||||
break;
|
||||
|
||||
case EInteractPhase::AnimLock:
|
||||
TickAnimLockPhase(DeltaTime);
|
||||
break;
|
||||
|
||||
case EInteractPhase::Active:
|
||||
// 等待玩家输入,无需 Tick 处理
|
||||
break;
|
||||
|
||||
case EInteractPhase::Exit:
|
||||
TickExitPhase(DeltaTime);
|
||||
break;
|
||||
|
||||
case EInteractPhase::None:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 公开方法
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::BeginInteract()
|
||||
{
|
||||
// 前置检查:必须 Free 状态
|
||||
if (State != EInteractionState::Free)
|
||||
{
|
||||
UE_LOG(LogInteraction, Verbose, TEXT("BeginInteract: 拒绝,当前状态不是 Free (State=%d)"),
|
||||
static_cast<int32>(State));
|
||||
return;
|
||||
}
|
||||
|
||||
// 前置检查:必须有选中的交互物
|
||||
if (NearbyInteractables.Num() == 0 || !NearbyInteractables.IsValidIndex(SelectedIndex))
|
||||
{
|
||||
UE_LOG(LogInteraction, Verbose, TEXT("BeginInteract: 拒绝,没有选中的交互物"));
|
||||
return;
|
||||
}
|
||||
|
||||
UInteractableComponent* Target = NearbyInteractables[SelectedIndex];
|
||||
|
||||
// 前置检查:交互物不能已被消耗
|
||||
if (!Target || Target->IsConsumed())
|
||||
{
|
||||
UE_LOG(LogInteraction, Verbose, TEXT("BeginInteract: 拒绝,交互物已被消耗"));
|
||||
return;
|
||||
}
|
||||
|
||||
// 进入交互
|
||||
State = EInteractionState::Interacting;
|
||||
Phase = EInteractPhase::Enter;
|
||||
CurrentInteractable = Target;
|
||||
|
||||
// 通知 Character 进入交互状态(屏蔽移动)
|
||||
AChildHoodCharacter* Char = Cast<AChildHoodCharacter>(GetOwner());
|
||||
if (Char)
|
||||
{
|
||||
Char->SetInteracting(true);
|
||||
}
|
||||
|
||||
// 隐藏提示 UI
|
||||
HidePrompt();
|
||||
|
||||
// 重置 Enter 阶段计时器
|
||||
TurnElapsed = 0.0f;
|
||||
WaitElapsed = 0.0f;
|
||||
bPushStarted = false;
|
||||
|
||||
const FInteractableData& Data = Target->GetInteractableData();
|
||||
UE_LOG(LogInteraction, Log, TEXT("BeginInteract: 开始交互 '%s' (Type=%d)"),
|
||||
*Data.DisplayName, static_cast<int32>(Data.Type));
|
||||
}
|
||||
|
||||
void UInteractionManager::CancelInteract()
|
||||
{
|
||||
// 前置检查:必须 Interacting 状态
|
||||
if (State != EInteractionState::Interacting)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// AnimLock 期间不可取消
|
||||
if (Phase == EInteractPhase::AnimLock)
|
||||
{
|
||||
UE_LOG(LogInteraction, Verbose, TEXT("CancelInteract: 拒绝,AnimLock 阶段不可取消"));
|
||||
return;
|
||||
}
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("CancelInteract: 取消/结束交互"));
|
||||
|
||||
// 隐藏叙事文本
|
||||
HideNarrativeText();
|
||||
|
||||
// 进入 Exit 阶段
|
||||
Phase = EInteractPhase::Exit;
|
||||
|
||||
// 相机回位
|
||||
const FInteractableData* Data = CurrentInteractable ? &CurrentInteractable->GetInteractableData() : nullptr;
|
||||
float ReturnDuration = (Data && Data->bUseCameraPush) ? Data->CameraReturnDuration : 0.3f;
|
||||
ReturnCamera(ReturnDuration);
|
||||
|
||||
// 清除可能残留的计时器
|
||||
GetWorld()->GetTimerManager().ClearTimer(AnimEventTimerHandle);
|
||||
GetWorld()->GetTimerManager().ClearTimer(AnimEndTimerHandle);
|
||||
|
||||
// 设置退出定时器,回位动画播完后回到 Free
|
||||
GetWorld()->GetTimerManager().SetTimer(ExitTimerHandle, this, &UInteractionManager::OnExitTimerComplete, ReturnDuration, false);
|
||||
}
|
||||
|
||||
void UInteractionManager::SwitchTarget(int32 Direction)
|
||||
{
|
||||
int32 Num = NearbyInteractables.Num();
|
||||
if (Num == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Interacting 状态下忽略切换
|
||||
if (State != EInteractionState::Free)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SelectedIndex = (SelectedIndex + Direction + Num) % Num;
|
||||
UpdatePromptUI();
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("SwitchTarget: 切换到 %d/%d"), SelectedIndex, Num);
|
||||
}
|
||||
|
||||
void UInteractionManager::RegisterInteractable(UInteractableComponent* Interactable)
|
||||
{
|
||||
if (!Interactable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 去重检查
|
||||
if (NearbyInteractables.Contains(Interactable))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NearbyInteractables.Add(Interactable);
|
||||
|
||||
// 按水平距离排序(DistSquared2D,避免 sqrt)
|
||||
AActor* Owner = GetOwner();
|
||||
if (Owner)
|
||||
{
|
||||
FVector OwnerLoc = Owner->GetActorLocation();
|
||||
NearbyInteractables.Sort([OwnerLoc](const UInteractableComponent& A, const UInteractableComponent& B)
|
||||
{
|
||||
float DistA = FVector::DistSquared2D(OwnerLoc, A.GetWorldLocation());
|
||||
float DistB = FVector::DistSquared2D(OwnerLoc, B.GetWorldLocation());
|
||||
return DistA < DistB;
|
||||
});
|
||||
}
|
||||
|
||||
UpdateSelection();
|
||||
UpdatePromptUI();
|
||||
|
||||
// 首个交互物注册时开启 Tick
|
||||
if (NearbyInteractables.Num() == 1)
|
||||
{
|
||||
SetComponentTickEnabled(true);
|
||||
}
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("RegisterInteractable: 注册 '%s', 列表大小=%d"),
|
||||
*Interactable->GetInteractableData().DisplayName, NearbyInteractables.Num());
|
||||
}
|
||||
|
||||
void UInteractionManager::UnregisterInteractable(UInteractableComponent* Interactable)
|
||||
{
|
||||
if (!Interactable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bool bRemoved = NearbyInteractables.Remove(Interactable) > 0;
|
||||
if (!bRemoved)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果移除的是当前正在交互的交互物,清空引用
|
||||
if (CurrentInteractable == Interactable)
|
||||
{
|
||||
CurrentInteractable = nullptr;
|
||||
}
|
||||
|
||||
if (NearbyInteractables.Num() > 0)
|
||||
{
|
||||
UpdateSelection();
|
||||
UpdatePromptUI();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 列表为空,隐藏提示
|
||||
HidePrompt();
|
||||
// 最后一个注销时关闭 Tick
|
||||
SetComponentTickEnabled(false);
|
||||
}
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("UnregisterInteractable: 注销 '%s', 列表大小=%d"),
|
||||
*Interactable->GetInteractableData().DisplayName, NearbyInteractables.Num());
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Enter 阶段 Tick
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::TickEnterPhase(float DeltaTime)
|
||||
{
|
||||
if (!CurrentInteractable)
|
||||
{
|
||||
UE_LOG(LogInteraction, Warning, TEXT("TickEnterPhase: CurrentInteractable 为空,强制取消"));
|
||||
CancelInteract();
|
||||
return;
|
||||
}
|
||||
|
||||
ACharacter* Char = Cast<ACharacter>(GetOwner());
|
||||
if (!Char)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const FInteractableData& Data = CurrentInteractable->GetInteractableData();
|
||||
|
||||
// --- 1. 转向插值 ---
|
||||
TurnElapsed += DeltaTime;
|
||||
|
||||
FVector CharLoc = Char->GetActorLocation();
|
||||
FVector TargetLoc = CurrentInteractable->GetWorldLocation();
|
||||
FVector DirToTarget = (TargetLoc - CharLoc);
|
||||
DirToTarget.Z = 0.0f;
|
||||
FRotator TargetRot = DirToTarget.Rotation();
|
||||
|
||||
// 使用 RInterpTo 进行平滑插值,InterpSpeed = 1/TurnDuration
|
||||
float InterpSpeed = (TurnDuration > 0.f) ? (1.f / TurnDuration) : 10.f;
|
||||
FRotator NewRot = FMath::RInterpTo(Char->GetActorRotation(), TargetRot, DeltaTime, InterpSpeed);
|
||||
Char->SetActorRotation(NewRot);
|
||||
|
||||
// --- 2. 推镜(一次性发起) ---
|
||||
if (Data.bUseCameraPush && !bPushStarted)
|
||||
{
|
||||
FVector PushPos = CalculatePushPosition(CurrentInteractable);
|
||||
PushCamera(PushPos, Data.CameraPushDuration);
|
||||
bPushStarted = true;
|
||||
}
|
||||
|
||||
// --- 3. 判断完成 ---
|
||||
bool bTurnComplete = TurnElapsed >= TurnDuration;
|
||||
bool bPushComplete = !Data.bUseCameraPush || bPushStarted;
|
||||
|
||||
if (bTurnComplete && bPushComplete)
|
||||
{
|
||||
// 推镜后需要额外等待 PushWaitDelay
|
||||
if (Data.bUseCameraPush && Data.PushWaitDelay > 0.f)
|
||||
{
|
||||
WaitElapsed += DeltaTime;
|
||||
if (WaitElapsed >= Data.PushWaitDelay)
|
||||
{
|
||||
TransitionFromEnter();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TransitionFromEnter();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// AnimLock 阶段 Tick(v0.1 由计时器驱动,此处为空)
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::TickAnimLockPhase(float DeltaTime)
|
||||
{
|
||||
// v0.1: AnimLock 由 AnimEventTimer 和 AnimEndTimer 驱动,无需 Tick 处理
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Exit 阶段 Tick(v0.1 由定时器驱动回 Free)
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::TickExitPhase(float DeltaTime)
|
||||
{
|
||||
// v0.1: Exit 阶段由 ExitTimerHandle 定时器驱动回到 Free
|
||||
// 此处可做相机回位进度检查等,简单方案留空
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Enter 完成后类型分发
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::TransitionFromEnter()
|
||||
{
|
||||
if (!CurrentInteractable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const FInteractableData& Data = CurrentInteractable->GetInteractableData();
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("TransitionFromEnter: 类型=%d 分发"), static_cast<int32>(Data.Type));
|
||||
|
||||
switch (Data.Type)
|
||||
{
|
||||
case EInteractType::Examine:
|
||||
Phase = EInteractPhase::Active;
|
||||
ShowNarrativeText(PickRandomNarrative(Data.NarrativeTexts));
|
||||
break;
|
||||
|
||||
case EInteractType::Pickup:
|
||||
Phase = EInteractPhase::AnimLock;
|
||||
EnterAnimLockPhase();
|
||||
break;
|
||||
|
||||
case EInteractType::Operate:
|
||||
if (Data.OperateSubType == EOperateSubType::Door)
|
||||
{
|
||||
Phase = EInteractPhase::AnimLock;
|
||||
EnterAnimLockPhase();
|
||||
}
|
||||
else if (Data.OperateSubType == EOperateSubType::Search)
|
||||
{
|
||||
Phase = EInteractPhase::AnimLock;
|
||||
EnterAnimLockPhase();
|
||||
}
|
||||
break;
|
||||
|
||||
case EInteractType::Talk:
|
||||
Phase = EInteractPhase::Active;
|
||||
ShowNarrativeText(PickRandomNarrative(Data.NarrativeTexts));
|
||||
break;
|
||||
|
||||
default:
|
||||
UE_LOG(LogInteraction, Warning, TEXT("TransitionFromEnter: 未知交互类型 %d"), static_cast<int32>(Data.Type));
|
||||
// 未知类型直接回 Free
|
||||
CancelInteract();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// AnimLock 阶段
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::EnterAnimLockPhase()
|
||||
{
|
||||
if (!CurrentInteractable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const FInteractableData& Data = CurrentInteractable->GetInteractableData();
|
||||
|
||||
// 计算总动画时长:有蒙太奇用蒙太奇长度,否则用配置的 AnimDuration
|
||||
float TotalAnimTime = Data.AnimDuration;
|
||||
if (Data.InteractMontage)
|
||||
{
|
||||
TotalAnimTime = Data.InteractMontage->GetPlayLength();
|
||||
if (TotalAnimTime <= 0.f)
|
||||
{
|
||||
TotalAnimTime = Data.AnimDuration;
|
||||
}
|
||||
|
||||
// 播放蒙太奇
|
||||
ACharacter* Char = Cast<ACharacter>(GetOwner());
|
||||
if (Char && Char->GetMesh())
|
||||
{
|
||||
Char->GetMesh()->GetAnimInstance()->Montage_Play(Data.InteractMontage);
|
||||
UE_LOG(LogInteraction, Log, TEXT("EnterAnimLockPhase: 播放蒙太奇, 时长=%.2f"), TotalAnimTime);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(LogInteraction, Log, TEXT("EnterAnimLockPhase: 无蒙太奇,使用计时器, 时长=%.2f"), TotalAnimTime);
|
||||
}
|
||||
|
||||
// 动画事件触发计时器(如 60% 时物品消失)
|
||||
float EventTime = TotalAnimTime * Data.AnimEventTimepoint;
|
||||
GetWorld()->GetTimerManager().SetTimer(AnimEventTimerHandle, this, &UInteractionManager::ExecuteAnimEvent, EventTime, false);
|
||||
|
||||
// 动画结束计时器
|
||||
GetWorld()->GetTimerManager().SetTimer(AnimEndTimerHandle, this, &UInteractionManager::OnAnimLockComplete, TotalAnimTime, false);
|
||||
|
||||
bAnimEventFired = false;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 动画事件触发回调
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::ExecuteAnimEvent()
|
||||
{
|
||||
if (!CurrentInteractable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bAnimEventFired = true;
|
||||
const FInteractableData& Data = CurrentInteractable->GetInteractableData();
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("ExecuteAnimEvent: 类型=%d, 名称='%s'"),
|
||||
static_cast<int32>(Data.Type), *Data.DisplayName);
|
||||
|
||||
switch (Data.Type)
|
||||
{
|
||||
case EInteractType::Pickup:
|
||||
{
|
||||
// 标记消耗 → 隐藏 Actor → 通知物品系统
|
||||
CurrentInteractable->Consume();
|
||||
|
||||
// 隐藏交互物 Actor
|
||||
if (AInteractableActor* OwnerActor = Cast<AInteractableActor>(CurrentInteractable->GetOwner()))
|
||||
{
|
||||
OwnerActor->SetActorHiddenInGame(true);
|
||||
}
|
||||
|
||||
// 广播拾取事件
|
||||
OnItemPickedUp.Broadcast(Data.ItemId, Data.DisplayName, FName(TEXT("杂物")));
|
||||
UE_LOG(LogInteraction, Log, TEXT("ExecuteAnimEvent: Pickup 拾取完成 '%s'"), *Data.DisplayName);
|
||||
}
|
||||
break;
|
||||
|
||||
case EInteractType::Operate:
|
||||
{
|
||||
if (Data.OperateSubType == EOperateSubType::Door)
|
||||
{
|
||||
// 切换门状态
|
||||
CurrentInteractable->ToggleDoor();
|
||||
|
||||
// 持久化门状态到 GameInstance
|
||||
if (UChildHoodGameInstance* GI = GetWorld()->GetGameInstance<UChildHoodGameInstance>())
|
||||
{
|
||||
GI->SetDoorOpen(Data.ItemId, CurrentInteractable->IsDoorOpen());
|
||||
}
|
||||
|
||||
// 通知 Actor 处理 Mesh 旋转等视觉反馈
|
||||
if (AInteractableActor* OwnerActor = Cast<AInteractableActor>(CurrentInteractable->GetOwner()))
|
||||
{
|
||||
OwnerActor->OnInteractStarted(CurrentInteractable);
|
||||
}
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("ExecuteAnimEvent: Door 门状态切换, 开=%s"),
|
||||
CurrentInteractable->IsDoorOpen() ? TEXT("true") : TEXT("false"));
|
||||
}
|
||||
// Search 类型的结果判定在 OnAnimLockComplete 中处理
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 动画结束回调
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::OnAnimLockComplete()
|
||||
{
|
||||
if (!CurrentInteractable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const FInteractableData& Data = CurrentInteractable->GetInteractableData();
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("OnAnimLockComplete: 类型=%d, 名称='%s'"),
|
||||
static_cast<int32>(Data.Type), *Data.DisplayName);
|
||||
|
||||
switch (Data.Type)
|
||||
{
|
||||
case EInteractType::Pickup:
|
||||
{
|
||||
// 直接回到 Free(无 Active/Exit,无相机/UI 需清理)
|
||||
AChildHoodCharacter* Char = Cast<AChildHoodCharacter>(GetOwner());
|
||||
if (Char)
|
||||
{
|
||||
Char->SetInteracting(false);
|
||||
}
|
||||
State = EInteractionState::Free;
|
||||
Phase = EInteractPhase::None;
|
||||
CurrentInteractable = nullptr;
|
||||
|
||||
// 从检测列表移除已消耗的交互物
|
||||
// Consume 已在 ExecuteAnimEvent 中调用,但 UnregisterInteractable 应由 DetectionSphere 禁用触发
|
||||
// 这里主动从列表移除,确保提示 UI 正确更新
|
||||
if (NearbyInteractables.Num() > 0)
|
||||
{
|
||||
UpdateSelection();
|
||||
UpdatePromptUI();
|
||||
}
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("OnAnimLockComplete: Pickup 完成,回到 Free"));
|
||||
}
|
||||
break;
|
||||
|
||||
case EInteractType::Operate:
|
||||
{
|
||||
if (Data.OperateSubType == EOperateSubType::Door)
|
||||
{
|
||||
// 直接回到 Free
|
||||
AChildHoodCharacter* Char = Cast<AChildHoodCharacter>(GetOwner());
|
||||
if (Char)
|
||||
{
|
||||
Char->SetInteracting(false);
|
||||
}
|
||||
State = EInteractionState::Free;
|
||||
Phase = EInteractPhase::None;
|
||||
CurrentInteractable = nullptr;
|
||||
|
||||
// 更新提示(门动词可能变化)
|
||||
UpdateSelection();
|
||||
UpdatePromptUI();
|
||||
|
||||
UE_LOG(LogInteraction, Log, TEXT("OnAnimLockComplete: Door 完成,回到 Free"));
|
||||
}
|
||||
else if (Data.OperateSubType == EOperateSubType::Search)
|
||||
{
|
||||
// 翻找结果判定:v0.1 必定有物品
|
||||
CurrentInteractable->Consume();
|
||||
OnItemFound.Broadcast(Data.ItemId, Data.DisplayName, FName(TEXT("杂物")));
|
||||
UE_LOG(LogInteraction, Log, TEXT("OnAnimLockComplete: Search 翻找完成,获得物品 '%s'"), *Data.DisplayName);
|
||||
|
||||
// 进入 Active 阶段等待玩家按 E/ESC 关闭
|
||||
Phase = EInteractPhase::Active;
|
||||
// 有物品时不显示文本底框(架构预留)
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// UI 方法(v0.1 用日志替代)
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::UpdateSelection()
|
||||
{
|
||||
// 排序后选中索引重置为 0(最近的)
|
||||
if (AActor* Owner = GetOwner())
|
||||
{
|
||||
FVector OwnerLoc = Owner->GetActorLocation();
|
||||
NearbyInteractables.Sort([OwnerLoc](const UInteractableComponent& A, const UInteractableComponent& B)
|
||||
{
|
||||
float DistA = FVector::DistSquared2D(OwnerLoc, A.GetWorldLocation());
|
||||
float DistB = FVector::DistSquared2D(OwnerLoc, B.GetWorldLocation());
|
||||
return DistA < DistB;
|
||||
});
|
||||
}
|
||||
SelectedIndex = 0;
|
||||
}
|
||||
|
||||
void UInteractionManager::UpdatePromptUI()
|
||||
{
|
||||
if (NearbyInteractables.Num() == 0 || !NearbyInteractables.IsValidIndex(SelectedIndex))
|
||||
{
|
||||
HidePrompt();
|
||||
return;
|
||||
}
|
||||
|
||||
UInteractableComponent* Selected = NearbyInteractables[SelectedIndex];
|
||||
if (!Selected)
|
||||
{
|
||||
HidePrompt();
|
||||
return;
|
||||
}
|
||||
|
||||
FString PromptText = Selected->GetPromptText();
|
||||
|
||||
if (PromptWidget)
|
||||
{
|
||||
PromptWidget->SetPromptText(PromptText);
|
||||
PromptWidget->Show();
|
||||
UpdatePromptScreenPosition(Selected);
|
||||
}
|
||||
|
||||
UE_LOG(LogInteraction, Verbose, TEXT("UpdatePromptUI: %s"), *PromptText);
|
||||
}
|
||||
|
||||
void UInteractionManager::HidePrompt()
|
||||
{
|
||||
if (PromptWidget)
|
||||
{
|
||||
PromptWidget->Hide();
|
||||
}
|
||||
}
|
||||
|
||||
void UInteractionManager::ShowNarrativeText(const FString& Text)
|
||||
{
|
||||
if (Text.IsEmpty())
|
||||
{
|
||||
UE_LOG(LogInteraction, Warning, TEXT("ShowNarrativeText: text is empty"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (NarrativeWidget)
|
||||
{
|
||||
NarrativeWidget->SetNarrativeText(Text);
|
||||
NarrativeWidget->Show();
|
||||
}
|
||||
|
||||
UE_LOG(LogInteraction, Verbose, TEXT("ShowNarrativeText: %s"), *Text);
|
||||
}
|
||||
|
||||
void UInteractionManager::HideNarrativeText()
|
||||
{
|
||||
if (NarrativeWidget)
|
||||
{
|
||||
NarrativeWidget->Hide();
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 摄像机控制
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::PushCamera(FVector Target, float Duration)
|
||||
{
|
||||
if (!PushCameraActor)
|
||||
{
|
||||
UE_LOG(LogInteraction, Warning, TEXT("PushCamera: PushCameraActor 为空"));
|
||||
return;
|
||||
}
|
||||
|
||||
// 计算朝向交互物的旋转
|
||||
FVector LookTarget = CurrentInteractable ? CurrentInteractable->GetWorldLocation() : Target;
|
||||
FRotator LookAtRot = (LookTarget - Target).Rotation();
|
||||
|
||||
PushCameraActor->SetActorHiddenInGame(false);
|
||||
PushCameraActor->SetActorLocationAndRotation(Target, LookAtRot);
|
||||
|
||||
// 切换 ViewTarget
|
||||
APlayerController* PC = GetWorld()->GetFirstPlayerController();
|
||||
if (PC)
|
||||
{
|
||||
PC->SetViewTargetWithBlend(PushCameraActor, Duration, VTBlend_EaseOut);
|
||||
UE_LOG(LogInteraction, Log, TEXT("PushCamera: 推镜到 %s, 时长=%.2f"), *Target.ToString(), Duration);
|
||||
}
|
||||
}
|
||||
|
||||
void UInteractionManager::ReturnCamera(float Duration)
|
||||
{
|
||||
AActor* Owner = GetOwner();
|
||||
if (!Owner)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
APlayerController* PC = GetWorld()->GetFirstPlayerController();
|
||||
if (PC)
|
||||
{
|
||||
// 回位到 Character
|
||||
PC->SetViewTargetWithBlend(Owner, Duration, VTBlend_EaseIn);
|
||||
UE_LOG(LogInteraction, Log, TEXT("ReturnCamera: 相机回位, 时长=%.2f"), Duration);
|
||||
}
|
||||
|
||||
// 隐藏推镜 Actor
|
||||
if (PushCameraActor)
|
||||
{
|
||||
PushCameraActor->SetActorHiddenInGame(true);
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 推镜位置计算
|
||||
// ============================================================================
|
||||
|
||||
FVector UInteractionManager::CalculatePushPosition(UInteractableComponent* Interactable)
|
||||
{
|
||||
if (!Interactable)
|
||||
{
|
||||
return FVector::ZeroVector;
|
||||
}
|
||||
|
||||
const FInteractableData& Data = Interactable->GetInteractableData();
|
||||
FVector InteractPos = Interactable->GetWorldLocation();
|
||||
FVector CharPos = GetOwner() ? GetOwner()->GetActorLocation() : FVector::ZeroVector;
|
||||
|
||||
FVector Dir = (InteractPos - CharPos);
|
||||
Dir.Z = 0.0f;
|
||||
Dir.Normalize();
|
||||
|
||||
// 交互物前方(面向角色的一侧),推镜距离偏移
|
||||
FVector TargetPos = InteractPos - Dir * Data.CameraPushDistance;
|
||||
// 高度略低于交互物中心(微仰视)
|
||||
TargetPos.Z = InteractPos.Z * 0.8f;
|
||||
|
||||
return TargetPos;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 叙事文本随机选取
|
||||
// ============================================================================
|
||||
|
||||
FString UInteractionManager::PickRandomNarrative(const TArray<FString>& Texts)
|
||||
{
|
||||
if (Texts.Num() == 0)
|
||||
{
|
||||
return TEXT("");
|
||||
}
|
||||
|
||||
if (Texts.Num() == 1)
|
||||
{
|
||||
LastNarrativeText = Texts[0];
|
||||
return Texts[0];
|
||||
}
|
||||
|
||||
FString Candidate;
|
||||
int32 Attempts = 0;
|
||||
do
|
||||
{
|
||||
Candidate = Texts[FMath::RandRange(0, Texts.Num() - 1)];
|
||||
Attempts++;
|
||||
} while (Candidate == LastNarrativeText && Attempts < 10);
|
||||
|
||||
LastNarrativeText = Candidate;
|
||||
return Candidate;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Exit 阶段定时器回调
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::OnExitTimerComplete()
|
||||
{
|
||||
UE_LOG(LogInteraction, Log, TEXT("OnExitTimerComplete: Exit 阶段结束,回到 Free"));
|
||||
|
||||
// 通知 Character 解除交互状态
|
||||
AChildHoodCharacter* Char = Cast<AChildHoodCharacter>(GetOwner());
|
||||
if (Char)
|
||||
{
|
||||
Char->SetInteracting(false);
|
||||
}
|
||||
|
||||
// 回到 Free 状态
|
||||
State = EInteractionState::Free;
|
||||
Phase = EInteractPhase::None;
|
||||
CurrentInteractable = nullptr;
|
||||
|
||||
// 如果仍在检测范围内,重新显示提示
|
||||
if (NearbyInteractables.Num() > 0)
|
||||
{
|
||||
UpdateSelection();
|
||||
UpdatePromptUI();
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 提示 UI 屏幕位置更新
|
||||
// ============================================================================
|
||||
|
||||
void UInteractionManager::UpdatePromptScreenPosition(UInteractableComponent* Interactable)
|
||||
{
|
||||
if (!Interactable || !PromptWidget) return;
|
||||
|
||||
APlayerController* PC = GetWorld()->GetFirstPlayerController();
|
||||
if (!PC) return;
|
||||
|
||||
// 交互物世界位置 + 高度偏移 → 屏幕坐标
|
||||
FVector WorldLoc = Interactable->GetWorldLocation() + FVector(0.f, 0.f, PromptHeightOffset);
|
||||
FVector2D ScreenPos;
|
||||
if (UGameplayStatics::ProjectWorldToScreen(PC, WorldLoc, ScreenPos, true))
|
||||
{
|
||||
PromptWidget->SetScreenPosition(ScreenPos);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
// ChildHood Project - 交互管理器核心组件
|
||||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第3节(类设计)+ 第6节(行为规则实现)
|
||||
// 职责:交互全流程状态机、检测选择、类型分发、摄像机/转向/UI 控制
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Components/ActorComponent.h"
|
||||
#include "InteractionTypes.h"
|
||||
#include "InteractionManager.generated.h"
|
||||
|
||||
class UInteractableComponent;
|
||||
class APushCameraActor;
|
||||
class AChildHoodCharacter;
|
||||
class UInteractionPromptWidget;
|
||||
class UNarrativeTextWidget;
|
||||
|
||||
/**
|
||||
* UInteractionManager
|
||||
*
|
||||
* 挂载在 AChildHoodCharacter 上的组件,负责交互全流程管理:
|
||||
* - 层级状态机驱动(Free / Interacting + 子阶段)
|
||||
* - 附近交互物检测列表排序与选中管理
|
||||
* - 四种交互类型分发(观察/拾取/操作/对话)
|
||||
* - 角色自动转向插值
|
||||
* - 摄像机推镜/回位控制
|
||||
* - UI 提示与文本显示控制(v0.1 先用日志)
|
||||
*/
|
||||
UCLASS(ClassGroup=(Interaction), meta=(BlueprintSpawnableComponent))
|
||||
class UInteractionManager : public UActorComponent
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
UInteractionManager();
|
||||
|
||||
// === 公开方法 ===
|
||||
|
||||
/** 发起交互(E键触发),前置检查通过后进入 Enter 阶段 */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction")
|
||||
void BeginInteract();
|
||||
|
||||
/** 取消/结束交互(ESC/E键在Active阶段触发),AnimLock期间不可取消 */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction")
|
||||
void CancelInteract();
|
||||
|
||||
/** 切换选中交互物(Tab/滚轮),Direction: +1下一个 / -1上一个 */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction")
|
||||
void SwitchTarget(int32 Direction);
|
||||
|
||||
/** 注册交互物到检测列表(由 InteractableComponent 的碰撞回调触发) */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction")
|
||||
void RegisterInteractable(UInteractableComponent* Interactable);
|
||||
|
||||
/** 从检测列表注销交互物(离开范围或消耗时触发) */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction")
|
||||
void UnregisterInteractable(UInteractableComponent* Interactable);
|
||||
|
||||
// === 委托 ===
|
||||
|
||||
/** 物品拾取事件 — 通知物品系统(Pickup 类型 ExecuteAnimEvent 中广播) */
|
||||
UPROPERTY(BlueprintAssignable, Category = "Interaction|Events")
|
||||
FMLocalItemEvent OnItemPickedUp;
|
||||
|
||||
/** 物品获得事件 — 通知收集系统(Search 类型 OnAnimLockComplete 中广播) */
|
||||
UPROPERTY(BlueprintAssignable, Category = "Interaction|Events")
|
||||
FMLocalItemEvent OnItemFound;
|
||||
|
||||
// === 可调参数 ===
|
||||
|
||||
/** 角色转向时长(秒) */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interaction|Tuning")
|
||||
float TurnDuration = 0.2f;
|
||||
|
||||
/** 提示 UI 淡入时长(秒) */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interaction|Tuning")
|
||||
float PromptFadeInDuration = 0.2f;
|
||||
|
||||
/** 提示 UI 淡出时长(秒) */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interaction|Tuning")
|
||||
float PromptFadeOutDuration = 0.2f;
|
||||
|
||||
protected:
|
||||
|
||||
virtual void BeginPlay() override;
|
||||
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
|
||||
|
||||
private:
|
||||
|
||||
// === 状态机 ===
|
||||
|
||||
/** 交互系统顶层状态 */
|
||||
EInteractionState State = EInteractionState::Free;
|
||||
|
||||
/** Interacting 子阶段 */
|
||||
EInteractPhase Phase = EInteractPhase::None;
|
||||
|
||||
// === 检测与选择 ===
|
||||
|
||||
/** 当前附近的交互物列表,按水平距离排序 */
|
||||
UPROPERTY()
|
||||
TArray<UInteractableComponent*> NearbyInteractables;
|
||||
|
||||
/** 当前选中的交互物索引 */
|
||||
int32 SelectedIndex = 0;
|
||||
|
||||
/** 当前正在交互的交互物(交互过程中锁定) */
|
||||
UPROPERTY()
|
||||
UInteractableComponent* CurrentInteractable = nullptr;
|
||||
|
||||
// === 摄像机控制 ===
|
||||
|
||||
/** 推镜用临时摄像机 Actor(BeginPlay 中 Spawn) */
|
||||
UPROPERTY()
|
||||
TObjectPtr<APushCameraActor> PushCameraActor;
|
||||
|
||||
/** 推镜是否已发起(Enter阶段一次性标志) */
|
||||
bool bPushStarted = false;
|
||||
|
||||
// === 计时器 ===
|
||||
|
||||
/** 转向已用时间 */
|
||||
float TurnElapsed = 0.0f;
|
||||
|
||||
/** 推镜后等待已用时间 */
|
||||
float WaitElapsed = 0.0f;
|
||||
|
||||
/** 动画事件计时器(如60%时物品消失) */
|
||||
FTimerHandle AnimEventTimerHandle;
|
||||
|
||||
/** 动画结束计时器 */
|
||||
FTimerHandle AnimEndTimerHandle;
|
||||
|
||||
/** 退出阶段回位计时器 */
|
||||
FTimerHandle ExitTimerHandle;
|
||||
|
||||
/** 动画事件是否已触发 */
|
||||
bool bAnimEventFired = false;
|
||||
|
||||
// === UI 配置 ===
|
||||
|
||||
/** 提示 UI 蓝图类(需在编辑器中指定为 WBP_InteractionPrompt) */
|
||||
UPROPERTY(EditAnywhere, Category = "Interaction|UI")
|
||||
TSubclassOf<UInteractionPromptWidget> PromptWidgetClass;
|
||||
|
||||
/** 文本底框 UI 蓝图类(需在编辑器中指定为 WBP_NarrativeText) */
|
||||
UPROPERTY(EditAnywhere, Category = "Interaction|UI")
|
||||
TSubclassOf<UNarrativeTextWidget> NarrativeWidgetClass;
|
||||
|
||||
/** 提示 UI 高度偏移(交互物上方的世界空间 Z 偏移,cm) */
|
||||
UPROPERTY(EditAnywhere, Category = "Interaction|UI")
|
||||
float PromptHeightOffset = 80.0f;
|
||||
|
||||
// === UI 实例 ===
|
||||
|
||||
/** 交互提示 Widget 实例 */
|
||||
UPROPERTY()
|
||||
TObjectPtr<UInteractionPromptWidget> PromptWidget;
|
||||
|
||||
/** 文本底框 Widget 实例 */
|
||||
UPROPERTY()
|
||||
TObjectPtr<UNarrativeTextWidget> NarrativeWidget;
|
||||
|
||||
// === 文本选择 ===
|
||||
|
||||
/** 上次显示的叙事文本(用于不重复选取) */
|
||||
FString LastNarrativeText;
|
||||
|
||||
// === 内部方法 ===
|
||||
|
||||
/** 更新选中交互物(排序后 SelectedIndex = 0) */
|
||||
void UpdateSelection();
|
||||
|
||||
/** 更新提示 UI 内容和位置 */
|
||||
void UpdatePromptUI();
|
||||
|
||||
/** 隐藏提示 UI */
|
||||
void HidePrompt();
|
||||
|
||||
/** 更新提示 UI 的屏幕空间位置(跟随交互物世界位置投影) */
|
||||
void UpdatePromptScreenPosition(UInteractableComponent* Interactable);
|
||||
|
||||
/** Enter 阶段 Tick:转向插值 + 推镜 + 等待 */
|
||||
void TickEnterPhase(float DeltaTime);
|
||||
|
||||
/** AnimLock 阶段 Tick(v0.1 由计时器驱动,此处可为空) */
|
||||
void TickAnimLockPhase(float DeltaTime);
|
||||
|
||||
/** Exit 阶段 Tick(v0.1 由定时器驱动回 Free) */
|
||||
void TickExitPhase(float DeltaTime);
|
||||
|
||||
/** Enter 阶段完成后,根据交互类型分发到下一阶段 */
|
||||
void TransitionFromEnter();
|
||||
|
||||
/** 进入 AnimLock 阶段:播放蒙太奇或启动计时器 */
|
||||
void EnterAnimLockPhase();
|
||||
|
||||
/** 动画事件触发点回调(如拾取物消失、门状态切换) */
|
||||
void ExecuteAnimEvent();
|
||||
|
||||
/** 动画结束回调 */
|
||||
void OnAnimLockComplete();
|
||||
|
||||
/** 显示叙事文本(v0.1 用日志输出) */
|
||||
void ShowNarrativeText(const FString& Text);
|
||||
|
||||
/** 隐藏叙事文本(v0.1 用日志输出) */
|
||||
void HideNarrativeText();
|
||||
|
||||
/** 推镜:移动 PushCameraActor 并切换 ViewTarget */
|
||||
void PushCamera(FVector Target, float Duration);
|
||||
|
||||
/** 相机回位:切换回 Character 的 FollowCamera */
|
||||
void ReturnCamera(float Duration);
|
||||
|
||||
/** 计算推镜目标位置 */
|
||||
FVector CalculatePushPosition(UInteractableComponent* Interactable);
|
||||
|
||||
/** 随机选取叙事文本,排除上次 */
|
||||
FString PickRandomNarrative(const TArray<FString>& Texts);
|
||||
|
||||
/** Exit 阶段定时器回调:回到 Free 状态 */
|
||||
void OnExitTimerComplete();
|
||||
};
|
||||
@@ -0,0 +1,67 @@
|
||||
// ChildHood Project - 交互提示 UI 基类 实现
|
||||
|
||||
#include "Interaction/InteractionPromptWidget.h"
|
||||
#include "Components/TextBlock.h"
|
||||
|
||||
void UInteractionPromptWidget::NativeOnInitialized()
|
||||
{
|
||||
Super::NativeOnInitialized();
|
||||
|
||||
// 初始隐藏
|
||||
SetVisibility(ESlateVisibility::Hidden);
|
||||
}
|
||||
|
||||
void UInteractionPromptWidget::SetPromptText(const FString& Text)
|
||||
{
|
||||
if (PromptTextBlock)
|
||||
{
|
||||
PromptTextBlock->SetText(FText::FromString(Text));
|
||||
}
|
||||
}
|
||||
|
||||
void UInteractionPromptWidget::SetScreenPosition(const FVector2D& Position)
|
||||
{
|
||||
// 使用 RenderTranslation 偏移 Widget 位置
|
||||
// 蓝图中 CanvasPanel 的 Anchors 应设置为屏幕左上角
|
||||
// 此处直接设置 RenderTranslation 来移动位置
|
||||
SetRenderTranslation(Position);
|
||||
}
|
||||
|
||||
void UInteractionPromptWidget::Show()
|
||||
{
|
||||
if (bIsVisible) return;
|
||||
bIsVisible = true;
|
||||
|
||||
SetVisibility(ESlateVisibility::HitTestInvisible);
|
||||
|
||||
if (FadeInAnim)
|
||||
{
|
||||
PlayAnimation(FadeInAnim, 0.0f, 1, EUMGSequencePlayMode::Forward, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void UInteractionPromptWidget::Hide()
|
||||
{
|
||||
if (!bIsVisible) return;
|
||||
|
||||
if (FadeOutAnim)
|
||||
{
|
||||
PlayAnimation(FadeOutAnim, 0.0f, 1, EUMGSequencePlayMode::Forward, 1.0f);
|
||||
// 动画播完后隐藏(简单方案:直接设置定时器隐藏)
|
||||
// 动画时长由蓝图中的 FadeOutAnim 决定,这里用固定 0.2s
|
||||
FTimerHandle TempHandle;
|
||||
if (UWorld* World = GetWorld())
|
||||
{
|
||||
World->GetTimerManager().SetTimer(TempHandle, [this]()
|
||||
{
|
||||
bIsVisible = false;
|
||||
SetVisibility(ESlateVisibility::Hidden);
|
||||
}, 0.2f, false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
bIsVisible = false;
|
||||
SetVisibility(ESlateVisibility::Hidden);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
// ChildHood Project - 交互提示 UI 基类
|
||||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第6节(提示UI显示/隐藏)
|
||||
// 职责:屏幕空间悬浮提示 "[E] 动作词 名称",跟随交互物位置
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Blueprint/UserWidget.h"
|
||||
#include "InteractionPromptWidget.generated.h"
|
||||
|
||||
class UTextBlock;
|
||||
|
||||
/**
|
||||
* UInteractionPromptWidget
|
||||
*
|
||||
* 交互提示 UI 的 C++ 基类。蓝图子类(WBP_InteractionPrompt)继承此类,
|
||||
* 在 UMG 编辑器中布局可视组件,并确保组件名与 BindWidget 匹配。
|
||||
*
|
||||
* 绑定要求:
|
||||
* - TextBlock 名为 "PromptTextBlock" — 显示提示文字
|
||||
* - WidgetAnimation 名为 "FadeInAnim" — 淡入动画(0.2s)
|
||||
* - WidgetAnimation 名为 "FadeOutAnim" — 淡出动画(0.2s)
|
||||
*/
|
||||
UCLASS(Abstract, Blueprintable)
|
||||
class UInteractionPromptWidget : public UUserWidget
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
/** 设置提示文字内容 */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction|Prompt")
|
||||
void SetPromptText(const FString& Text);
|
||||
|
||||
/** 设置屏幕空间位置(由 InteractionManager 每帧调用) */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction|Prompt")
|
||||
void SetScreenPosition(const FVector2D& Position);
|
||||
|
||||
/** 显示提示(播放淡入动画) */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction|Prompt")
|
||||
void Show();
|
||||
|
||||
/** 隐藏提示(播放淡出动画) */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction|Prompt")
|
||||
void Hide();
|
||||
|
||||
protected:
|
||||
|
||||
/** 提示文字 TextBlock,蓝图子类必须有一个同名 TextBlock */
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
UTextBlock* PromptTextBlock;
|
||||
|
||||
/** 淡入动画(0.2s Opacity 0→1),蓝图子类必须有同名 WidgetAnimation */
|
||||
UPROPERTY(meta = (BindWidgetAnim), Transient)
|
||||
UWidgetAnimation* FadeInAnim;
|
||||
|
||||
/** 淡出动画(0.2s Opacity 1→0),蓝图子类必须有同名 WidgetAnimation */
|
||||
UPROPERTY(meta = (BindWidgetAnim), Transient)
|
||||
UWidgetAnimation* FadeOutAnim;
|
||||
|
||||
/** 是否正在显示中 */
|
||||
bool bIsVisible = false;
|
||||
|
||||
virtual void NativeOnInitialized() override;
|
||||
};
|
||||
@@ -0,0 +1,178 @@
|
||||
// ChildHood Project - 交互系统数据类型定义
|
||||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第5节(核心数据结构)+ 第12节(跨场景持久化)
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "InteractionTypes.generated.h"
|
||||
|
||||
// ============================================================================
|
||||
// 枚举
|
||||
// ============================================================================
|
||||
|
||||
/** 交互类型 */
|
||||
UENUM(BlueprintType)
|
||||
enum class EInteractType : uint8
|
||||
{
|
||||
Examine UMETA(DisplayName = "观察"),
|
||||
Pickup UMETA(DisplayName = "拾取"),
|
||||
Operate UMETA(DisplayName = "操作"),
|
||||
Talk UMETA(DisplayName = "对话")
|
||||
};
|
||||
|
||||
/** 操作子类型(仅 Operate 类型有效) */
|
||||
UENUM(BlueprintType)
|
||||
enum class EOperateSubType : uint8
|
||||
{
|
||||
Door UMETA(DisplayName = "门(开关切换)"),
|
||||
Search UMETA(DisplayName = "翻找")
|
||||
};
|
||||
|
||||
/** 交互系统顶层状态 */
|
||||
UENUM(BlueprintType)
|
||||
enum class EInteractionState : uint8
|
||||
{
|
||||
Free UMETA(DisplayName = "自由状态"),
|
||||
Interacting UMETA(DisplayName = "交互中"),
|
||||
SubSystem UMETA(DisplayName = "子系统(v0.1预留)"),
|
||||
Cutscene UMETA(DisplayName = "过场(v0.1预留)")
|
||||
};
|
||||
|
||||
/** Interacting 子阶段 */
|
||||
UENUM(BlueprintType)
|
||||
enum class EInteractPhase : uint8
|
||||
{
|
||||
None UMETA(DisplayName = "无"),
|
||||
Enter UMETA(DisplayName = "进入(转向+推镜)"),
|
||||
AnimLock UMETA(DisplayName = "动画锁定"),
|
||||
Active UMETA(DisplayName = "活跃(等待输入)"),
|
||||
Exit UMETA(DisplayName = "退出(回位)")
|
||||
};
|
||||
|
||||
/** 交互结束后动作 */
|
||||
UENUM(BlueprintType)
|
||||
enum class EPostAction : uint8
|
||||
{
|
||||
Return UMETA(DisplayName = "回到Free"),
|
||||
Minigame UMETA(DisplayName = "小游戏(v0.1预留)"),
|
||||
Dialogue UMETA(DisplayName = "对话(v0.1预留)"),
|
||||
SceneChange UMETA(DisplayName = "场景切换(v0.1预留)")
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// 配置数据结构
|
||||
// ============================================================================
|
||||
|
||||
/** 可交互物配置数据 — 每个交互物实例独立配置 */
|
||||
USTRUCT(BlueprintType)
|
||||
struct FInteractableData
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
// === 基本信息 ===
|
||||
|
||||
/** 唯一ID(如 "fridge_home"),用于持久化存储和物品系统对接 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Basic")
|
||||
FName ItemId;
|
||||
|
||||
/** 显示名称(如 "旧冰箱"),用于提示UI */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Basic")
|
||||
FString DisplayName;
|
||||
|
||||
/** 交互类型 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Basic")
|
||||
EInteractType Type = EInteractType::Examine;
|
||||
|
||||
/** 操作子类型,仅 Type==Operate 时可见可编辑 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Basic",
|
||||
meta = (EditCondition = "Type == EInteractType::Operate", EditConditionHides))
|
||||
EOperateSubType OperateSubType = EOperateSubType::Door;
|
||||
|
||||
// === 触发 ===
|
||||
|
||||
/** 触发半径(cm),默认1.5m */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Trigger",
|
||||
meta = (ClampMin = "50.0", ClampMax = "500.0"))
|
||||
float TriggerRadius = 150.0f;
|
||||
|
||||
/** 是否一次性消耗(消耗后不再可交互) */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Trigger")
|
||||
bool bOneShot = false;
|
||||
|
||||
// === 提示文本 ===
|
||||
|
||||
/** 动作词(如 "查看"、"拾取"、"打开") */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Prompt")
|
||||
FString InteractVerb;
|
||||
|
||||
/** 备选动词(如 "关上"),门打开时使用,仅 Operate+Door 时可见 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Prompt",
|
||||
meta = (EditCondition = "Type == EInteractType::Operate && OperateSubType == EOperateSubType::Door"))
|
||||
FString InteractVerbAlt;
|
||||
|
||||
// === 叙事/对话文本 ===
|
||||
|
||||
/** 文本列表,随机选取,不重复上次 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Text")
|
||||
TArray<FString> NarrativeTexts;
|
||||
|
||||
// === 摄像机推镜 ===
|
||||
|
||||
/** 是否使用摄像机推镜 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Camera")
|
||||
bool bUseCameraPush = false;
|
||||
|
||||
/** 推镜距离(cm),仅 bUseCameraPush 时可编辑 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Camera",
|
||||
meta = (EditCondition = "bUseCameraPush", ClampMin = "10.0", ClampMax = "300.0"))
|
||||
float CameraPushDistance = 80.0f;
|
||||
|
||||
/** 推镜过渡时长(秒),仅 bUseCameraPush 时可编辑 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Camera",
|
||||
meta = (EditCondition = "bUseCameraPush", ClampMin = "0.1", ClampMax = "2.0"))
|
||||
float CameraPushDuration = 0.5f;
|
||||
|
||||
/** 相机回位时长(秒),仅 bUseCameraPush 时可编辑 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Camera",
|
||||
meta = (EditCondition = "bUseCameraPush", ClampMin = "0.1", ClampMax = "2.0"))
|
||||
float CameraReturnDuration = 0.3f;
|
||||
|
||||
/** 推镜完成后到文本显示的等待时间(秒),仅 bUseCameraPush 时可编辑 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Camera",
|
||||
meta = (EditCondition = "bUseCameraPush", ClampMin = "0.0", ClampMax = "1.0"))
|
||||
float PushWaitDelay = 0.2f;
|
||||
|
||||
// === 动画 ===
|
||||
|
||||
/** 交互动画蒙太奇(可选,为空时用计时器模拟) */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Anim")
|
||||
TObjectPtr<UAnimMontage> InteractMontage;
|
||||
|
||||
/** 无蒙太奇时的动画持续时间(秒) */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Anim",
|
||||
meta = (ClampMin = "0.1", ClampMax = "5.0"))
|
||||
float AnimDuration = 1.0f;
|
||||
|
||||
/** 动画事件触发点(0-1比例),如0.6表示动画播放至60%时触发物品消失 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Anim",
|
||||
meta = (ClampMin = "0.0", ClampMax = "1.0"))
|
||||
float AnimEventTimepoint = 0.6f;
|
||||
|
||||
// === 结束动作 ===
|
||||
|
||||
/** 交互结束后的动作 */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interact|Post")
|
||||
EPostAction PostAction = EPostAction::Return;
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// 委托
|
||||
// ============================================================================
|
||||
|
||||
/** 物品拾取/获得事件 — 通知物品系统和收集系统 */
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(
|
||||
FMLocalItemEvent,
|
||||
FName, ItemId,
|
||||
const FString&, DisplayName,
|
||||
const FName&, Category
|
||||
);
|
||||
@@ -0,0 +1,57 @@
|
||||
// ChildHood Project - 文本底框 UI 基类 实现
|
||||
|
||||
#include "Interaction/NarrativeTextWidget.h"
|
||||
#include "Components/TextBlock.h"
|
||||
|
||||
void UNarrativeTextWidget::NativeOnInitialized()
|
||||
{
|
||||
Super::NativeOnInitialized();
|
||||
|
||||
// 初始隐藏
|
||||
SetVisibility(ESlateVisibility::Hidden);
|
||||
}
|
||||
|
||||
void UNarrativeTextWidget::SetNarrativeText(const FString& Text)
|
||||
{
|
||||
if (NarrativeTextBlock)
|
||||
{
|
||||
NarrativeTextBlock->SetText(FText::FromString(Text));
|
||||
}
|
||||
}
|
||||
|
||||
void UNarrativeTextWidget::Show()
|
||||
{
|
||||
if (bIsVisible) return;
|
||||
bIsVisible = true;
|
||||
|
||||
SetVisibility(ESlateVisibility::HitTestInvisible);
|
||||
|
||||
if (FadeInAnim)
|
||||
{
|
||||
PlayAnimation(FadeInAnim, 0.0f, 1, EUMGSequencePlayMode::Forward, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void UNarrativeTextWidget::Hide()
|
||||
{
|
||||
if (!bIsVisible) return;
|
||||
|
||||
if (FadeOutAnim)
|
||||
{
|
||||
PlayAnimation(FadeOutAnim, 0.0f, 1, EUMGSequencePlayMode::Forward, 1.0f);
|
||||
FTimerHandle TempHandle;
|
||||
if (UWorld* World = GetWorld())
|
||||
{
|
||||
World->GetTimerManager().SetTimer(TempHandle, [this]()
|
||||
{
|
||||
bIsVisible = false;
|
||||
SetVisibility(ESlateVisibility::Hidden);
|
||||
}, 0.2f, false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
bIsVisible = false;
|
||||
SetVisibility(ESlateVisibility::Hidden);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
// ChildHood Project - 文本底框 UI 基类
|
||||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第6节(通用文本显示UI)
|
||||
// 职责:半透明底框 + 一句话叙事/对话文本,带淡入淡出
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Blueprint/UserWidget.h"
|
||||
#include "NarrativeTextWidget.generated.h"
|
||||
|
||||
class UTextBlock;
|
||||
|
||||
/**
|
||||
* UNarrativeTextWidget
|
||||
*
|
||||
* 文本底框 UI 的 C++ 基类。蓝图子类(WBP_NarrativeText)继承此类,
|
||||
* 在 UMG 编辑器中布局可视组件,并确保组件名与 BindWidget 匹配。
|
||||
*
|
||||
* 绑定要求:
|
||||
* - TextBlock 名为 "NarrativeTextBlock" — 显示叙事/对话文字
|
||||
* - WidgetAnimation 名为 "FadeInAnim" — 淡入动画(0.2s)
|
||||
* - WidgetAnimation 名为 "FadeOutAnim" — 淡出动画(0.2s)
|
||||
*
|
||||
* 布局要求:
|
||||
* - Anchors: Horizontal Center, Vertical ~0.6(屏幕中心偏下)
|
||||
* - Border: 半透明黑色背景(~60%),圆角,SizeToContent
|
||||
* - TextBlock: 白色文字,居中,自动换行
|
||||
*/
|
||||
UCLASS(Abstract, Blueprintable)
|
||||
class UNarrativeTextWidget : public UUserWidget
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
/** 设置叙事文本内容 */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction|Narrative")
|
||||
void SetNarrativeText(const FString& Text);
|
||||
|
||||
/** 显示文本(播放淡入动画) */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction|Narrative")
|
||||
void Show();
|
||||
|
||||
/** 隐藏文本(播放淡出动画) */
|
||||
UFUNCTION(BlueprintCallable, Category = "Interaction|Narrative")
|
||||
void Hide();
|
||||
|
||||
protected:
|
||||
|
||||
/** 叙事文字 TextBlock,蓝图子类必须有一个同名 TextBlock */
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
UTextBlock* NarrativeTextBlock;
|
||||
|
||||
/** 淡入动画(0.2s),蓝图子类必须有同名 WidgetAnimation */
|
||||
UPROPERTY(meta = (BindWidgetAnim), Transient)
|
||||
UWidgetAnimation* FadeInAnim;
|
||||
|
||||
/** 淡出动画(0.2s),蓝图子类必须有同名 WidgetAnimation */
|
||||
UPROPERTY(meta = (BindWidgetAnim), Transient)
|
||||
UWidgetAnimation* FadeOutAnim;
|
||||
|
||||
/** 是否正在显示中 */
|
||||
bool bIsVisible = false;
|
||||
|
||||
virtual void NativeOnInitialized() override;
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
// ChildHood Project - 推镜用临时摄像机 实现
|
||||
|
||||
#include "Interaction/PushCameraActor.h"
|
||||
|
||||
#include "Camera/CameraComponent.h"
|
||||
|
||||
// ============================================================================
|
||||
// 构造函数
|
||||
// ============================================================================
|
||||
|
||||
APushCameraActor::APushCameraActor()
|
||||
{
|
||||
PrimaryActorTick.bCanEverTick = false;
|
||||
|
||||
// 创建摄像机组件
|
||||
CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComp"));
|
||||
// 不需要根组件的碰撞
|
||||
SetRootComponent(CameraComp);
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
// ChildHood Project - 推镜用临时摄像机
|
||||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第3节(类设计)
|
||||
// 职责:极简 Actor,仅持有一个 UCameraComponent,供 SetViewTargetWithBlend 使用
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "PushCameraActor.generated.h"
|
||||
|
||||
class UCameraComponent;
|
||||
|
||||
/**
|
||||
* APushCameraActor
|
||||
*
|
||||
* 交互系统推镜时使用的临时摄像机 Actor。
|
||||
* 由 InteractionManager 在 BeginPlay 中 Spawn,随 Character 生命周期。
|
||||
* InteractionManager 在推镜时设置其 Location/Rotation,
|
||||
* 然后通过 PlayerController::SetViewTargetWithBlend 切换 ViewTarget。
|
||||
*/
|
||||
UCLASS()
|
||||
class APushCameraActor : public AActor
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
APushCameraActor();
|
||||
|
||||
/** 推镜摄像机组件 */
|
||||
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
|
||||
UCameraComponent* CameraComp;
|
||||
};
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+767
-784
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,224 @@
|
||||
# 交互系统 · 拾取流程时序图(v1.0 Effect 驱动版)
|
||||
|
||||
## 场景
|
||||
|
||||
玩家进入地上某个交互物的交互范围,按 E 交互后,人物做动作,交互物消失,背包加一个新物品,UI 显示捡到一个物品。
|
||||
|
||||
## 架构层级
|
||||
|
||||
| 层级 | 实体 | 所在位置 |
|
||||
|------|------|---------|
|
||||
| **Logic** | `FInteractionManager` | ASystemDriver 持有 (普通C++, 纯事件驱动, 缓存 Presentation 数据) |
|
||||
| **Logic** | `FEffectManager` | ASystemDriver 持有 (普通C++, Driver 提供Tick) |
|
||||
| **World** | `ASystemDriver` | AInfo 全局唯一 (持有所有Manager, 显式控制创建/Tick顺序) |
|
||||
| **Data** | `UInteractableComponent` | 关卡实例 |
|
||||
| **Data** | `UPersistenceSubsystem` | GameInstanceSubsystem |
|
||||
| **Data** | `BackpackSystem` | GameInstance |
|
||||
| **Presentation** | `UInteractionPromptComponent` | Character |
|
||||
|
||||
## 数据流规则
|
||||
|
||||
- 表现层直接读数据层(Manager state / Component data / Backpack data)
|
||||
- 逻辑事件仅在 A 影响 B 时使用(如 Consume Action → Persistence 写入)
|
||||
- 两个表现实体之间不直接访问
|
||||
|
||||
---
|
||||
|
||||
## Effect 配置
|
||||
|
||||
```
|
||||
Effect: "拾取地面物品"
|
||||
TotalDuration: 1.5s, Cancellable: false
|
||||
|
||||
TriggerTime | Action | 说明
|
||||
----------- | --------------------- | ----
|
||||
0.0s | TurnToTarget | TurnDuration=0.2,转向交互物
|
||||
0.0s | PlayMontage | Montage=AM_Pickup,弯腰拾取动画
|
||||
0.6s | Consume | 标记消耗,禁用检测球
|
||||
0.6s | HideActor | 隐藏交互物 Actor
|
||||
0.6s | AddToBackpack | 物品进背包 + 持久化
|
||||
1.0s | ShowPickupNotification| 显示 "捡到了 [旧橡皮]!"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 时序图
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
autonumber
|
||||
|
||||
actor Player as 玩家
|
||||
participant Char as AChildHoodCharacter
|
||||
participant Mgr as FInteractionManager<br/>(普通C++ · ASystemDriver持有)
|
||||
participant Comp as UInteractableComponent<br/>(Data · 关卡实例)
|
||||
participant Actor as AInteractableActor
|
||||
participant EFM as FEffectManager<br/>(普通C++ · ASystemDriver持有)
|
||||
participant Persist as UPersistenceSubsystem<br/>(Data · GameInstance)
|
||||
participant Bag as BackpackSystem
|
||||
participant Pres as UInteractionPromptComponent<br/>(Presentation · Character)
|
||||
participant Driver as ASystemDriver<br/>(AInfo · 持有所有Manager)
|
||||
|
||||
rect rgb(230, 245, 255)
|
||||
Note over Player,Driver: ═══ Phase 0 · 进入检测范围 ═══
|
||||
Player->>Char: WASD 移动进入 TriggerRadius
|
||||
Comp->>Mgr: DetectionSphere OnOverlapBegin<br/>ASystemDriver::Get(World)->GetInteractionManager().RegisterInteractable(this)
|
||||
Mgr->>Mgr: NearbyInteractables.Add(Comp)<br/>Sort by Dist2D → SelectedIndex = 0
|
||||
Mgr->>Mgr: RefreshCachedSelection()<br/>缓存 PromptText + WorldPosition
|
||||
end
|
||||
|
||||
rect rgb(255, 250, 230)
|
||||
Note over Player,Driver: ═══ Phase 1 · Prompt 显示(Pres 每帧读 Manager 缓存)═══
|
||||
loop 每帧 Pres TickComponent
|
||||
Pres->>Mgr: GetState() → Free
|
||||
Pres->>Mgr: HasSelection() → true
|
||||
Pres->>Mgr: GetSelectedPromptText() → "[E] 拾取 旧橡皮"
|
||||
Pres->>Mgr: GetSelectedWorldPosition() → FVector
|
||||
Pres->>Pres: PromptWidget.SetText + SetScreenPosition
|
||||
end
|
||||
Note right of Pres: Pres 不碰 Component<br/>只读 Manager 缓存
|
||||
end
|
||||
|
||||
rect rgb(230, 255, 230)
|
||||
Note over Player,Driver: ═══ Phase 2 · 按 E,Character 通过 Driver 协调两个 Manager ═══
|
||||
Player->>Char: 按 E (IA_Interact)
|
||||
Char->>Mgr: Driver->GetInteractionManager().BeginInteract() → 返回 Comp
|
||||
Mgr->>Mgr: State = Executing, CurrentInteractable = Comp
|
||||
Char->>Char: SetInteracting(true) → 屏蔽移动
|
||||
|
||||
Char->>EFM: Driver->GetEffectManager().PlayEffect(Comp.Data.InteractEffect, Context)<br/>Context = {Char, Comp, Actor}
|
||||
Note right of EFM: Effect "拾取地面物品"<br/>T=0.0 TurnToTarget + PlayMontage<br/>T=0.6 Consume+Hide+Backpack<br/>T=1.0 PickupNotification<br/>Total=1.5s
|
||||
end
|
||||
|
||||
rect rgb(255, 240, 245)
|
||||
Note over Player,Driver: ═══ Phase 3 · Presentation 检测状态变化 ═══
|
||||
Pres->>Mgr: Tick: GetState() → Executing (变化!)
|
||||
Pres->>Pres: PromptWidget.Hide()
|
||||
end
|
||||
|
||||
rect rgb(240, 240, 255)
|
||||
Note over Player,Driver: ═══ Phase 4 · Effect 执行(ASystemDriver Tick → EffectManager)═══
|
||||
|
||||
Note over Driver: T=0.0: TurnToTarget + PlayMontage
|
||||
Driver->>EFM: Driver::Tick → EffectManager.Update(DeltaTime)
|
||||
EFM->>EFM: ElapsedTime=0.0 → 触发 TurnToTarget Action
|
||||
EFM->>Char: RInterpTo 转向 Comp(持续帧)
|
||||
EFM->>EFM: 触发 PlayMontage Action
|
||||
EFM->>Char: GetMesh()->GetAnimInstance()->Montage_Play(AM_Pickup)
|
||||
Note right of Char: 播放弯腰拾取动画
|
||||
|
||||
Note over Driver: T=0.0→0.6: 持续转向 + 动画播放
|
||||
loop 每帧 Driver Tick
|
||||
Driver->>EFM: Tick → Update(DeltaTime)
|
||||
EFM->>EFM: ElapsedTime += DeltaTime
|
||||
EFM->>Char: TurnToTarget: RInterpTo 插值
|
||||
end
|
||||
|
||||
Note over Driver: T=0.6: Consume + HideActor + AddToBackpack
|
||||
Driver->>EFM: Tick → Update → ElapsedTime=0.6 触发
|
||||
EFM->>Comp: Consume() — 数据变更
|
||||
Comp-->>Comp: bIsConsumed=true<br/>DetectionSphere → NoCollision
|
||||
Note right of Comp: 禁用碰撞同步触发 EndOverlap<br/>→ UnregisterInteractable<br/>Manager 标记延迟清理
|
||||
|
||||
EFM->>Persist: MarkItemCollected("rubber_01")
|
||||
Persist-->>Persist: CollectedItemIDs.Add("rubber_01")
|
||||
|
||||
EFM->>Actor: SetActorHiddenInGame(true)
|
||||
|
||||
EFM->>Bag: AddItem("rubber_01", "旧橡皮")
|
||||
Bag-->>Bag: Items.Add({Id:"rubber_01", Name:"旧橡皮"})
|
||||
|
||||
Pres->>Comp: Tick: IsConsumed() → true (变化!)
|
||||
Pres->>Actor: SetActorHiddenInGame(true)
|
||||
|
||||
Note over Driver: T=1.0: ShowPickupNotification
|
||||
Driver->>EFM: Tick → Update → ElapsedTime=1.0 触发
|
||||
EFM->>Pres: 显示拾取通知 "捡到了 [旧橡皮]!"
|
||||
end
|
||||
|
||||
rect rgb(230, 255, 255)
|
||||
Note over Player,Driver: ═══ Phase 5 · Effect 完成,回到 Free ═══
|
||||
Driver->>EFM: Tick → Update → ElapsedTime >= TotalDuration(1.5s)
|
||||
EFM->>EFM: FinishEffect()
|
||||
EFM->>Mgr: OnEffectComplete 回调
|
||||
Mgr->>Mgr: State = Free, CurrentInteractable = nullptr
|
||||
Mgr->>Char: SetInteracting(false) → 恢复移动
|
||||
|
||||
Pres->>Mgr: Tick: GetState() → Free (变化!)
|
||||
Pres->>Mgr: GetSelectedInteractable() → null (已注销)
|
||||
Note over Pres: 无其他交互物在范围,不显示 Prompt
|
||||
|
||||
Player->>Char: WASD 继续移动
|
||||
end
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键数据流说明
|
||||
|
||||
### 表现层读数据(只读 Manager 缓存,不碰 Component)
|
||||
|
||||
| 读取时机 | PromptComponent 读谁 | 读什么 |
|
||||
|----------|---------------------|--------|
|
||||
| 每帧 Tick | Manager | `GetState()` |
|
||||
| Free 状态 | Manager | `HasSelection()` |
|
||||
| Free 状态 | Manager | `GetSelectedPromptText()` |
|
||||
| Free 状态 | Manager | `GetSelectedWorldPosition()` |
|
||||
|
||||
### Manager 缓存更新(选择变化时从 Component 读一次)
|
||||
|
||||
| 触发时机 | Manager 方法 | 缓存内容 |
|
||||
|----------|-------------|---------|
|
||||
| RegisterInteractable | RefreshCachedSelection() | PromptText + WorldPosition |
|
||||
| UnregisterInteractable | RefreshCachedSelection() | PromptText + WorldPosition |
|
||||
| SwitchTarget | RefreshCachedSelection() | PromptText + WorldPosition |
|
||||
|
||||
### Effect 内 Action 执行(直接操作)
|
||||
|
||||
| Action | 操作对象 | 说明 |
|
||||
|--------|---------|------|
|
||||
| TurnToTarget | Char->SetActorRotation | RInterpTo 跨帧插值 |
|
||||
| PlayMontage | Char->GetMesh()->GetAnimInstance() | 播放蒙太奇 |
|
||||
| Consume | Component->Consume() | 标记消耗+禁用检测 |
|
||||
| HideActor | Actor->SetActorHiddenInGame(true) | 隐藏 |
|
||||
| AddToBackpack | PersistenceSubsystem + BackpackSystem | 写入持久层+背包 |
|
||||
| ShowPickupNotification | PromptComponent / Widget | 显示通知 |
|
||||
|
||||
### 逻辑事件(仅 A 影响 B)
|
||||
|
||||
| 事件 | 触发者 | 订阅者 |
|
||||
|------|--------|--------|
|
||||
| OnItemConsumed | Manager(由 Consume Action 触发) | PersistenceSubsystem |
|
||||
| OnDoorToggled | Manager(由 ToggleDoor Action 触发) | PersistenceSubsystem + DoorComponent |
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
### EndOverlap 时序问题
|
||||
|
||||
Phase 4 中 `Consume()` 禁用 DetectionSphere 会**同步触发** `EndOverlap`,进而调用 `Manager->UnregisterInteractable()`。此时 Manager 处于 Executing 状态且 Effect 仍在使用 CurrentInteractable。
|
||||
|
||||
**解决方案**:Manager 的 `UnregisterInteractable` 中,当 `State == Executing` 且移除的正是 `CurrentInteractable` 时,仅从 NearbyInteractables 列表移除,**不清除 CurrentInteractable 引用**,等 Effect 完成回调中统一清理。
|
||||
|
||||
### ASystemDriver 生命周期
|
||||
|
||||
- `ASystemDriver` 是 AInfo 全局唯一,持有所有 World 级 Manager(普通 C++ 对象)
|
||||
- 关卡加载完成 → `GameInstance` Spawn `ASystemDriver`
|
||||
- `Driver::BeginPlay` 显式创建 `FInteractionManager` + `FEffectManager`,控制顺序
|
||||
- `Driver::BeginPlay` 中用 `TFunction` 连线 `EffectManager.OnEffectComplete → Manager.OnInteractionFinished`
|
||||
- `Driver::Tick` 显式调用 `EffectManager.Update(Delta)`,控制 Tick 顺序
|
||||
- 关卡卸载 → World 销毁 → Driver 自动销毁 → Manager 随 Driver 析构
|
||||
- 新关卡加载 → 重新 Spawn + 创建
|
||||
|
||||
### 系统协调关系
|
||||
|
||||
- `FInteractionManager` 和 `FEffectManager` 是普通 C++ 类,由 `ASystemDriver` 持有
|
||||
- `AChildHoodCharacter` 输入回调通过 `ASystemDriver::Get(World)` 访问两个 Manager
|
||||
- `Driver::BeginPlay` 中通过 `TFunction<void()>` 连接 EffectManager 完成回调到 Manager
|
||||
- `FInteractionManager` 纯事件驱动,无 Tick/Update
|
||||
- `UChildHoodGameInstance` 不持有任何交互系统对象,仅 `UPersistenceSubsystem` 跨 World 存活
|
||||
|
||||
### TurnToTarget 跨帧插值
|
||||
|
||||
TurnToTarget Action 不是瞬时完成的。EffectManager 在 Update 中维护 `FTurnState`(起始旋转、目标旋转、已用时间),每帧调用 `FMath::RInterpTo` 直到转向完成。多个 Action 可以并行执行。
|
||||
+162
-17
@@ -2,8 +2,8 @@
|
||||
|
||||
> 任务ID: P-009
|
||||
> 对应执行案: `docs/design/收集系统-执行案.md` (v0.1.1)
|
||||
> 关联系统: 物品系统(上游单向接收)、交互系统(间接,通过物品系统委托)
|
||||
> 日期: 2026-06-07
|
||||
> 关联系统: 物品系统(上游单向接收)、交互系统(间接,通过物品系统委托)、GameInstance 持久化层
|
||||
> 日期: 2026-06-07(2026-06-11 更新:加入多场景持久化架构)
|
||||
|
||||
---
|
||||
|
||||
@@ -15,6 +15,16 @@
|
||||
**预估工期**:2-3 天
|
||||
**新增/修改代码量**:约 250-350 行 C++ + 3 个 UMG 蓝图
|
||||
|
||||
### 跨场景持久化架构
|
||||
|
||||
> 收集进度是玩家核心持久数据。当前设计中 `UCollectionManager` 将「行为控制」(UI、通知、动画)和「持久数据」(CollectedIDs、Progress)混在同一组件,随 Character 销毁而丢失。需要通过数据层分离解决:
|
||||
|
||||
- **持久数据层**:收集状态(CollectedIDs、Progress、bIsComplete)存储在 `UChildHoodGameInstance` 中(跨关卡存活)
|
||||
- **行为层**:`UCollectionManager` 仅负责运行时 UI 控制和委托监听,BeginPlay 时从 GameInstance 恢复状态
|
||||
- **交互物恢复**:场景中的已收集物品由交互系统通过 `InteractableComponent::RestorePersistentState()` 处理(见交互系统技术方案第 12 节)
|
||||
|
||||
v0.1 为单场景原型,此架构以接口预留形式存在,不影响当前功能。详见 [第 12 节:跨场景持久化设计](#12-跨场景持久化设计)。
|
||||
|
||||
---
|
||||
|
||||
## 1. 需求功能点罗列
|
||||
@@ -123,6 +133,17 @@ classDiagram
|
||||
-CheckCompletion() void
|
||||
-ShowCompletionPrompt() void
|
||||
-UpdateProgressUI() void
|
||||
-LoadStateFromGameInstance() void
|
||||
-SaveStateToGameInstance() void
|
||||
}
|
||||
|
||||
class UChildHoodGameInstance {
|
||||
-TSet~FName~ CollectedItemIDs
|
||||
-int32 CollectionProgress
|
||||
-bool bCollectionComplete
|
||||
+GetCollectionState(TSet_FName_&, int32&, bool&) void
|
||||
+SetCollectionState(TSet_FName_&, int32, bool) void
|
||||
+ResetAll() void
|
||||
}
|
||||
|
||||
class UCollectionNotifWidget {
|
||||
@@ -175,6 +196,7 @@ classDiagram
|
||||
|
||||
AChildHoodCharacter *-- UCollectionManager : 组合
|
||||
UCollectionManager --> UInteractionManager : 关联(绑定委托)
|
||||
UCollectionManager ..> UChildHoodGameInstance : 读取/写入持久状态
|
||||
UCollectionManager o-- UCollectionNotifWidget : 聚合(管理生命周期)
|
||||
UCollectionManager o-- UCollectionProgressWidget : 聚合(管理生命周期)
|
||||
UCollectionManager ..> UCollectionCompleteWidget : 按需创建
|
||||
@@ -188,7 +210,7 @@ classDiagram
|
||||
| 组合 `*--` | 生命周期绑定 | Character 持有 CollectionManager;CollectionManager 内含 Config |
|
||||
| 聚合 `o--` | 引用但非拥有 | CollectionManager 管理通知/进度 Widget 的创建和销毁 |
|
||||
| 关联 `-->` | 持久引用 | CollectionManager 绑定 InteractionManager 的委托 |
|
||||
| 依赖 `..>` | 临时使用 | CollectionManager 按需创建完成提示 Widget |
|
||||
| 依赖 `..>` | 临时使用 | CollectionManager 从 GameInstance 读取/写入持久状态;按需创建完成提示 Widget |
|
||||
|
||||
### 新增类
|
||||
|
||||
@@ -489,6 +511,8 @@ void UCollectionManager::ProcessNewCollection(FName ItemId)
|
||||
// 步骤 3: 记录
|
||||
CollectedIDs.Add(ItemId);
|
||||
Progress = CollectedIDs.Num(); // 用 Set 大小作为权威进度值,避免状态不一致
|
||||
// 持久化到 GameInstance
|
||||
SaveStateToGameInstance();
|
||||
```
|
||||
|
||||
---
|
||||
@@ -519,6 +543,7 @@ void UCollectionManager::ProcessNewCollection(FName ItemId)
|
||||
if (Progress >= Config.TotalCount && !bIsComplete)
|
||||
{
|
||||
bIsComplete = true;
|
||||
SaveStateToGameInstance(); // 持久化完成状态
|
||||
CheckCompletion(); // 触发完成表现
|
||||
}
|
||||
}
|
||||
@@ -637,10 +662,8 @@ void UCollectionManager::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
// 初始化状态
|
||||
Progress = 0;
|
||||
CollectedIDs.Empty();
|
||||
bIsComplete = false;
|
||||
// 从 GameInstance 恢复持久状态(v0.1 单场景等效于空数据初始化)
|
||||
LoadStateFromGameInstance();
|
||||
|
||||
// 创建进度 UI
|
||||
if (ProgressWidgetClass)
|
||||
@@ -652,7 +675,12 @@ void UCollectionManager::BeginPlay()
|
||||
if (ProgressWidget)
|
||||
{
|
||||
ProgressWidget->AddToViewport(5);
|
||||
ProgressWidget->UpdateProgress(0, Config.TotalCount);
|
||||
ProgressWidget->UpdateProgress(Progress, Config.TotalCount);
|
||||
// 已完成时恢复完成样式
|
||||
if (bIsComplete)
|
||||
{
|
||||
ProgressWidget->SetCompleteStyle();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -772,20 +800,34 @@ void UCollectionManager::ShowCompletionPrompt()
|
||||
|
||||
#### 重启状态处理
|
||||
|
||||
**实现**:v0.1 无持久化。CollectionManager::BeginPlay() 中完全重置:
|
||||
**实现**:收集状态通过 `UChildHoodGameInstance` 跨场景持久化。CollectionManager::BeginPlay() 中从 GameInstance 恢复:
|
||||
|
||||
```cpp
|
||||
void UCollectionManager::BeginPlay()
|
||||
void UCollectionManager::LoadStateFromGameInstance()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
Progress = 0;
|
||||
CollectedIDs.Empty();
|
||||
bIsComplete = false;
|
||||
// ... 创建 UI、绑定委托
|
||||
if (UChildHoodGameInstance* GI = GetWorld()->GetGameInstance<UChildHoodGameInstance>())
|
||||
{
|
||||
GI->GetCollectionState(CollectedIDs, Progress, bIsComplete);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 回退:无 GameInstance 时初始化为空(编辑器预览等场景)
|
||||
Progress = 0;
|
||||
CollectedIDs.Empty();
|
||||
bIsComplete = false;
|
||||
}
|
||||
}
|
||||
|
||||
void UCollectionManager::SaveStateToGameInstance()
|
||||
{
|
||||
if (UChildHoodGameInstance* GI = GetWorld()->GetGameInstance<UChildHoodGameInstance>())
|
||||
{
|
||||
GI->SetCollectionState(CollectedIDs, Progress, bIsComplete);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
重启后进度 UI 恢复显示 `📦 杂物 0/10`。
|
||||
v0.1 单场景下:GameInstance 以空数据初始化,等效于 `📦 杂物 0/10`。场景内正常收集后状态写入 GameInstance,若通过 Seamless Travel 切换关卡则自动恢复。非无缝跳转(OpenLevel)时 GameInstance 仍存活,新场景的 CollectionManager 可读取之前的数据。
|
||||
|
||||
#### 收集通知与拾取通知时序
|
||||
|
||||
@@ -819,6 +861,7 @@ void UCollectionManager::BeginPlay()
|
||||
### 注意事项
|
||||
|
||||
1. **委托绑定时机**:CollectionManager 在 BeginPlay() 中通过 `GetOwner()->GetComponentByClass<UInteractionManager>()` 获取引用并绑定。需确保 InteractionManager 已初始化。若为 nullptr 则在 Tick 中延迟绑定(最多重试 N 帧后报错)。
|
||||
2. **持久化读写时机**:`SaveStateToGameInstance()` 在每次 ProcessNewCollection 记录后和完成判定后调用,保证 GameInstance 中的数据始终最新。`LoadStateFromGameInstance()` 仅在 BeginPlay 中调用一次。
|
||||
2. **v0.1 无拾取通知 UI**:执行文档中拾取通知由物品系统负责,但 v0.1 物品系统仅为委托层(InteractionManager 上的委托)。收集通知的 0.3s 延迟仍按设计实现(为拾取通知预留时间窗口),即使拾取通知 UI 暂未实现。
|
||||
3. **通知移除回调**:UCollectionNotifWidget 淡出完成后需通知 CollectionManager 从 ActiveNotifications 中移除自身引用。使用委托或弱引用回调实现,避免循环引用。
|
||||
4. **FName 作为 ID**:收集系统使用 FName(ItemId)作为去重键,与 InteractionManager 委托广播的 ItemId 类型一致。
|
||||
@@ -847,14 +890,33 @@ InteractionManager (ExecuteAnimEvent)
|
||||
├─ 查品类 (Category == TrackedCategory?) → 不匹配则忽略
|
||||
├─ 查重复 (CollectedIDs.Contains?) → 已存在则忽略
|
||||
├─ 记录 (CollectedIDs.Add + Progress = Num())
|
||||
├─ SaveStateToGameInstance() → UChildHoodGameInstance (持久化)
|
||||
├─ UpdateProgressUI() → WBP_CollectionProgress (文本 + 弹性动画)
|
||||
├─ SetTimer(NotifDelay) → ShowCollectionNotification() → WBP_CollectionNotification
|
||||
└─ 完成判定 (Progress >= TotalCount)
|
||||
→ bIsComplete = true
|
||||
→ SaveStateToGameInstance() (持久化完成状态)
|
||||
→ SetCompleteStyle() → WBP_CollectionProgress (金色)
|
||||
→ SetTimer(TotalDelay) → ShowCompletionPrompt() → WBP_CollectionComplete
|
||||
```
|
||||
|
||||
### 跨场景恢复流
|
||||
|
||||
```
|
||||
场景切换 (OpenLevel / Seamless Travel)
|
||||
→ 新场景加载
|
||||
→ AChildHoodCharacter::BeginPlay()
|
||||
→ UCollectionManager::BeginPlay()
|
||||
→ LoadStateFromGameInstance()
|
||||
→ UChildHoodGameInstance::GetCollectionState(OutIDs, OutProgress, OutComplete)
|
||||
→ 恢复 CollectedIDs / Progress / bIsComplete
|
||||
→ 创建进度 UI(显示已恢复的进度值)
|
||||
→ 若 bIsComplete → 恢复完成样式
|
||||
→ 场景中 AInteractableActor::BeginPlay()
|
||||
→ UInteractableComponent::RestorePersistentState(GI)
|
||||
→ GI->IsItemCollected(ItemId) → 已收集则隐藏 + 禁用
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. 可调参数汇总
|
||||
@@ -886,10 +948,11 @@ InteractionManager (ExecuteAnimEvent)
|
||||
Source/ChildHood/
|
||||
├── Collection/
|
||||
│ ├── CollectionTypes.h # FCollectionConfig 结构体定义
|
||||
│ ├── CollectionManager.h/.cpp # 收集系统核心组件
|
||||
│ ├── CollectionManager.h/.cpp # 收集系统核心组件(含 GameInstance 读写)
|
||||
│ ├── CollectionNotifWidget.h/.cpp # 收集通知 UI 基类
|
||||
│ ├── CollectionProgressWidget.h/.cpp # 收集进度 UI 基类
|
||||
│ └── CollectionCompleteWidget.h/.cpp # 完成提示 UI 基类
|
||||
├── ChildHoodGameInstance.h/.cpp # 新增:跨关卡持久数据持有者(收集状态在此持久化)
|
||||
├── ChildHoodCharacter.h/.cpp # 修改:添加 CollectionManager 成员和访问器
|
||||
|
||||
Content/
|
||||
@@ -928,3 +991,85 @@ Content/
|
||||
|
||||
> **关键路径**:6b-1 → 6b-2 → 6b-4 → 6b-5 → 6b-6。6b-3(进度 UI)可在 6b-1 完成后并行。总关键路径约 3 天。
|
||||
> **前置依赖**:交互系统的 InteractionManager 组件需已完成(特别是 OnItemPickedUp/OnItemFound 委托),方可进行 6b-2 的委托绑定测试。
|
||||
|
||||
---
|
||||
|
||||
## 12. 跨场景持久化设计
|
||||
|
||||
> 收集进度是玩家的核心持久数据,必须在场景切换时保留。本节定义收集系统如何通过 `UChildHoodGameInstance` 实现跨场景数据持久化。
|
||||
|
||||
### 架构原则
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────┐
|
||||
│ UChildHoodGameInstance │ ← 跨关卡存活
|
||||
│ ├── CollectedItemIDs: TSet<FName> │ 所有场景共享
|
||||
│ ├── CollectionProgress: int32 │
|
||||
│ └── bCollectionComplete: bool │
|
||||
└──────────────────────────────────────────────────┘
|
||||
↕ BeginPlay 加载 / 收集时回写
|
||||
┌──────────────────────────────────────────────────┐
|
||||
│ UCollectionManager (每个场景重建) │ ← 行为层
|
||||
│ ├── 从 GameInstance 读取恢复进度 │ 不持有持久数据所有权
|
||||
│ ├── 收集时写入 GameInstance │
|
||||
│ └── 控制 UI / 通知 / 动画 │
|
||||
└──────────────────────────────────────────────────┘
|
||||
↕ 场景恢复
|
||||
┌──────────────────────────────────────────────────┐
|
||||
│ 场景中的 AInteractableActor │ ← 由交互系统负责恢复
|
||||
│ └── RestorePersistentState() │ (见交互系统技术方案第 12 节)
|
||||
└──────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### UChildHoodGameInstance 收集相关接口
|
||||
|
||||
```cpp
|
||||
UCLASS()
|
||||
class UChildHoodGameInstance : public UGameInstance
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
// === 收集状态 ===
|
||||
void GetCollectionState(TSet<FName>& OutIDs, int32& OutProgress, bool& OutComplete) const;
|
||||
void SetCollectionState(const TSet<FName>& IDs, int32 Progress, bool bComplete);
|
||||
|
||||
// === 物品消耗状态(交互系统也使用)===
|
||||
bool IsItemCollected(FName ItemId) const;
|
||||
void MarkItemCollected(FName ItemId);
|
||||
|
||||
// === 门状态(交互系统也使用)===
|
||||
bool IsDoorOpen(FName DoorId) const;
|
||||
void SetDoorOpen(FName DoorId, bool bIsOpen);
|
||||
|
||||
// === 重置 ===
|
||||
void ResetAll();
|
||||
|
||||
private:
|
||||
// 收集系统
|
||||
TSet<FName> CollectedItemIDs;
|
||||
int32 CollectionProgress = 0;
|
||||
bool bCollectionComplete = false;
|
||||
// 交互系统
|
||||
TMap<FName, bool> DoorStates;
|
||||
};
|
||||
```
|
||||
|
||||
> **注意**:`CollectedItemIDs` 同时被 `IsItemCollected()`(交互物恢复)和 `GetCollectionState()`(收集进度恢复)使用,确保两系统数据一致性。
|
||||
|
||||
### 读写时机
|
||||
|
||||
| 时机 | 方法 | 说明 |
|
||||
|------|------|------|
|
||||
| CollectionManager::BeginPlay | `LoadStateFromGameInstance()` | 场景加载时恢复进度 |
|
||||
| ProcessNewCollection 记录后 | `SaveStateToGameInstance()` | 每次新收集时同步写入 |
|
||||
| 完成判定后 | `SaveStateToGameInstance()` | 完成状态立即持久化 |
|
||||
| InteractableComponent::Consume | `GI->MarkItemCollected()` | 交互物消耗状态写入(由交互系统调用) |
|
||||
|
||||
### v0.1 行为
|
||||
|
||||
- v0.1 为单场景原型,不存在跨场景切换
|
||||
- `UChildHoodGameInstance` 在 v0.1 中以空数据初始化,所有查询返回默认值
|
||||
- `LoadStateFromGameInstance()` 等效于初始化为 0
|
||||
- 后续多场景版本只需在 Project Settings 中将 GameInstance Class 设为 `UChildHoodGameInstance`,收集系统代码无需修改
|
||||
- 后续版本可通过 USaveGame 将 GameInstance 数据序列化到磁盘,实现跨会话持久化
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"subfolder": "AutomaticDoor",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/AutomaticDoor",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 6,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "B_AutoDoor",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_AutoDoorDouble",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_AutoLateralDoor",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_AutoLateralDoorDouble",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_BaseAutoDoor",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DoorParts_Struct",
|
||||
"ue_class_type": "UserDefinedStruct",
|
||||
"note": [
|
||||
"非 Actor 类型: UserDefinedStruct"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"subfolder": "AutomaticDoor/Curves",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/AutomaticDoor/Curves",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 4,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "Curve_DoorBreakOpen",
|
||||
"ue_class_type": "CurveFloat",
|
||||
"note": [
|
||||
"非 Actor 类型: CurveFloat"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Curve_DoorClose",
|
||||
"ue_class_type": "CurveFloat",
|
||||
"note": [
|
||||
"非 Actor 类型: CurveFloat"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Curve_DoorOpen",
|
||||
"ue_class_type": "CurveFloat",
|
||||
"note": [
|
||||
"非 Actor 类型: CurveFloat"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Curve_DoorRapidClose",
|
||||
"ue_class_type": "CurveFloat",
|
||||
"note": [
|
||||
"非 Actor 类型: CurveFloat"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
{
|
||||
"subfolder": "AutomaticDoor/Sounds",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/AutomaticDoor/Sounds",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 16,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "BigDoor_Closing01",
|
||||
"ue_class_type": "SoundWave",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundWave"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "BigDoor_Closing02",
|
||||
"ue_class_type": "SoundWave",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundWave"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "BigDoor_Closing_Cue",
|
||||
"ue_class_type": "SoundCue",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundCue"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "BigDoor_Moving01",
|
||||
"ue_class_type": "SoundWave",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundWave"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "BigDoor_Moving_Cue",
|
||||
"ue_class_type": "SoundCue",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundCue"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "BigDoor_StartOpening01",
|
||||
"ue_class_type": "SoundWave",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundWave"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "BigDoor_StartOpening01_Cue",
|
||||
"ue_class_type": "SoundCue",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundCue"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DoorSoundAttenuation",
|
||||
"ue_class_type": "SoundAttenuation",
|
||||
"note": [
|
||||
"非 Actor 蓝图: SoundAttenuation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "SimpleDoor_Closing01",
|
||||
"ue_class_type": "SoundWave",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundWave"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "SimpleDoor_Closing_Cue",
|
||||
"ue_class_type": "SoundCue",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundCue"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "SimpleDoor_StarClosing01",
|
||||
"ue_class_type": "SoundWave",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundWave"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "SimpleDoor_StarClosing01_Cue",
|
||||
"ue_class_type": "SoundCue",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundCue"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "SimpleDoor_StarClosing02",
|
||||
"ue_class_type": "SoundWave",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundWave"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "SimpleDoor_StartOpening01",
|
||||
"ue_class_type": "SoundWave",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundWave"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "SimpleDoor_StartOpening02",
|
||||
"ue_class_type": "SoundWave",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundWave"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "SimpleDoor_StartOpening_Cue",
|
||||
"ue_class_type": "SoundCue",
|
||||
"note": [
|
||||
"非 Actor 类型: SoundCue"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
{
|
||||
"subfolder": "Decals",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/Decals",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 16,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "B_CircleZoneDecal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_OctagonZoneDecal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_ShapeArrow_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_ShapeCross_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_ShapeLess_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_ShapeSquare_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SquareZone_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SquareZoneBlue_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SquareZoneGreen_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SquareZoneRed_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SquareZoneYellow_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SripeZoneBlue_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SripeZoneGreen_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SripeZoneRed_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SripeZoneWhite_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SripeZoneYellow_Decal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"subfolder": "Decals/Class",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/Decals/Class",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 6,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "B_BlockingDecal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SimpleBlockingDecal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_ZoneDecal",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "BlockingDecalData",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "BlockingDecalMaterialParameters_Struct",
|
||||
"ue_class_type": "UserDefinedStruct",
|
||||
"note": [
|
||||
"非 Actor 类型: UserDefinedStruct"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DecalPivotPoint_Enum",
|
||||
"ue_class_type": "UserDefinedEnum",
|
||||
"note": [
|
||||
"非 Actor 类型: UserDefinedEnum"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"subfolder": "Interactions",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/Interactions",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 3,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "B_FloorButton",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_PushButton",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_TriggerButton",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"subfolder": "Interactions/Curves",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/Interactions/Curves",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 1,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "Curve_ButtonPress",
|
||||
"ue_class_type": "CurveFloat",
|
||||
"note": [
|
||||
"非 Actor 类型: CurveFloat"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"subfolder": "Interactions/Types",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/Interactions/Types",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 1,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "ReplicatedPressedButton_Struct",
|
||||
"ue_class_type": "UserDefinedStruct",
|
||||
"note": [
|
||||
"非 Actor 类型: UserDefinedStruct"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"subfolder": "Lights",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/Lights",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 10,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "B_BlockingLights",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_CeilingLight01",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_CeilingLight02a",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_CeilingLight03a",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_CeilingLight03b",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_CeilingLightBulb",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_CeilingLightFlat02a",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_FlamingTorchWithSupport",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_RoadLamp_01",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_RoadLight",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"subfolder": "Others",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/Others",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 5,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "B_DisplayPanel",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_HumanScaleReference",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SimpleCameraPreview",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_SplineArrow",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_TurnToCameraComponent",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"subfolder": "Others/BlockingTooltip",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/Others/BlockingTooltip",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 2,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "B_BlockingTooltipActor",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "NS_BlockingTooltip",
|
||||
"ue_class_type": "NiagaraSystem",
|
||||
"note": [
|
||||
"非 Actor 类型: NiagaraSystem"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"subfolder": "Procedural",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/Procedural",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 6,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "B_BarrierWall",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_Ladder_01",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_Ladder_02",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_ProceduralBlockoutActor",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_RoadSpeedBump",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_StairPlane",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"subfolder": "StaticDoor",
|
||||
"source_path": "/Game/BlockingStarterPack/Blueprints/StaticDoor",
|
||||
"actor_blueprint_count": 0,
|
||||
"non_actor_count": 2,
|
||||
"completed": true,
|
||||
"actor_blueprints": {},
|
||||
"skipped_non_actor": [
|
||||
{
|
||||
"name": "B_StaticDoor",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "B_StaticDoorDouble",
|
||||
"ue_class_type": "Blueprint",
|
||||
"note": [
|
||||
"非 Actor 蓝图: Blueprint"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"started_at": "2026-06-10T11:57:44.766012",
|
||||
"scan_root": "/Game/BlockingStarterPack",
|
||||
"output_dir": "C:\\MiceCola\\Indi\\ChildHood\\output\\asset-catalog",
|
||||
"steps": [
|
||||
{
|
||||
"name": "discover",
|
||||
"status": "ok",
|
||||
"total": 644,
|
||||
"meshes": 425,
|
||||
"materials": 86,
|
||||
"blueprints": 78,
|
||||
"others": 55,
|
||||
"mesh_subfolders": [
|
||||
"Architecture/Barriers",
|
||||
"Architecture/BayWindows",
|
||||
"Architecture/Beams",
|
||||
"Architecture/Doors",
|
||||
"Architecture/Floors",
|
||||
"Architecture/Stairs",
|
||||
"Architecture/Walls",
|
||||
"Architecture/WindowsSet",
|
||||
"Bathroom",
|
||||
"Bedroom",
|
||||
"BigBuildings",
|
||||
"Decorations",
|
||||
"DisplayPanels",
|
||||
"Extra/Camera",
|
||||
"Extra",
|
||||
"Furnitures",
|
||||
"Gears",
|
||||
"Industrials",
|
||||
"Interactions",
|
||||
"LandMesh",
|
||||
"Lights",
|
||||
"Pipes",
|
||||
"Primitives/Others",
|
||||
"Primitives",
|
||||
"Roads",
|
||||
"SmallBuildings",
|
||||
"Trashs",
|
||||
"Vegetations",
|
||||
"Vehicles",
|
||||
"Weapons"
|
||||
],
|
||||
"material_subfolders": [
|
||||
"Others/BlockingTooltip",
|
||||
"",
|
||||
"Blocking/Basics",
|
||||
"Blocking",
|
||||
"Blocking/TriPlanarLocalAligned",
|
||||
"Blocking/TriPlanarWorldAligned",
|
||||
"Decals",
|
||||
"Editor",
|
||||
"Glass",
|
||||
"Light"
|
||||
],
|
||||
"blueprint_subfolders": [
|
||||
"AutomaticDoor",
|
||||
"AutomaticDoor/Curves",
|
||||
"AutomaticDoor/Sounds",
|
||||
"Decals",
|
||||
"Decals/Class",
|
||||
"Interactions",
|
||||
"Interactions/Curves",
|
||||
"Interactions/Types",
|
||||
"Lights",
|
||||
"Others",
|
||||
"Others/BlockingTooltip",
|
||||
"Procedural",
|
||||
"StaticDoor"
|
||||
],
|
||||
"elapsed_sec": 4.2
|
||||
},
|
||||
{
|
||||
"name": "mesh",
|
||||
"status": "ok",
|
||||
"total": 425,
|
||||
"analyzed": 425,
|
||||
"failed": 0,
|
||||
"elapsed_sec": 1.5
|
||||
},
|
||||
{
|
||||
"name": "material",
|
||||
"status": "ok",
|
||||
"total": 86,
|
||||
"analyzed": 86,
|
||||
"failed": 0,
|
||||
"elapsed_sec": 0.5
|
||||
},
|
||||
{
|
||||
"name": "blueprint",
|
||||
"status": "ok",
|
||||
"total": 78,
|
||||
"actor_blueprints": 0,
|
||||
"skipped_non_actor": 78,
|
||||
"elapsed_sec": 0.6
|
||||
}
|
||||
],
|
||||
"completed_at": "2026-06-10T11:57:51.806102",
|
||||
"status": "ok"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"subfolder": "Blocking",
|
||||
"source_path": "/Game/BlockingStarterPack/Materials/Blocking",
|
||||
"count": 2,
|
||||
"completed": true,
|
||||
"materials": {
|
||||
"M_BlockingMaterial": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"MI_DisplayPanelFace": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/MI_DisplayPanelFace.MI_DisplayPanelFace",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.3398,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 5.0
|
||||
},
|
||||
{
|
||||
"name": "UV Offset X",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "UV Offset Y",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "UV Scale X",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "UV Scale Y",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#000000",
|
||||
"style_tags": [
|
||||
"display"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,595 @@
|
||||
{
|
||||
"subfolder": "Blocking/Basics",
|
||||
"source_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics",
|
||||
"count": 14,
|
||||
"completed": true,
|
||||
"materials": {
|
||||
"MI_DevBlack": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevBlack.MI_DevBlack",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0104,
|
||||
"g": 0.0104,
|
||||
"b": 0.0104,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 0.1615,
|
||||
"g": 0.1615,
|
||||
"b": 0.1615,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 2.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#030303",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevBlue": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevBlue.MI_DevBlue",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 2.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#0000FF",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevBrown": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevBrown.MI_DevBrown",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0729,
|
||||
"g": 0.031,
|
||||
"b": 0.0087,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 2.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#130802",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevFoliage": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevFoliage.MI_DevFoliage",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.151,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#002700",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevGray": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevGray.MI_DevGray",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0885,
|
||||
"g": 0.0885,
|
||||
"b": 0.0885,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RoughnessMax",
|
||||
"value": 0.8
|
||||
},
|
||||
{
|
||||
"name": "RoughnessMin",
|
||||
"value": 0.6
|
||||
},
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 1.679003
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#171717",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevGreen": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevGreen.MI_DevGreen",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 1.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 2.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#00FF00",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevOrange": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevOrange.MI_DevOrange",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.8308,
|
||||
"g": 0.3238,
|
||||
"b": 0.026,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Wire Roughness",
|
||||
"value": 0.6
|
||||
},
|
||||
{
|
||||
"name": "UV Offset X",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "UV Offset Y",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "UV Scale X",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "UV Scale Y",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#D45307",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevPink": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevPink.MI_DevPink",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.3882,
|
||||
"b": 0.8682,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FF63DD",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevPurple": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevPurple.MI_DevPurple",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.6562,
|
||||
"g": 0.0355,
|
||||
"b": 0.413,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 2.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#A70969",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevRed": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevRed.MI_DevRed",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 2.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FF0000",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevSkyBlue": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevSkyBlue.MI_DevSkyBlue",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.4038,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#0067FF",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevWhite": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevWhite.MI_DevWhite",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.3698,
|
||||
"g": 0.3698,
|
||||
"b": 0.3698,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "Line Grow Distance",
|
||||
"value": 60000.0
|
||||
},
|
||||
{
|
||||
"name": "Line Weight Multiply On Distance",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "Wire Weight (Small)",
|
||||
"value": 0.47
|
||||
},
|
||||
{
|
||||
"name": "Wire Weight (Medium)",
|
||||
"value": 0.465
|
||||
},
|
||||
{
|
||||
"name": "Wire Weight (Large)",
|
||||
"value": 0.475
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#5E5E5E",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_DevYellow": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevYellow.MI_DevYellow",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FFFF00",
|
||||
"style_tags": [
|
||||
"basic_color"
|
||||
]
|
||||
},
|
||||
"MI_LightGreen": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_LightGreen.MI_LightGreen",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.4798,
|
||||
"g": 1.0,
|
||||
"b": 0.3867,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#7AFF63",
|
||||
"style_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,292 @@
|
||||
{
|
||||
"subfolder": "Blocking/TriPlanarLocalAligned",
|
||||
"source_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned",
|
||||
"count": 14,
|
||||
"completed": true,
|
||||
"materials": {
|
||||
"MI_DevBlack_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevBlack_TPLA.MI_DevBlack_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevBlack.MI_DevBlack",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevBlue_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevBlue_TPLA.MI_DevBlue_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevBlue.MI_DevBlue",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevBrown_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevBrown_TPLA.MI_DevBrown_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevBrown.MI_DevBrown",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevFoliage_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevFoliage_TPLA.MI_DevFoliage_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevFoliage.MI_DevFoliage",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevGray_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevGray_TPLA.MI_DevGray_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevGray.MI_DevGray",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "TriplanardSmooth",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevGreen_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevGreen_TPLA.MI_DevGreen_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevGreen.MI_DevGreen",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevOrange_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevOrange_TPLA.MI_DevOrange_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevOrange.MI_DevOrange",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevPink_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevPink_TPLA.MI_DevPink_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevPink.MI_DevPink",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevPurple_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevPurple_TPLA.MI_DevPurple_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevPurple.MI_DevPurple",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevRed_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevRed_TPLA.MI_DevRed_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevRed.MI_DevRed",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevSkyBlue_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevSkyBlue_TPLA.MI_DevSkyBlue_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevSkyBlue.MI_DevSkyBlue",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevWhite_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevWhite_TPLA.MI_DevWhite_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevWhite.MI_DevWhite",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevYellow_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_DevYellow_TPLA.MI_DevYellow_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevYellow.MI_DevYellow",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
},
|
||||
"MI_LightGreen_TPLA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarLocalAligned/MI_LightGreen_TPLA.MI_LightGreen_TPLA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_LightGreen.MI_LightGreen",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"local_aligned"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,296 @@
|
||||
{
|
||||
"subfolder": "Blocking/TriPlanarWorldAligned",
|
||||
"source_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned",
|
||||
"count": 14,
|
||||
"completed": true,
|
||||
"materials": {
|
||||
"MI_DevBlack_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevBlack_TPWA.MI_DevBlack_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevBlack.MI_DevBlack",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevBlue_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevBlue_TPWA.MI_DevBlue_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevBlue.MI_DevBlue",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevBrown_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevBrown_TPWA.MI_DevBrown_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevBrown.MI_DevBrown",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevFoliage_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevFoliage_TPWA.MI_DevFoliage_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevFoliage.MI_DevFoliage",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevGray_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevGray_TPWA.MI_DevGray_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevGray.MI_DevGray",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "TriplanardSmooth",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevGreen_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevGreen_TPWA.MI_DevGreen_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevGreen.MI_DevGreen",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevOange_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevOange_TPWA.MI_DevOange_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevOrange.MI_DevOrange",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "TriplanardSmooth",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevPink_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevPink_TPWA.MI_DevPink_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevPink.MI_DevPink",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevPurple_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevPurple_TPWA.MI_DevPurple_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevPurple.MI_DevPurple",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevRed_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevRed_TPWA.MI_DevRed_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevRed.MI_DevRed",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevSkyBlue_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevSkyBlue_TPWA.MI_DevSkyBlue_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevSkyBlue.MI_DevSkyBlue",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevWhite_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevWhite_TPWA.MI_DevWhite_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevWhite.MI_DevWhite",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_DevYellow_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_DevYellow_TPWA.MI_DevYellow_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_DevYellow.MI_DevYellow",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
},
|
||||
"MI_LightGreen_TPWA": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Blocking/TriPlanarWorldAligned/MI_LightGreen_TPWA.MI_LightGreen_TPWA",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/Basics/MI_LightGreen.MI_LightGreen",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"tri_planar",
|
||||
"world_aligned"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
{
|
||||
"subfolder": "Decals",
|
||||
"source_path": "/Game/BlockingStarterPack/Materials/Decals",
|
||||
"count": 7,
|
||||
"completed": true,
|
||||
"materials": {
|
||||
"M_StainDecalColor": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Decals/M_StainDecalColor.M_StainDecalColor",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Decals/M_StainDecalColor.M_StainDecalColor",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"decal",
|
||||
"stain"
|
||||
]
|
||||
},
|
||||
"MI_StainDecalColorBlack": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Decals/MI_StainDecalColorBlack.MI_StainDecalColorBlack",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Decals/M_StainDecalColor.M_StainDecalColor",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#000000",
|
||||
"style_tags": [
|
||||
"decal",
|
||||
"stain"
|
||||
]
|
||||
},
|
||||
"MI_StainDecalColorBlue": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Decals/MI_StainDecalColorBlue.MI_StainDecalColorBlue",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Decals/M_StainDecalColor.M_StainDecalColor",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#0000FF",
|
||||
"style_tags": [
|
||||
"decal",
|
||||
"stain"
|
||||
]
|
||||
},
|
||||
"MI_StainDecalColorGreen": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Decals/MI_StainDecalColorGreen.MI_StainDecalColorGreen",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Decals/M_StainDecalColor.M_StainDecalColor",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 1.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#00FF00",
|
||||
"style_tags": [
|
||||
"decal",
|
||||
"stain"
|
||||
]
|
||||
},
|
||||
"MI_StainDecalColorRed": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Decals/MI_StainDecalColorRed.MI_StainDecalColorRed",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Decals/M_StainDecalColor.M_StainDecalColor",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FF0000",
|
||||
"style_tags": [
|
||||
"decal",
|
||||
"stain"
|
||||
]
|
||||
},
|
||||
"MI_StainDecalColorSkyBlue": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Decals/MI_StainDecalColorSkyBlue.MI_StainDecalColorSkyBlue",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Decals/M_StainDecalColor.M_StainDecalColor",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.4038,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#0067FF",
|
||||
"style_tags": [
|
||||
"decal",
|
||||
"stain"
|
||||
]
|
||||
},
|
||||
"MI_StainDecalColorYellow": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Decals/MI_StainDecalColorYellow.MI_StainDecalColorYellow",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Decals/M_StainDecalColor.M_StainDecalColor",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FFFF00",
|
||||
"style_tags": [
|
||||
"decal",
|
||||
"stain"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,354 @@
|
||||
{
|
||||
"subfolder": "Editor",
|
||||
"source_path": "/Game/BlockingStarterPack/Materials/Editor",
|
||||
"count": 8,
|
||||
"completed": true,
|
||||
"materials": {
|
||||
"M_DevTriggerView": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Editor/M_DevTriggerView.M_DevTriggerView",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Editor/M_DevTriggerView.M_DevTriggerView",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"editor",
|
||||
"debug"
|
||||
]
|
||||
},
|
||||
"MI_DevArrowMoving": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Editor/MI_DevArrowMoving.MI_DevArrowMoving",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Editor/M_DevTriggerView.M_DevTriggerView",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "ColorA",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ColorB",
|
||||
"value": {
|
||||
"r": 0.0571,
|
||||
"g": 0.3069,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "CoordX",
|
||||
"value": 6.0
|
||||
},
|
||||
{
|
||||
"name": "CoordY",
|
||||
"value": 6.0
|
||||
},
|
||||
{
|
||||
"name": "CustomPannerTime",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "SpeedY",
|
||||
"value": -1.0
|
||||
},
|
||||
{
|
||||
"name": "PulseMin",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "PulseSpeed",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#000000",
|
||||
"style_tags": [
|
||||
"editor",
|
||||
"debug"
|
||||
]
|
||||
},
|
||||
"MI_DevArrowMoving2": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Editor/MI_DevArrowMoving2.MI_DevArrowMoving2",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Editor/M_DevTriggerView.M_DevTriggerView",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "ColorA",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ColorB",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.4833,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "CoordX",
|
||||
"value": 6.0
|
||||
},
|
||||
{
|
||||
"name": "CoordY",
|
||||
"value": 6.0
|
||||
},
|
||||
{
|
||||
"name": "DepthFadeDistance",
|
||||
"value": 15.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "CustomPannerTime",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "SpeedX",
|
||||
"value": -4.0
|
||||
},
|
||||
{
|
||||
"name": "SpeedY",
|
||||
"value": 0.1
|
||||
},
|
||||
{
|
||||
"name": "PulseMin",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "PulseSpeed",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "CustomRotationTime",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#000000",
|
||||
"style_tags": [
|
||||
"editor",
|
||||
"debug"
|
||||
]
|
||||
},
|
||||
"MI_DevArrowMoving3": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Editor/MI_DevArrowMoving3.MI_DevArrowMoving3",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Editor/M_DevTriggerView.M_DevTriggerView",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "ColorA",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ColorB",
|
||||
"value": {
|
||||
"r": 0.338,
|
||||
"g": 0.0981,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "CoordX",
|
||||
"value": 6.0
|
||||
},
|
||||
{
|
||||
"name": "CoordY",
|
||||
"value": 6.0
|
||||
},
|
||||
{
|
||||
"name": "CustomPannerTime",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "SpeedY",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "CustomRotationTime",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#000000",
|
||||
"style_tags": [
|
||||
"editor",
|
||||
"debug"
|
||||
]
|
||||
},
|
||||
"MI_DevTriggerViewBlue": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Editor/MI_DevTriggerViewBlue.MI_DevTriggerViewBlue",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Editor/M_DevTriggerView.M_DevTriggerView",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "ColorB",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.2832,
|
||||
"b": 1.0,
|
||||
"a": 0.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#0048FF",
|
||||
"style_tags": [
|
||||
"editor",
|
||||
"debug"
|
||||
]
|
||||
},
|
||||
"MI_DevTriggerViewGreen": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Editor/MI_DevTriggerViewGreen.MI_DevTriggerViewGreen",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Editor/M_DevTriggerView.M_DevTriggerView",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "ColorB",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 1.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#00FF00",
|
||||
"style_tags": [
|
||||
"editor",
|
||||
"debug"
|
||||
]
|
||||
},
|
||||
"MI_DevTriggerViewOrange": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Editor/MI_DevTriggerViewOrange.MI_DevTriggerViewOrange",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Editor/M_DevTriggerView.M_DevTriggerView",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "ColorB",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.5,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FF8000",
|
||||
"style_tags": [
|
||||
"editor",
|
||||
"debug"
|
||||
]
|
||||
},
|
||||
"MI_DevTriggerViewRed": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Editor/MI_DevTriggerViewRed.MI_DevTriggerViewRed",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Editor/M_DevTriggerView.M_DevTriggerView",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "ColorB",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FF0000",
|
||||
"style_tags": [
|
||||
"editor",
|
||||
"debug"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,665 @@
|
||||
{
|
||||
"subfolder": "Glass",
|
||||
"source_path": "/Game/BlockingStarterPack/Materials/Glass",
|
||||
"count": 11,
|
||||
"completed": true,
|
||||
"materials": {
|
||||
"M_DevGlass": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
},
|
||||
"MI_DevGlassBlue": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/MI_DevGlassBlue.MI_DevGlassBlue",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.6714,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "GlassColor",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.6714,
|
||||
"b": 1.0,
|
||||
"a": 0.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "Wire Opacity",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#00ABFF",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
},
|
||||
"MI_DevGlassGreen": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/MI_DevGlassGreen.MI_DevGlassGreen",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 1.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "GlassColor",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 1.0,
|
||||
"b": 0.0,
|
||||
"a": 0.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "Wire Opacity",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#00FF00",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
},
|
||||
"MI_DevGlassMetalBlue": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/MI_DevGlassMetalBlue.MI_DevGlassMetalBlue",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.6714,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "GlassColor",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.6714,
|
||||
"b": 1.0,
|
||||
"a": 0.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "Wire Opacity",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#00ABFF",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
},
|
||||
"MI_DevGlassMetalGreen": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/MI_DevGlassMetalGreen.MI_DevGlassMetalGreen",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 1.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "GlassColor",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 1.0,
|
||||
"b": 0.0,
|
||||
"a": 0.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "Wire Opacity",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#00FF00",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
},
|
||||
"MI_DevGlassMetalRed": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/MI_DevGlassMetalRed.MI_DevGlassMetalRed",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "GlassColor",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 0.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "Wire Opacity",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FF0000",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
},
|
||||
"MI_DevGlassMetalWhite": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/MI_DevGlassMetalWhite.MI_DevGlassMetalWhite",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 0.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "GlassColor",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 0.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "Wire Opacity",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FFFFFF",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
},
|
||||
"MI_DevGlassMetalWhiteSoft": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/MI_DevGlassMetalWhiteSoft.MI_DevGlassMetalWhiteSoft",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.08
|
||||
},
|
||||
{
|
||||
"name": "Wire Opacity",
|
||||
"value": 0.12
|
||||
},
|
||||
{
|
||||
"name": "OpacityMax",
|
||||
"value": 0.12
|
||||
},
|
||||
{
|
||||
"name": "OpacityMin",
|
||||
"value": 0.08
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FFFFFF",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
},
|
||||
"MI_DevGlassRed": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/MI_DevGlassRed.MI_DevGlassRed",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "GlassColor",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 0.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "Wire Opacity",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FF0000",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
},
|
||||
"MI_DevGlassWhite": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/MI_DevGlassWhite.MI_DevGlassWhite",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "GlassColor",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 0.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.4
|
||||
},
|
||||
{
|
||||
"name": "Wire Opacity",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#000000",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
},
|
||||
"MI_DevGlassWhiteSoft": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Glass/MI_DevGlassWhiteSoft.MI_DevGlassWhiteSoft",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Glass/M_DevGlass.M_DevGlass",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Metallic",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Specular",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Opacity",
|
||||
"value": 0.08
|
||||
},
|
||||
{
|
||||
"name": "Wire Opacity",
|
||||
"value": 0.12
|
||||
},
|
||||
{
|
||||
"name": "OpacityMax",
|
||||
"value": 0.12
|
||||
},
|
||||
{
|
||||
"name": "OpacityMin",
|
||||
"value": 0.08
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"glass",
|
||||
"transparent"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,302 @@
|
||||
{
|
||||
"subfolder": "Light",
|
||||
"source_path": "/Game/BlockingStarterPack/Materials/Light",
|
||||
"count": 9,
|
||||
"completed": true,
|
||||
"materials": {
|
||||
"M_DevLight": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Light/M_DevLight.M_DevLight",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Light/M_DevLight.M_DevLight",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"MI_DevLight_Green": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Light/MI_DevLight_Green.MI_DevLight_Green",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Light/M_DevLight.M_DevLight",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 1.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#00FF00",
|
||||
"style_tags": [
|
||||
"emissive",
|
||||
"light_color"
|
||||
]
|
||||
},
|
||||
"MI_DevLight_NaturalBlue": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Light/MI_DevLight_NaturalBlue.MI_DevLight_NaturalBlue",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Light/M_DevLight.M_DevLight",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.4169,
|
||||
"g": 0.5275,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#6A87FF",
|
||||
"style_tags": [
|
||||
"emissive",
|
||||
"light_color"
|
||||
]
|
||||
},
|
||||
"MI_DevLight_NaturalOrange": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Light/MI_DevLight_NaturalOrange.MI_DevLight_NaturalOrange",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Light/M_DevLight.M_DevLight",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.5116,
|
||||
"b": 0.3404,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FF8257",
|
||||
"style_tags": [
|
||||
"emissive",
|
||||
"light_color"
|
||||
]
|
||||
},
|
||||
"MI_DevLight_NaturalWhite": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Light/MI_DevLight_NaturalWhite.MI_DevLight_NaturalWhite",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Light/M_DevLight.M_DevLight",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"emissive",
|
||||
"light_color"
|
||||
]
|
||||
},
|
||||
"MI_DevLight_NaturalYellow": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Light/MI_DevLight_NaturalYellow.MI_DevLight_NaturalYellow",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Light/M_DevLight.M_DevLight",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.8803,
|
||||
"b": 0.2678,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FFE044",
|
||||
"style_tags": [
|
||||
"emissive",
|
||||
"light_color"
|
||||
]
|
||||
},
|
||||
"MI_DevLight_Off": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Light/MI_DevLight_Off.MI_DevLight_Off",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Light/M_DevLight.M_DevLight",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.2344,
|
||||
"g": 0.2344,
|
||||
"b": 0.2344,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "DirtScale",
|
||||
"value": 0.1
|
||||
},
|
||||
{
|
||||
"name": "Dirt Normal Scale",
|
||||
"value": 0.01
|
||||
},
|
||||
{
|
||||
"name": "Roughness",
|
||||
"value": 0.1
|
||||
},
|
||||
{
|
||||
"name": "Wire Roughness",
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"name": "Metallic",
|
||||
"value": 0.9
|
||||
},
|
||||
{
|
||||
"name": "Light Intensity",
|
||||
"value": 0.0
|
||||
},
|
||||
{
|
||||
"name": "WiresPower",
|
||||
"value": 2.0
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#3C3C3C",
|
||||
"style_tags": [
|
||||
"emissive",
|
||||
"light_color"
|
||||
]
|
||||
},
|
||||
"MI_DevLight_Red": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Light/MI_DevLight_Red.MI_DevLight_Red",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Light/M_DevLight.M_DevLight",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Light Intensity",
|
||||
"value": 2.2
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#FF0000",
|
||||
"style_tags": [
|
||||
"emissive",
|
||||
"light_color"
|
||||
]
|
||||
},
|
||||
"MI_DevLight_SkyBlue": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/Light/MI_DevLight_SkyBlue.MI_DevLight_SkyBlue",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Light/M_DevLight.M_DevLight",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.4038,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#0067FF",
|
||||
"style_tags": [
|
||||
"emissive",
|
||||
"light_color"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"subfolder": "Others/BlockingTooltip",
|
||||
"source_path": "/Game/BlockingStarterPack/Materials/Others/BlockingTooltip",
|
||||
"count": 2,
|
||||
"completed": true,
|
||||
"materials": {
|
||||
"M_BlockingTooltipBase": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Blueprints/Others/BlockingTooltip/M_BlockingTooltipBase.M_BlockingTooltipBase",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Blueprints/Others/BlockingTooltip/M_BlockingTooltipBase.M_BlockingTooltipBase",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"M_BlockingTooltipText": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Blueprints/Others/BlockingTooltip/M_BlockingTooltipText.M_BlockingTooltipText",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Blueprints/Others/BlockingTooltip/M_BlockingTooltipText.M_BlockingTooltipText",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"subfolder": "",
|
||||
"source_path": "/Game/BlockingStarterPack/Materials",
|
||||
"count": 5,
|
||||
"completed": true,
|
||||
"materials": {
|
||||
"M_OverviewLevelFloor": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Maps/M_OverviewLevelFloor.M_OverviewLevelFloor",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Maps/M_OverviewLevelFloor.M_OverviewLevelFloor",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"M_OverviewLevelFloor2": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Maps/M_OverviewLevelFloor2.M_OverviewLevelFloor2",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Maps/M_OverviewLevelFloor2.M_OverviewLevelFloor2",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"M_DevMirror": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/M_DevMirror.M_DevMirror",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/M_DevMirror.M_DevMirror",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"mirror",
|
||||
"reflective"
|
||||
]
|
||||
},
|
||||
"M_FullyBlack": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/M_FullyBlack.M_FullyBlack",
|
||||
"ue_class_type": "Material",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/M_FullyBlack.M_FullyBlack",
|
||||
"parameters": {
|
||||
"vector": [],
|
||||
"scalar": []
|
||||
},
|
||||
"analysis_notes": [
|
||||
"基础 Material,参数需从实例推断"
|
||||
],
|
||||
"base_color_hex": "",
|
||||
"style_tags": [
|
||||
"special"
|
||||
]
|
||||
},
|
||||
"MI_DevGrid": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Materials/MI_DevGrid.MI_DevGrid",
|
||||
"ue_class_type": "MaterialInstanceConstant",
|
||||
"parent_material": "/Game/BlockingStarterPack/Materials/Blocking/M_BlockingMaterial.M_BlockingMaterial",
|
||||
"parameters": {
|
||||
"vector": [
|
||||
{
|
||||
"name": "Color",
|
||||
"value": {
|
||||
"r": 0.0,
|
||||
"g": 0.0,
|
||||
"b": 0.0,
|
||||
"a": 1.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Wire Color",
|
||||
"value": {
|
||||
"r": 1.0,
|
||||
"g": 1.0,
|
||||
"b": 1.0,
|
||||
"a": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"scalar": [
|
||||
{
|
||||
"name": "Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Roughness",
|
||||
"value": 0.55
|
||||
},
|
||||
{
|
||||
"name": "Roughness Checkers Multiply",
|
||||
"value": 0.9
|
||||
},
|
||||
{
|
||||
"name": "Wire Metallic",
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "Wire Roughness",
|
||||
"value": 0.198
|
||||
},
|
||||
{
|
||||
"name": "RefractionDepthBias",
|
||||
"value": 0.0
|
||||
}
|
||||
]
|
||||
},
|
||||
"analysis_notes": [],
|
||||
"base_color_hex": "#000000",
|
||||
"style_tags": [
|
||||
"grid",
|
||||
"debug"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,758 @@
|
||||
{
|
||||
"subfolder": "Architecture/BayWindows",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows",
|
||||
"count": 12,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_BayWindow_100x300": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindow_100x300.SM_BayWindow_100x300",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
100.0,
|
||||
3.969,
|
||||
300.0
|
||||
],
|
||||
"size": [
|
||||
100.0,
|
||||
7.936,
|
||||
300.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
49.999805450454005,
|
||||
0.0015639066696166992
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindow_100x400": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindow_100x400.SM_BayWindow_100x400",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
100.0,
|
||||
3.969,
|
||||
400.0
|
||||
],
|
||||
"size": [
|
||||
100.0,
|
||||
7.936,
|
||||
400.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
49.999805450454005,
|
||||
0.001555800437927246
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindow_200x300": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindow_200x300.SM_BayWindow_200x300",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
200.0,
|
||||
3.969,
|
||||
300.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
7.936,
|
||||
300.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
99.99980926515127,
|
||||
0.0015639066696166992
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindow_200x400": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindow_200x400.SM_BayWindow_200x400",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
200.0,
|
||||
3.969,
|
||||
400.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
7.936,
|
||||
400.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
99.99980926515127,
|
||||
0.001555800437927246
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindow_400x300": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindow_400x300.SM_BayWindow_400x300",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
400.0,
|
||||
3.969,
|
||||
300.0
|
||||
],
|
||||
"size": [
|
||||
400.0,
|
||||
7.936,
|
||||
300.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
199.99980163575674,
|
||||
0.0015639066696166992
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindow_400x400": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindow_400x400.SM_BayWindow_400x400",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
400.0,
|
||||
3.969,
|
||||
400.0
|
||||
],
|
||||
"size": [
|
||||
400.0,
|
||||
7.936,
|
||||
400.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
199.99980163575674,
|
||||
0.001555800437927246
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindowDoor_200x300": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindowDoor_200x300.SM_BayWindowDoor_200x300",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
200.0,
|
||||
3.969,
|
||||
300.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
7.936,
|
||||
300.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
99.99980926515127,
|
||||
0.001558065414428711
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindowDoor_200x400": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindowDoor_200x400.SM_BayWindowDoor_200x400",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
200.0,
|
||||
3.969,
|
||||
400.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
7.936,
|
||||
400.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
99.99980926515127,
|
||||
0.001555800437927246
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindowDoor_400x300": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindowDoor_400x300.SM_BayWindowDoor_400x300",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
400.0,
|
||||
3.969,
|
||||
300.0
|
||||
],
|
||||
"size": [
|
||||
400.0,
|
||||
7.936,
|
||||
300.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
199.99980163575674,
|
||||
0.001558065414428711
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindowDoor_400x400": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindowDoor_400x400.SM_BayWindowDoor_400x400",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
400.0,
|
||||
3.969,
|
||||
400.0
|
||||
],
|
||||
"size": [
|
||||
400.0,
|
||||
7.936,
|
||||
400.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
199.99980163575674,
|
||||
0.001555800437927246
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindowDoorDouble_400x300": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindowDoorDouble_400x300.SM_BayWindowDoorDouble_400x300",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
400.0,
|
||||
3.969,
|
||||
300.0
|
||||
],
|
||||
"size": [
|
||||
400.0,
|
||||
7.936,
|
||||
300.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
199.99980163575674,
|
||||
0.001558065414428711
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_BayWindowDoorDouble_400x400": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/BayWindows/SM_BayWindowDoorDouble_400x400.SM_BayWindowDoorDouble_400x400",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-0.0,
|
||||
-3.966,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
400.0,
|
||||
3.969,
|
||||
400.0
|
||||
],
|
||||
"size": [
|
||||
400.0,
|
||||
7.936,
|
||||
400.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
199.99980163575674,
|
||||
0.001555800437927246
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "Face",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "Join",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,350 @@
|
||||
{
|
||||
"subfolder": "Architecture/Beams",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Architecture/Beams",
|
||||
"count": 6,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_Beam_300": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Beams/SM_Beam_300.SM_Beam_300",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-20.0,
|
||||
-20.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
20.0,
|
||||
20.0,
|
||||
300.0
|
||||
],
|
||||
"size": [
|
||||
40.0,
|
||||
40.0,
|
||||
300.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-2.47955322265625e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"structure"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_Beam_400": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Beams/SM_Beam_400.SM_Beam_400",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-20.0,
|
||||
-20.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
20.0,
|
||||
20.0,
|
||||
400.0
|
||||
],
|
||||
"size": [
|
||||
40.0,
|
||||
40.0,
|
||||
400.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-3.24249267578125e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"structure"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_Beam_400_45d": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Beams/SM_Beam_400_45d.SM_Beam_400_45d",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-19.999,
|
||||
-419.999,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
20.001,
|
||||
-268.845,
|
||||
296.749
|
||||
],
|
||||
"size": [
|
||||
40.0,
|
||||
151.155,
|
||||
296.749
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0007476806640625,
|
||||
-344.4219055175781
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"structure"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_RoundedBeam_300": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Beams/SM_RoundedBeam_300.SM_RoundedBeam_300",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-30.0,
|
||||
-30.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
30.0,
|
||||
30.0,
|
||||
300.0
|
||||
],
|
||||
"size": [
|
||||
60.0,
|
||||
60.0,
|
||||
300.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-2.47955322265625e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"structure"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_RoundedBeam_400": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Beams/SM_RoundedBeam_400.SM_RoundedBeam_400",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-30.0,
|
||||
-30.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
30.0,
|
||||
30.0,
|
||||
400.0
|
||||
],
|
||||
"size": [
|
||||
60.0,
|
||||
60.0,
|
||||
400.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-3.4332275390625e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"structure"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_RoundedBeam_400_45d": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Beams/SM_RoundedBeam_400_45d.SM_RoundedBeam_400_45d",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-30.0,
|
||||
-429.981,
|
||||
-0.291
|
||||
],
|
||||
"max": [
|
||||
30.0,
|
||||
-261.934,
|
||||
303.597
|
||||
],
|
||||
"size": [
|
||||
60.0,
|
||||
168.047,
|
||||
303.888
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-1.71661376953125e-05,
|
||||
-345.957763671875
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"structure"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,939 @@
|
||||
{
|
||||
"subfolder": "Architecture/Doors",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors",
|
||||
"count": 16,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_DoorFrame": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_DoorFrame.SM_DoorFrame",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-66.0,
|
||||
-12.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
66.0,
|
||||
12.0,
|
||||
232.0
|
||||
],
|
||||
"size": [
|
||||
132.0,
|
||||
24.0,
|
||||
232.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-1.9073486328125e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_DoorFrameDouble": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_DoorFrameDouble.SM_DoorFrameDouble",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-116.0,
|
||||
-12.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
116.0,
|
||||
12.0,
|
||||
232.0
|
||||
],
|
||||
"size": [
|
||||
232.0,
|
||||
24.0,
|
||||
232.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-1.9073486328125e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_DoorFrameGarage": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_DoorFrameGarage.SM_DoorFrameGarage",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-166.0,
|
||||
-12.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
166.0,
|
||||
12.0,
|
||||
292.0
|
||||
],
|
||||
"size": [
|
||||
332.0,
|
||||
24.0,
|
||||
292.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-2.384185791015625e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_FakeDoor": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_FakeDoor.SM_FakeDoor",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-66.0,
|
||||
-0.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
66.0,
|
||||
12.0,
|
||||
232.0
|
||||
],
|
||||
"size": [
|
||||
132.0,
|
||||
12.0,
|
||||
232.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
5.999777317047119
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_FakeDoorDouble": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_FakeDoorDouble.SM_FakeDoorDouble",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-116.0,
|
||||
-0.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
116.0,
|
||||
12.0,
|
||||
232.0
|
||||
],
|
||||
"size": [
|
||||
232.0,
|
||||
12.0,
|
||||
232.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
7.62939453125e-06,
|
||||
5.999777317047119
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_FakeFrameGarage": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_FakeFrameGarage.SM_FakeFrameGarage",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-166.0,
|
||||
-0.002,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
166.0,
|
||||
12.0,
|
||||
292.0
|
||||
],
|
||||
"size": [
|
||||
332.0,
|
||||
12.002,
|
||||
292.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
5.998886585235596
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_GarageDoor_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_GarageDoor_01.SM_GarageDoor_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-150.0,
|
||||
-5.914,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
150.0,
|
||||
5.914,
|
||||
276.004
|
||||
],
|
||||
"size": [
|
||||
300.0,
|
||||
11.828,
|
||||
276.004
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-1.430511474609375e-06
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_GarageDoor_02": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_GarageDoor_02.SM_GarageDoor_02",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-150.0,
|
||||
-5.914,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
150.0,
|
||||
5.914,
|
||||
276.004
|
||||
],
|
||||
"size": [
|
||||
300.0,
|
||||
11.828,
|
||||
276.004
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-1.430511474609375e-06
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_GarageDoorOpen_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_GarageDoorOpen_01.SM_GarageDoorOpen_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-150.0,
|
||||
-224.485,
|
||||
219.986
|
||||
],
|
||||
"max": [
|
||||
150.0,
|
||||
5.914,
|
||||
296.388
|
||||
],
|
||||
"size": [
|
||||
300.0,
|
||||
230.398,
|
||||
76.401
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-109.28529357910156
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_GarageDoorOpen_02": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_GarageDoorOpen_02.SM_GarageDoorOpen_02",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-150.0,
|
||||
-224.484,
|
||||
219.981
|
||||
],
|
||||
"max": [
|
||||
150.0,
|
||||
5.914,
|
||||
296.388
|
||||
],
|
||||
"size": [
|
||||
300.0,
|
||||
230.398,
|
||||
76.407
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-0.00019073486328125,
|
||||
-109.28524470329285
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_LateralDoor": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_LateralDoor.SM_LateralDoor",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-10.0,
|
||||
-8.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
150.0,
|
||||
8.0,
|
||||
250.0
|
||||
],
|
||||
"size": [
|
||||
160.0,
|
||||
16.0,
|
||||
250.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
70.00001525878906,
|
||||
-2.574920654296875e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_LateralDoorFrame_150": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_LateralDoorFrame_150.SM_LateralDoorFrame_150",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-75.0,
|
||||
-55.236,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
75.0,
|
||||
55.236,
|
||||
250.0
|
||||
],
|
||||
"size": [
|
||||
150.0,
|
||||
110.473,
|
||||
250.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_LateralDoorFrame_300": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_LateralDoorFrame_300.SM_LateralDoorFrame_300",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-150.0,
|
||||
-55.236,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
150.0,
|
||||
55.236,
|
||||
250.0
|
||||
],
|
||||
"size": [
|
||||
300.0,
|
||||
110.473,
|
||||
250.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_RotativeDoor_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_RotativeDoor_01.SM_RotativeDoor_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-100.0,
|
||||
-12.0,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
0.0,
|
||||
11.991,
|
||||
216.0
|
||||
],
|
||||
"size": [
|
||||
100.0,
|
||||
23.991,
|
||||
216.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-49.99995422363281,
|
||||
-0.004532814025878906
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_RotativeDoor_02": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_RotativeDoor_02.SM_RotativeDoor_02",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-100.0,
|
||||
-12.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
0.0,
|
||||
11.991,
|
||||
216.0
|
||||
],
|
||||
"size": [
|
||||
100.0,
|
||||
23.991,
|
||||
216.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-49.99995422363281,
|
||||
-0.004460334777832031
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_RotativeDoor_03": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Doors/SM_RotativeDoor_03.SM_RotativeDoor_03",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-100.0,
|
||||
-12.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
0.0,
|
||||
11.991,
|
||||
216.0
|
||||
],
|
||||
"size": [
|
||||
100.0,
|
||||
23.991,
|
||||
216.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-49.99995422363281,
|
||||
-0.004532814025878906
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"door"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,584 @@
|
||||
{
|
||||
"subfolder": "Architecture/Stairs",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs",
|
||||
"count": 10,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_Stair_100": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs/SM_Stair_100.SM_Stair_100",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
0.0,
|
||||
-0.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
200.0,
|
||||
150.0,
|
||||
102.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
150.0,
|
||||
102.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
99.99999237056181,
|
||||
74.99992302650207
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"stair"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_Stair_200": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs/SM_Stair_200.SM_Stair_200",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
0.0,
|
||||
-0.0,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
200.0,
|
||||
300.0,
|
||||
202.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
300.0,
|
||||
202.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CORNER",
|
||||
"offset_xy": [
|
||||
99.99999237056181,
|
||||
149.99984621592557
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"stair"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_StairPlane_100": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs/SM_StairPlane_100.SM_StairPlane_100",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
0.0,
|
||||
-0.0,
|
||||
-20.0
|
||||
],
|
||||
"max": [
|
||||
200.0,
|
||||
150.0,
|
||||
102.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
150.0,
|
||||
122.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
99.99999237056181,
|
||||
74.99992302650207
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"stair",
|
||||
"vehicle"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_StairPlane_200": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs/SM_StairPlane_200.SM_StairPlane_200",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
0.0,
|
||||
-0.0,
|
||||
-20.0
|
||||
],
|
||||
"max": [
|
||||
200.0,
|
||||
300.0,
|
||||
202.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
300.0,
|
||||
222.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
99.99999237056181,
|
||||
149.99984621592557
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"stair",
|
||||
"vehicle"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_StairPlaneRounded_300_45d": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs/SM_StairPlaneRounded_300_45d.SM_StairPlaneRounded_300_45d",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-300.0,
|
||||
-212.132,
|
||||
-20.0
|
||||
],
|
||||
"max": [
|
||||
-70.71,
|
||||
-0.0,
|
||||
102.0
|
||||
],
|
||||
"size": [
|
||||
229.29,
|
||||
212.132,
|
||||
122.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-185.35503768920898,
|
||||
-106.06606129789725
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"stair",
|
||||
"vehicle"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_StairPlaneRounded_300_90d": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs/SM_StairPlaneRounded_300_90d.SM_StairPlaneRounded_300_90d",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-300.0,
|
||||
-300.0,
|
||||
-20.0
|
||||
],
|
||||
"max": [
|
||||
0.0,
|
||||
-0.0,
|
||||
202.0
|
||||
],
|
||||
"size": [
|
||||
300.0,
|
||||
300.0,
|
||||
222.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-149.9999389648583,
|
||||
-150.00014105534137
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"stair",
|
||||
"vehicle"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_StairPlaneRounded_400_45d": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs/SM_StairPlaneRounded_400_45d.SM_StairPlaneRounded_400_45d",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-400.0,
|
||||
-282.842,
|
||||
-20.0
|
||||
],
|
||||
"max": [
|
||||
-141.42,
|
||||
-0.0,
|
||||
102.0
|
||||
],
|
||||
"size": [
|
||||
258.58,
|
||||
282.842,
|
||||
122.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-270.71009063720703,
|
||||
-141.4214359519974
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"stair",
|
||||
"vehicle"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_StairPlaneRounded_400_90d": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs/SM_StairPlaneRounded_400_90d.SM_StairPlaneRounded_400_90d",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-400.0,
|
||||
-400.0,
|
||||
-20.0
|
||||
],
|
||||
"max": [
|
||||
0.0,
|
||||
-0.0,
|
||||
202.0
|
||||
],
|
||||
"size": [
|
||||
400.0,
|
||||
400.0,
|
||||
222.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-199.9999023437631,
|
||||
-200.0001722176312
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"stair",
|
||||
"vehicle"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_StairRounded_300_45d": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs/SM_StairRounded_300_45d.SM_StairRounded_300_45d",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-300.0,
|
||||
-212.132,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
-70.711,
|
||||
-0.0,
|
||||
102.0
|
||||
],
|
||||
"size": [
|
||||
229.289,
|
||||
212.132,
|
||||
102.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-185.35552597045898,
|
||||
-106.066326141241
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"stair"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_StairRounded_300_90d": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/Stairs/SM_StairRounded_300_90d.SM_StairRounded_300_90d",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-300.0,
|
||||
-300.001,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
-0.001,
|
||||
-0.0,
|
||||
202.0
|
||||
],
|
||||
"size": [
|
||||
299.999,
|
||||
300.001,
|
||||
202.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-150.00024414039217,
|
||||
-150.00042724603554
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"stair"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,491 @@
|
||||
{
|
||||
"subfolder": "Architecture/WindowsSet",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Architecture/WindowsSet",
|
||||
"count": 9,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_FakeWindowsFrame": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/WindowsSet/SM_FakeWindowsFrame.SM_FakeWindowsFrame",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-70.0,
|
||||
0.001,
|
||||
96.0
|
||||
],
|
||||
"max": [
|
||||
70.0,
|
||||
14.0,
|
||||
260.0
|
||||
],
|
||||
"size": [
|
||||
140.0,
|
||||
13.999,
|
||||
164.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
6.103515625e-05,
|
||||
7.000284671783447
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_FakeWindowsFrameDouble": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/WindowsSet/SM_FakeWindowsFrameDouble.SM_FakeWindowsFrameDouble",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-140.0,
|
||||
0.001,
|
||||
96.0
|
||||
],
|
||||
"max": [
|
||||
140.0,
|
||||
14.0,
|
||||
260.0
|
||||
],
|
||||
"size": [
|
||||
280.0,
|
||||
13.999,
|
||||
164.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
6.103515625e-05,
|
||||
7.000284671783447
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_FakeWindowsFrameUp": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/WindowsSet/SM_FakeWindowsFrameUp.SM_FakeWindowsFrameUp",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-70.0,
|
||||
0.001,
|
||||
206.0
|
||||
],
|
||||
"max": [
|
||||
70.0,
|
||||
14.0,
|
||||
280.0
|
||||
],
|
||||
"size": [
|
||||
140.0,
|
||||
13.999,
|
||||
74.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
6.103515625e-05,
|
||||
7.000274658203125
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_WindowsFrame": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/WindowsSet/SM_WindowsFrame.SM_WindowsFrame",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-70.0,
|
||||
-8.0,
|
||||
96.0
|
||||
],
|
||||
"max": [
|
||||
70.0,
|
||||
14.0,
|
||||
260.0
|
||||
],
|
||||
"size": [
|
||||
140.0,
|
||||
22.0,
|
||||
164.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
6.103515625e-05,
|
||||
3.000041961669922
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_WindowsFrameDouble": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/WindowsSet/SM_WindowsFrameDouble.SM_WindowsFrameDouble",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-140.0,
|
||||
-8.0,
|
||||
96.0
|
||||
],
|
||||
"max": [
|
||||
140.0,
|
||||
14.0,
|
||||
260.0
|
||||
],
|
||||
"size": [
|
||||
280.0,
|
||||
22.0,
|
||||
164.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0001220703125,
|
||||
3.000041961669922
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_WindowsFrameUp": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/WindowsSet/SM_WindowsFrameUp.SM_WindowsFrameUp",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-70.0,
|
||||
-8.0,
|
||||
206.0
|
||||
],
|
||||
"max": [
|
||||
70.0,
|
||||
14.0,
|
||||
280.0
|
||||
],
|
||||
"size": [
|
||||
140.0,
|
||||
22.0,
|
||||
74.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
6.103515625e-05,
|
||||
3.0000243186950684
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_WindowsGlass": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/WindowsSet/SM_WindowsGlass.SM_WindowsGlass",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-60.0,
|
||||
-2.5,
|
||||
114.0
|
||||
],
|
||||
"max": [
|
||||
60.0,
|
||||
-0.5,
|
||||
248.0
|
||||
],
|
||||
"size": [
|
||||
120.0,
|
||||
2.0,
|
||||
134.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
6.103515625e-05,
|
||||
-1.4999669641256332
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_WindowsGlassDouble": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/WindowsSet/SM_WindowsGlassDouble.SM_WindowsGlassDouble",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-130.014,
|
||||
-2.5,
|
||||
114.0
|
||||
],
|
||||
"max": [
|
||||
130.0,
|
||||
-0.5,
|
||||
248.0
|
||||
],
|
||||
"size": [
|
||||
260.015,
|
||||
2.0,
|
||||
134.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-0.0072021484375,
|
||||
-1.499966949224472
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
},
|
||||
"SM_WindowsGlassUp": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Architecture/WindowsSet/SM_WindowsGlassUp.SM_WindowsGlassUp",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-60.0,
|
||||
-2.5,
|
||||
224.0
|
||||
],
|
||||
"max": [
|
||||
60.0,
|
||||
-0.5,
|
||||
268.0
|
||||
],
|
||||
"size": [
|
||||
120.0,
|
||||
2.0,
|
||||
44.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
6.103515625e-05,
|
||||
-1.4999776035547256
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevGlass",
|
||||
"material_name": "MI_DevGlassMetalWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"window"
|
||||
],
|
||||
"scene_tags": [
|
||||
"architecture",
|
||||
"construction"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
{
|
||||
"subfolder": "Bathroom",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Bathroom",
|
||||
"count": 3,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_Toilet_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Bathroom/SM_Toilet_01.SM_Toilet_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-27.592,
|
||||
-0.098,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
27.592,
|
||||
83.459,
|
||||
110.281
|
||||
],
|
||||
"size": [
|
||||
55.184,
|
||||
83.557,
|
||||
110.281
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
41.68029033765197
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"bathroom"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_ToiletClosed_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Bathroom/SM_ToiletClosed_01.SM_ToiletClosed_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-27.592,
|
||||
-0.098,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
27.592,
|
||||
83.459,
|
||||
91.443
|
||||
],
|
||||
"size": [
|
||||
55.184,
|
||||
83.557,
|
||||
91.443
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
41.680294152349234
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"bathroom"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_Urinal_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Bathroom/SM_Urinal_01.SM_Urinal_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-15.94,
|
||||
-0.0,
|
||||
27.933
|
||||
],
|
||||
"max": [
|
||||
15.94,
|
||||
33.936,
|
||||
114.852
|
||||
],
|
||||
"size": [
|
||||
31.88,
|
||||
33.936,
|
||||
86.92
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
16.967912854770475
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"bathroom"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,297 @@
|
||||
{
|
||||
"subfolder": "Bedroom",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Bedroom",
|
||||
"count": 5,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_BedDouble": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Bedroom/SM_BedDouble.SM_BedDouble",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-85.077,
|
||||
-1.573,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
87.896,
|
||||
217.212,
|
||||
66.416
|
||||
],
|
||||
"size": [
|
||||
172.972,
|
||||
218.785,
|
||||
66.416
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
1.4094047546386719,
|
||||
107.81991690397263
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"bed"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_BedDouble_Empty": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Bedroom/SM_BedDouble_Empty.SM_BedDouble_Empty",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-80.585,
|
||||
1.886,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
79.585,
|
||||
210.114,
|
||||
48.479
|
||||
],
|
||||
"size": [
|
||||
160.171,
|
||||
208.228,
|
||||
48.479
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-0.5,
|
||||
106.0000130534172
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"bed"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_BedSingle": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Bedroom/SM_BedSingle.SM_BedSingle",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-57.178,
|
||||
-1.195,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
58.988,
|
||||
214.822,
|
||||
68.025
|
||||
],
|
||||
"size": [
|
||||
116.166,
|
||||
216.018,
|
||||
68.025
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.9050865173339844,
|
||||
106.81362241506577
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"bed"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_BedSingle_Empty": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Bedroom/SM_BedSingle_Empty.SM_BedSingle_Empty",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-54.182,
|
||||
1.886,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
54.182,
|
||||
210.114,
|
||||
48.407
|
||||
],
|
||||
"size": [
|
||||
108.364,
|
||||
208.228,
|
||||
48.407
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
106.0000130534172
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"bed"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_Cushion": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Bedroom/SM_Cushion.SM_Cushion",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-35.539,
|
||||
-25.104,
|
||||
-0.22
|
||||
],
|
||||
"max": [
|
||||
35.705,
|
||||
24.997,
|
||||
22.522
|
||||
],
|
||||
"size": [
|
||||
71.244,
|
||||
50.1,
|
||||
22.741
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.08307075500488281,
|
||||
-0.05356788635253906
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,257 @@
|
||||
{
|
||||
"subfolder": "BigBuildings",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/BigBuildings",
|
||||
"count": 4,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_Building_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/BigBuildings/SM_Building_01.SM_Building_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-925.0,
|
||||
-725.001,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
1025.0,
|
||||
724.999,
|
||||
4009.68
|
||||
],
|
||||
"size": [
|
||||
1950.0,
|
||||
1450.0,
|
||||
4009.68
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
50.0001220703125,
|
||||
-0.00091552734375
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"outdoor",
|
||||
"building"
|
||||
]
|
||||
},
|
||||
"SM_Building_02": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/BigBuildings/SM_Building_02.SM_Building_02",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-1217.678,
|
||||
-817.678,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
917.678,
|
||||
817.677,
|
||||
3606.386
|
||||
],
|
||||
"size": [
|
||||
2135.355,
|
||||
1635.355,
|
||||
3606.387
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-150.00003051757812,
|
||||
-0.00054931640625
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"outdoor",
|
||||
"building"
|
||||
]
|
||||
},
|
||||
"SM_Building_03": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/BigBuildings/SM_Building_03.SM_Building_03",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-724.999,
|
||||
-625.001,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
825.001,
|
||||
624.999,
|
||||
3420.0
|
||||
],
|
||||
"size": [
|
||||
1550.0,
|
||||
1250.0,
|
||||
3420.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
50.000946044921875,
|
||||
-0.000579833984375
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 4
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 3,
|
||||
"slot_name": "WorldGridMaterial",
|
||||
"material_name": "WorldGridMaterial"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"outdoor",
|
||||
"building"
|
||||
]
|
||||
},
|
||||
"SM_Building_04": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/BigBuildings/SM_Building_04.SM_Building_04",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-423.097,
|
||||
-607.678,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
517.678,
|
||||
623.097,
|
||||
2320.0
|
||||
],
|
||||
"size": [
|
||||
940.775,
|
||||
1230.775,
|
||||
2320.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
47.29034423828125,
|
||||
7.709259033203125
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"outdoor",
|
||||
"building"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,448 @@
|
||||
{
|
||||
"subfolder": "DisplayPanels",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/DisplayPanels",
|
||||
"count": 8,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_DisplayPanels_100x100": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/DisplayPanels/SM_DisplayPanels_100x100.SM_DisplayPanels_100x100",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-50.0,
|
||||
-0.0,
|
||||
-50.0
|
||||
],
|
||||
"max": [
|
||||
50.0,
|
||||
8.0,
|
||||
50.0
|
||||
],
|
||||
"size": [
|
||||
100.0,
|
||||
8.0,
|
||||
100.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
3.9999978343316798
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DisplayPanelFace",
|
||||
"material_name": "MI_DisplayPanelFace"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"display"
|
||||
],
|
||||
"scene_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"SM_DisplayPanels_100x50": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/DisplayPanels/SM_DisplayPanels_100x50.SM_DisplayPanels_100x50",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-50.0,
|
||||
-0.0,
|
||||
-25.0
|
||||
],
|
||||
"max": [
|
||||
50.0,
|
||||
8.0,
|
||||
25.0
|
||||
],
|
||||
"size": [
|
||||
100.0,
|
||||
8.0,
|
||||
50.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
3.999997963491296
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DisplayPanelFace",
|
||||
"material_name": "MI_DisplayPanelFace"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"display"
|
||||
],
|
||||
"scene_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"SM_DisplayPanels_200x100": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/DisplayPanels/SM_DisplayPanels_200x100.SM_DisplayPanels_200x100",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-100.0,
|
||||
-0.0,
|
||||
-50.0
|
||||
],
|
||||
"max": [
|
||||
100.0,
|
||||
8.0,
|
||||
50.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
8.0,
|
||||
100.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
3.9999978343316798
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DisplayPanelFace",
|
||||
"material_name": "MI_DisplayPanelFace"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"display"
|
||||
],
|
||||
"scene_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"SM_DisplayPanels_200x200": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/DisplayPanels/SM_DisplayPanels_200x200.SM_DisplayPanels_200x200",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-100.0,
|
||||
-0.0,
|
||||
-100.0
|
||||
],
|
||||
"max": [
|
||||
100.0,
|
||||
8.0,
|
||||
100.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
8.0,
|
||||
200.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
3.9999980528491506
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DisplayPanelFace",
|
||||
"material_name": "MI_DisplayPanelFace"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"display"
|
||||
],
|
||||
"scene_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"SM_DisplayPanels_200x50": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/DisplayPanels/SM_DisplayPanels_200x50.SM_DisplayPanels_200x50",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-100.0,
|
||||
-0.0,
|
||||
-25.0
|
||||
],
|
||||
"max": [
|
||||
100.0,
|
||||
8.0,
|
||||
25.0
|
||||
],
|
||||
"size": [
|
||||
200.0,
|
||||
8.0,
|
||||
50.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
3.999997963491296
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DisplayPanelFace",
|
||||
"material_name": "MI_DisplayPanelFace"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"display"
|
||||
],
|
||||
"scene_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"SM_DisplayPanels_400x100": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/DisplayPanels/SM_DisplayPanels_400x100.SM_DisplayPanels_400x100",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-200.0,
|
||||
-0.0,
|
||||
-50.0
|
||||
],
|
||||
"max": [
|
||||
200.0,
|
||||
8.0,
|
||||
50.0
|
||||
],
|
||||
"size": [
|
||||
400.0,
|
||||
8.0,
|
||||
100.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
3.9999978343316798
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DisplayPanelFace",
|
||||
"material_name": "MI_DisplayPanelFace"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"display"
|
||||
],
|
||||
"scene_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"SM_DisplayPanels_400x200": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/DisplayPanels/SM_DisplayPanels_400x200.SM_DisplayPanels_400x200",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-200.0,
|
||||
-0.0,
|
||||
-100.0
|
||||
],
|
||||
"max": [
|
||||
200.0,
|
||||
8.0,
|
||||
100.0
|
||||
],
|
||||
"size": [
|
||||
400.0,
|
||||
8.0,
|
||||
200.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
3.9999980528491506
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DisplayPanelFace",
|
||||
"material_name": "MI_DisplayPanelFace"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"display"
|
||||
],
|
||||
"scene_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
},
|
||||
"SM_DisplayPanels_50x50": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/DisplayPanels/SM_DisplayPanels_50x50.SM_DisplayPanels_50x50",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-25.0,
|
||||
-0.0,
|
||||
-25.0
|
||||
],
|
||||
"max": [
|
||||
25.0,
|
||||
8.0,
|
||||
25.0
|
||||
],
|
||||
"size": [
|
||||
50.0,
|
||||
8.0,
|
||||
50.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
-9.5367431640625e-07,
|
||||
3.999997963491296
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DisplayPanelFace",
|
||||
"material_name": "MI_DisplayPanelFace"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"display"
|
||||
],
|
||||
"scene_tags": [
|
||||
"unclassified"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,968 @@
|
||||
{
|
||||
"subfolder": "Extra",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Extra",
|
||||
"count": 18,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_ArrowBack": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_ArrowBack.SM_ArrowBack",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-10.0,
|
||||
-10.0,
|
||||
-5.0
|
||||
],
|
||||
"max": [
|
||||
0.0,
|
||||
10.0,
|
||||
5.0
|
||||
],
|
||||
"size": [
|
||||
10.0,
|
||||
20.0,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
-4.999997138977051,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_ArrowBody": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_ArrowBody.SM_ArrowBody",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
0.0,
|
||||
-10.0,
|
||||
-5.0
|
||||
],
|
||||
"max": [
|
||||
100.0,
|
||||
10.0,
|
||||
5.0
|
||||
],
|
||||
"size": [
|
||||
100.0,
|
||||
20.0,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
50.00000762939453,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_ArrowHead": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_ArrowHead.SM_ArrowHead",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-9.367,
|
||||
-35.168,
|
||||
-5.0
|
||||
],
|
||||
"max": [
|
||||
39.756,
|
||||
35.168,
|
||||
5.0
|
||||
],
|
||||
"size": [
|
||||
49.123,
|
||||
70.337,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
15.194007873535156,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_Campfire": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_Campfire.SM_Campfire",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-46.862,
|
||||
-48.376,
|
||||
-2.0
|
||||
],
|
||||
"max": [
|
||||
43.333,
|
||||
38.984,
|
||||
44.874
|
||||
],
|
||||
"size": [
|
||||
90.195,
|
||||
87.36,
|
||||
46.874
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
-1.7647247314453125,
|
||||
-4.695959091186523
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 4,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevBrown",
|
||||
"material_name": "MI_DevBrown"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_CirclePlatform": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_CirclePlatform.SM_CirclePlatform",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-48.142,
|
||||
-48.142,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
48.142,
|
||||
48.142,
|
||||
4.127
|
||||
],
|
||||
"size": [
|
||||
96.284,
|
||||
96.284,
|
||||
4.127
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
-1.52587890625e-05,
|
||||
1.9073486328125e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_HumanCage": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_HumanCage.SM_HumanCage",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-103.85,
|
||||
-103.85,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
103.85,
|
||||
105.0,
|
||||
252.0
|
||||
],
|
||||
"size": [
|
||||
207.7,
|
||||
208.85,
|
||||
252.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
0.574981689453125
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 4,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"character",
|
||||
"reference"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_HumanCageWithFloor": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_HumanCageWithFloor.SM_HumanCageWithFloor",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-104.145,
|
||||
-104.669,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
104.145,
|
||||
105.0,
|
||||
255.0
|
||||
],
|
||||
"size": [
|
||||
208.29,
|
||||
209.669,
|
||||
255.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
0.1656494140625
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 4,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"floor",
|
||||
"character",
|
||||
"reference"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_HumanMesh_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_HumanMesh_01.SM_HumanMesh_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-32.505,
|
||||
-48.533,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
27.722,
|
||||
58.396,
|
||||
180.588
|
||||
],
|
||||
"size": [
|
||||
60.227,
|
||||
106.929,
|
||||
180.588
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
-2.3918581008911133,
|
||||
4.931615829467773
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"character",
|
||||
"reference"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_HumanMesh_02": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_HumanMesh_02.SM_HumanMesh_02",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-32.505,
|
||||
-48.533,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
27.722,
|
||||
58.396,
|
||||
180.871
|
||||
],
|
||||
"size": [
|
||||
60.227,
|
||||
106.929,
|
||||
180.871
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
-2.3918581008911133,
|
||||
4.931615829467773
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"character",
|
||||
"reference"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_Ladder_01_200": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_Ladder_01_200.SM_Ladder_01_200",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-26.0,
|
||||
-0.0,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
26.0,
|
||||
10.0,
|
||||
200.0
|
||||
],
|
||||
"size": [
|
||||
52.0,
|
||||
10.0,
|
||||
200.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
1.71661376953125e-05,
|
||||
5.000001283501206
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"structure"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_Ladder_01_Unit": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_Ladder_01_Unit.SM_Ladder_01_Unit",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-26.0,
|
||||
-0.0,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
26.0,
|
||||
10.0,
|
||||
50.0
|
||||
],
|
||||
"size": [
|
||||
52.0,
|
||||
10.0,
|
||||
50.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
5.7220458984375e-06,
|
||||
5.000001283503707
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"structure"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_Ladder_02_200": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_Ladder_02_200.SM_Ladder_02_200",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-25.242,
|
||||
-0.0,
|
||||
8.332
|
||||
],
|
||||
"max": [
|
||||
26.242,
|
||||
17.706,
|
||||
191.668
|
||||
],
|
||||
"size": [
|
||||
51.484,
|
||||
17.706,
|
||||
183.337
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.5000038146972656,
|
||||
8.852973078735886
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"structure"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_Ladder_02_Unit": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_Ladder_02_Unit.SM_Ladder_02_Unit",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-25.242,
|
||||
-0.0,
|
||||
-1.668
|
||||
],
|
||||
"max": [
|
||||
26.242,
|
||||
17.706,
|
||||
1.668
|
||||
],
|
||||
"size": [
|
||||
51.484,
|
||||
17.706,
|
||||
3.337
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.5000038146972656,
|
||||
8.85298950987351
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"architecture",
|
||||
"structure"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_SnowMan_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_SnowMan_01.SM_SnowMan_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-80.553,
|
||||
-47.722,
|
||||
-0.609
|
||||
],
|
||||
"max": [
|
||||
73.401,
|
||||
46.405,
|
||||
144.594
|
||||
],
|
||||
"size": [
|
||||
153.954,
|
||||
94.127,
|
||||
145.203
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
-3.5764617919921875,
|
||||
-0.6583805084228516
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 4
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 3,
|
||||
"slot_name": "MI_DevBrown",
|
||||
"material_name": "MI_DevBrown"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_SpikedBall_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_SpikedBall_01.SM_SpikedBall_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-95.153,
|
||||
-90.584,
|
||||
-77.056
|
||||
],
|
||||
"max": [
|
||||
95.153,
|
||||
90.584,
|
||||
77.056
|
||||
],
|
||||
"size": [
|
||||
190.307,
|
||||
181.167,
|
||||
154.111
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_SpikedBall_02": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_SpikedBall_02.SM_SpikedBall_02",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-98.749,
|
||||
-93.916,
|
||||
-95.386
|
||||
],
|
||||
"max": [
|
||||
98.749,
|
||||
93.916,
|
||||
95.386
|
||||
],
|
||||
"size": [
|
||||
197.498,
|
||||
187.832,
|
||||
190.773
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_SquarePlatform": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_SquarePlatform.SM_SquarePlatform",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-48.142,
|
||||
-48.142,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
48.142,
|
||||
48.142,
|
||||
4.127
|
||||
],
|
||||
"size": [
|
||||
96.284,
|
||||
96.284,
|
||||
4.127
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_Tooltip": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/SM_Tooltip.SM_Tooltip",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-90.476,
|
||||
-10.216,
|
||||
-90.476
|
||||
],
|
||||
"max": [
|
||||
90.476,
|
||||
10.217,
|
||||
90.476
|
||||
],
|
||||
"size": [
|
||||
180.952,
|
||||
20.433,
|
||||
180.952
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
8.58306884765625e-06
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 4,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
{
|
||||
"subfolder": "Extra/Camera",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Extra/Camera",
|
||||
"count": 4,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_CameraPose_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/Camera/SM_CameraPose_01.SM_CameraPose_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-28.738,
|
||||
-0.0,
|
||||
-5.0
|
||||
],
|
||||
"max": [
|
||||
9.707,
|
||||
36.052,
|
||||
19.577
|
||||
],
|
||||
"size": [
|
||||
38.444,
|
||||
36.052,
|
||||
24.577
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-9.515390396118164,
|
||||
18.02602195739746
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"character",
|
||||
"reference"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_CameraPose_02": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/Camera/SM_CameraPose_02.SM_CameraPose_02",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-13.143,
|
||||
-0.0,
|
||||
-12.372
|
||||
],
|
||||
"max": [
|
||||
6.663,
|
||||
49.957,
|
||||
20.505
|
||||
],
|
||||
"size": [
|
||||
19.806,
|
||||
49.957,
|
||||
32.877
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-3.2401342391967773,
|
||||
24.978527069091797
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"character",
|
||||
"reference"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_CameraPose_03": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/Camera/SM_CameraPose_03.SM_CameraPose_03",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-7.134,
|
||||
-0.0,
|
||||
-5.0
|
||||
],
|
||||
"max": [
|
||||
10.802,
|
||||
53.498,
|
||||
18.037
|
||||
],
|
||||
"size": [
|
||||
17.936,
|
||||
53.498,
|
||||
23.037
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
1.833846092224121,
|
||||
26.74910545349121
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"character",
|
||||
"reference"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
},
|
||||
"SM_CameraPose_04": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Extra/Camera/SM_CameraPose_04.SM_CameraPose_04",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-9.877,
|
||||
-0.0,
|
||||
-5.0
|
||||
],
|
||||
"max": [
|
||||
28.251,
|
||||
39.133,
|
||||
19.577
|
||||
],
|
||||
"size": [
|
||||
38.129,
|
||||
39.133,
|
||||
24.577
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
9.187077522277832,
|
||||
19.566293716430664
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"character",
|
||||
"reference"
|
||||
],
|
||||
"scene_tags": [
|
||||
"utility"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,774 @@
|
||||
{
|
||||
"subfolder": "Furnitures",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Furnitures",
|
||||
"count": 13,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_Armchair_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_Armchair_01.SM_Armchair_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-41.732,
|
||||
-63.941,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
41.732,
|
||||
26.887,
|
||||
97.535
|
||||
],
|
||||
"size": [
|
||||
83.465,
|
||||
90.828,
|
||||
97.535
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-18.526857376098633
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"seating"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_Broom": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_Broom.SM_Broom",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-19.699,
|
||||
-6.32,
|
||||
0.013
|
||||
],
|
||||
"max": [
|
||||
19.699,
|
||||
6.32,
|
||||
150.0
|
||||
],
|
||||
"size": [
|
||||
39.397,
|
||||
12.64,
|
||||
149.987
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"appliance"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_DiningChair_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_DiningChair_01.SM_DiningChair_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-21.212,
|
||||
-30.703,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
21.212,
|
||||
20.555,
|
||||
89.707
|
||||
],
|
||||
"size": [
|
||||
42.424,
|
||||
51.259,
|
||||
89.707
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
9.5367431640625e-07,
|
||||
-5.074070930480957
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"seating"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_DinnerTable_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_DinnerTable_01.SM_DinnerTable_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-80.647,
|
||||
-43.814,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
80.647,
|
||||
43.814,
|
||||
74.031
|
||||
],
|
||||
"size": [
|
||||
161.295,
|
||||
87.628,
|
||||
74.031
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-1.1444091796875e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevBrown",
|
||||
"material_name": "MI_DevBrown"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"table"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_DinnerTable_02": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_DinnerTable_02.SM_DinnerTable_02",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-119.647,
|
||||
-49.814,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
119.647,
|
||||
49.814,
|
||||
74.031
|
||||
],
|
||||
"size": [
|
||||
239.295,
|
||||
99.628,
|
||||
74.031
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-1.1444091796875e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevBrown",
|
||||
"material_name": "MI_DevBrown"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"table"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_DinnerTable_03": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_DinnerTable_03.SM_DinnerTable_03",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-119.647,
|
||||
-49.814,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
119.647,
|
||||
49.814,
|
||||
74.031
|
||||
],
|
||||
"size": [
|
||||
239.295,
|
||||
99.628,
|
||||
74.031
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-1.1444091796875e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevBrown",
|
||||
"material_name": "MI_DevBrown"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"table"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_Keyboard": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_Keyboard.SM_Keyboard",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-30.726,
|
||||
0.0,
|
||||
0.009
|
||||
],
|
||||
"max": [
|
||||
30.726,
|
||||
23.418,
|
||||
2.415
|
||||
],
|
||||
"size": [
|
||||
61.452,
|
||||
23.418,
|
||||
2.406
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
11.708950996398926
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevSkyBlue",
|
||||
"material_name": "MI_DevSkyBlue"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"electronics"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_Laptop": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_Laptop.SM_Laptop",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-30.726,
|
||||
-13.892,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
30.726,
|
||||
30.726,
|
||||
28.847
|
||||
],
|
||||
"size": [
|
||||
61.452,
|
||||
44.618,
|
||||
28.847
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
8.417184829711914
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 4
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevSkyBlue",
|
||||
"material_name": "MI_DevSkyBlue"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 3,
|
||||
"slot_name": "MI_DevLight_Off",
|
||||
"material_name": "MI_DevLight_Off"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"electronics"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_Monitor_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_Monitor_01.SM_Monitor_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-27.355,
|
||||
-14.255,
|
||||
-0.0
|
||||
],
|
||||
"max": [
|
||||
27.355,
|
||||
4.479,
|
||||
37.898
|
||||
],
|
||||
"size": [
|
||||
54.711,
|
||||
18.733,
|
||||
37.898
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-4.887931823730469
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevLight_Off"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"electronics"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_OfficeChair_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_OfficeChair_01.SM_OfficeChair_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-38.937,
|
||||
-35.402,
|
||||
-0.015
|
||||
],
|
||||
"max": [
|
||||
38.937,
|
||||
30.099,
|
||||
103.138
|
||||
],
|
||||
"size": [
|
||||
77.874,
|
||||
65.501,
|
||||
103.153
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
-1.9073486328125e-06,
|
||||
-2.651534080505371
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"seating"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_Radiator": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_Radiator.SM_Radiator",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-55.0,
|
||||
-0.0,
|
||||
7.92
|
||||
],
|
||||
"max": [
|
||||
54.967,
|
||||
8.175,
|
||||
64.467
|
||||
],
|
||||
"size": [
|
||||
109.967,
|
||||
8.175,
|
||||
56.546
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "OTHER",
|
||||
"offset_xy": [
|
||||
-0.016643524169921875,
|
||||
4.087569713592529
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 3
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"slot_name": "M_DevOrange",
|
||||
"material_name": "MI_DevOrange"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"appliance"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_SimpleTable_01": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_SimpleTable_01.SM_SimpleTable_01",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-80.647,
|
||||
-43.814,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
80.647,
|
||||
43.814,
|
||||
74.031
|
||||
],
|
||||
"size": [
|
||||
161.295,
|
||||
87.628,
|
||||
74.031
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-1.1444091796875e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"table"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
},
|
||||
"SM_SimpleTable_02": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Furnitures/SM_SimpleTable_02.SM_SimpleTable_02",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-119.647,
|
||||
-49.814,
|
||||
0.0
|
||||
],
|
||||
"max": [
|
||||
119.647,
|
||||
49.814,
|
||||
74.031
|
||||
],
|
||||
"size": [
|
||||
239.295,
|
||||
99.628,
|
||||
74.031
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER_BOTTOM",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
-1.1444091796875e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "MI_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "MI_DevGray",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"furniture",
|
||||
"table"
|
||||
],
|
||||
"scene_tags": [
|
||||
"indoor",
|
||||
"home"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,283 @@
|
||||
{
|
||||
"subfolder": "Gears",
|
||||
"source_path": "/Game/BlockingStarterPack/Meshes/Gears",
|
||||
"count": 5,
|
||||
"completed": true,
|
||||
"meshes": {
|
||||
"SM_Fan_Big": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Gears/SM_Fan_Big.SM_Fan_Big",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-74.232,
|
||||
-81.115,
|
||||
-6.5
|
||||
],
|
||||
"max": [
|
||||
74.232,
|
||||
81.112,
|
||||
6.5
|
||||
],
|
||||
"size": [
|
||||
148.464,
|
||||
162.227,
|
||||
13.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
-0.0002593994140625,
|
||||
-0.0014495849609375
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"outdoor",
|
||||
"industrial"
|
||||
]
|
||||
},
|
||||
"SM_GearAngle": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Gears/SM_GearAngle.SM_GearAngle",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-52.437,
|
||||
-52.437,
|
||||
-5.0
|
||||
],
|
||||
"max": [
|
||||
52.437,
|
||||
52.436,
|
||||
5.0
|
||||
],
|
||||
"size": [
|
||||
104.873,
|
||||
104.873,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.000194549560546875,
|
||||
-0.000766754150390625
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"outdoor",
|
||||
"industrial"
|
||||
]
|
||||
},
|
||||
"SM_GearBig": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Gears/SM_GearBig.SM_GearBig",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-102.469,
|
||||
-102.469,
|
||||
-6.5
|
||||
],
|
||||
"max": [
|
||||
102.469,
|
||||
102.469,
|
||||
6.5
|
||||
],
|
||||
"size": [
|
||||
204.938,
|
||||
204.938,
|
||||
13.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
-0.0001678466796875,
|
||||
-5.340576171875e-05
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"outdoor",
|
||||
"industrial"
|
||||
]
|
||||
},
|
||||
"SM_GearMedium": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Gears/SM_GearMedium.SM_GearMedium",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-52.444,
|
||||
-52.445,
|
||||
-5.0
|
||||
],
|
||||
"max": [
|
||||
52.444,
|
||||
52.443,
|
||||
5.0
|
||||
],
|
||||
"size": [
|
||||
104.888,
|
||||
104.888,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.000194549560546875,
|
||||
-0.00077056884765625
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 2
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"slot_name": "M_DevWhite",
|
||||
"material_name": "MI_DevWhite"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"outdoor",
|
||||
"industrial"
|
||||
]
|
||||
},
|
||||
"SM_GearSmall": {
|
||||
"ue_path": "/Game/BlockingStarterPack/Meshes/Gears/SM_GearSmall.SM_GearSmall",
|
||||
"bounding_box": {
|
||||
"min": [
|
||||
-27.368,
|
||||
-27.368,
|
||||
-5.0
|
||||
],
|
||||
"max": [
|
||||
27.368,
|
||||
27.368,
|
||||
5.0
|
||||
],
|
||||
"size": [
|
||||
54.735,
|
||||
54.735,
|
||||
10.0
|
||||
]
|
||||
},
|
||||
"pivot": {
|
||||
"type": "CENTER",
|
||||
"offset_xy": [
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"mesh_complexity": {
|
||||
"num_verts": null,
|
||||
"num_triangles": null,
|
||||
"num_lods": 1,
|
||||
"num_sections": 1
|
||||
},
|
||||
"sockets": [],
|
||||
"material_slots": [
|
||||
{
|
||||
"index": 0,
|
||||
"slot_name": "M_DevBlack",
|
||||
"material_name": "MI_DevGray"
|
||||
}
|
||||
],
|
||||
"analysis_notes": [],
|
||||
"key_surfaces": [],
|
||||
"ground_sink_estimate": null,
|
||||
"style_tags": [
|
||||
"unknown"
|
||||
],
|
||||
"scene_tags": [
|
||||
"outdoor",
|
||||
"industrial"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user