You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity MLAPI中NetworkObject生成瓦片客户端同步缩放异常问题

你遇到的问题核心是MLAPI默认不会同步物体的缩放属性和父子层级关系,Host本地实例化时指定的父级和缩放仅在本地生效,客户端生成的瓦片没有继承对应父物体属性,因此显示异常。

解决步骤

  • 步骤1:配置瓦片Prefab的同步组件
    给瓦片Prefab添加NetworkTransform组件,勾选组件的「Sync Scale」选项,开启缩放的跨端同步。
  • 步骤2:配置父物体的网络属性
    给代码中赋值的parent物体添加NetworkObject组件,只有携带该组件的物体才能作为网络对象的父级实现跨端同步。
  • 步骤3:修改瓦片生成逻辑,同步父子关系
    原有代码中Instantiate时指定的父级仅在Host本地生效,需要调整为Spawn后调用API同步父级,修改后的代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MLAPI;
using MLAPI.Messaging;

public class TileMap : NetworkBehaviour
{
    public GameObject preFab;
    public GameObject parent;
    private float xMap = -95f;
    private float zMap = -95f;

    public override void NetworkStart()
    {
        if (!IsHost) { return; }
        for (int x = 1; x <= 20; x++)
        {
            for (int z = 0; z < 20; z++)
            {
                // 实例化时先不指定父级,避免本地父级和同步父级冲突
                GameObject TileOfMap = Instantiate(preFab, new Vector3(xMap, -0.4f, zMap), Quaternion.Euler(90, 0, 0));
                NetworkObject tileNetObj = TileOfMap.GetComponent<NetworkObject>();
                // 先生成网络对象
                tileNetObj.Spawn();
                // 同步设置父级,所有客户端都会自动同步父子关系
                tileNetObj.TrySetParent(parent.transform);
                zMap = zMap + 10;
            }
            xMap = xMap + 10;
            zMap = -95;
        }
        base.NetworkStart();
    }
}

如果瓦片缩放为固定值、不需要运行时修改,也可以直接将Prefab的本地缩放调整为正确值,无需开启「Sync Scale」,只要父子关系同步正确即可正常显示。

内容的提问来源于stack exchange,提问作者Cedworks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:06:00