2026-10-19 17:25:25 +08:00
|
|
|
|
# 作物绘制统一定位规则
|
|
|
|
|
|
|
|
|
|
|
|
2026-10-19 经用户确认,后续普通地块作物绘制采用本文公式。
|
|
|
|
|
|
本文取代 `14-crop-position-calibration.md` 中的人工逐阶段定位方案。
|
|
|
|
|
|
不再扩展人工锚点,不按非透明包围盒裁剪图片,不保存网页作物 ID。
|
|
|
|
|
|
|
|
|
|
|
|
## 已确认的来源
|
|
|
|
|
|
|
|
|
|
|
|
网页公开 Lua 包的 `WebGLMainSceneLandController:SetCropTexture`:
|
|
|
|
|
|
先调用 `Image.SetNativeSize()`,生长阶段宽高乘 0.75,
|
|
|
|
|
|
再将 `RectTransform.anchoredPosition` 设为零。
|
|
|
|
|
|
`WebGLMainSceneLandsController:InitLands` 使用
|
|
|
|
|
|
`LandsCrops/LandN/crop` 作为普通地块作物节点。
|
|
|
|
|
|
|
|
|
|
|
|
主场景包中对应的 90 个普通作物节点(含不同预制体副本)
|
|
|
|
|
|
统一采用 `pivot = anchorMin = anchorMax = (0.5, 0)`。
|
|
|
|
|
|
这是完整画布底边中点,不是可见茎根的人工标注点。
|
|
|
|
|
|
普通土地与作物父容器中心一致;参考矩形为 153 × 79.5。
|
|
|
|
|
|
|
|
|
|
|
|
## 计算公式
|
|
|
|
|
|
|
|
|
|
|
|
输出画布左上角为原点,x 向右、y 向下。土地矩形中心为
|
|
|
|
|
|
`(Cx, Cy)`,显示高度为 `D`,作物完整画布最终显示宽高为 `w, h`:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
left = Cx - w / 2
|
|
|
|
|
|
top = Cy + D / 2 - h
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
原版原生像素单位一致时,PNG 完整画布为 `W, H`,场景倍率为 `s`:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
D = 79.5 × s
|
|
|
|
|
|
w = 0.75 × W × s
|
|
|
|
|
|
h = 0.75 × H × s
|
|
|
|
|
|
left = Cx - 0.375 × W × s
|
|
|
|
|
|
top = Cy + 39.75 × s - 0.75 × H × s
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
先确定统一场景单位,不能把 0.75 重复叠加到已有图片缩放。
|
|
|
|
|
|
以实际最终显示宽高计算位置,仅在落到输出像素时取整。
|
|
|
|
|
|
必须保留透明留白;参考土地矩形,不能使用土壤可见像素包围盒。
|
|
|
|
|
|
|
|
|
|
|
|
## 阶段边界
|
|
|
|
|
|
|
|
|
|
|
|
- 原版 step 2~6:上述生长图片公式。
|
|
|
|
|
|
- step 1:公共种子图,原生尺寸乘 0.5,localPosition=(0,0,0)。
|
|
|
|
|
|
- step 7/8:公共枯萎图,原生尺寸乘 0.5,localPosition=(0,-8,0)。
|
|
|
|
|
|
- 本地阶段编号需正确映射到原版资源阶段,不能直接混用。
|
|
|
|
|
|
- 特殊、动画和其他场景的作物须分别核验其控制器。
|
|
|
|
|
|
|
|
|
|
|
|
## 验证与接入状态
|
|
|
|
|
|
|
|
|
|
|
|
随机抽取本地数据库的茄子、油菜、黄瓜、迎春花、桂圆,
|
|
|
|
|
|
共绘制 24 个生长阶段;保留完整透明画布,不使用人工锚点。
|
|
|
|
|
|
场景倍率为 2,底边对齐的计算误差不超过 0.5 输出像素。
|
|
|
|
|
|
这验证了预览公式的执行与图片效果,不代表所有素材已逐一核对原图。
|
|
|
|
|
|
|
2026-10-21 10:16:58 +08:00
|
|
|
|
正式渲染器现使用 `crop_positions.json` schema=4 的本地可见落地机制,
|
|
|
|
|
|
不包含人工逐阶段锚点。种子和枯萎仍使用场景包原始公共精灵,
|
|
|
|
|
|
分别为 69×30 和 209×92。
|
|
|
|
|
|
|
|
|
|
|
|
此前将本地土地完整 PNG 高度除以 79.5,混用了透明画布与父矩形语义。
|
|
|
|
|
|
当前通过全部 30 块地中心计算整体尺度;作物保持直立等比缩放,以可见
|
|
|
|
|
|
底部区域的加权中心对齐本地土地中心,不再使用网页底边锚点。
|
|
|
|
|
|
虫子保留局部坐标映射;输出分辨率再乘 `width/3072`。
|
|
|
|
|
|
详见 [作物场景映射修正](22-crop-scene-mapping.md)。
|
|
|
|
|
|
原网页规则仍成立,但不能把本地 PNG 高度直接视为上文的 D。
|
|
|
|
|
|
沿用的旧土地网格存在拟合残差,不是网页场景的像素级复刻。
|
2026-10-19 17:25:25 +08:00
|
|
|
|
|
|
|
|
|
|
`scripts/preview_crop_positions.py` 已改为调用正式渲染器,生成
|
|
|
|
|
|
1024、1536、3072 三种输出档位的作物阶段及虫子预览。
|