如何将 3D 模型动态添加到地平面

How To Dynamically Add a 3D Model to a Ground Plane

我正在使用 Unity 的地平面功能来放置 3d 动画模型。但是,我现在正在使用 AssetBundle 功能下载这个 3d 模型,需要使用脚本将其放置在地平面舞台下。

然而,当我将它部署到 android 设备上时,它没有显示...

我用的是小米红米3s,支持地平面检测

我已经添加了将资产包下载到 Plane Finder 的脚本

AssetbundleDownloadingScript:

public class AssetLoader : MonoBehaviour
{

    public static AssetLoader Instance;

    public string url = "myurl";
    public int version = 1;
    public string AssetName;

    //public Text infoText;
    public string infoText = "";

    AssetBundle bundle;


    void Awake()
    {
        Instance = this;

        DownloadAsset();
    }

    void OnDisable()
    {
        //AssetBundleManager.Unload(url, version);
    }


    public void DownloadAsset()
    {
        // bundle = AssetBundleManager.getAssetBundle (url, version);
        //   Debug.Log(bundle);

        if (!bundle)
            StartCoroutine(DownloadAssetBundle());
    }

    IEnumerator DownloadAssetBundle()
    {
        yield return StartCoroutine(AssetBundleManager.downloadAssetBundle(url, version));

        bundle = AssetBundleManager.getAssetBundle(url, version);

        if (bundle != null)
            infoText = "Download Success.....";
        else
            infoText = "Download error please retry";

        GameObject santaasset = bundle.LoadAsset("animation_keyframes_increase_v1", typeof(GameObject)) as GameObject;

        //here script attached to plane finder,get 1st child of planefinder
        var child = gameObject.transform.GetChild(0);

        if (santaasset != null)
        {
            santaasset.transform.transform.Rotate(new Vector3(0, 180, 0));
            santaasset.transform.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
            santaasset.transform.transform.SetParent(child.transform, false);
        }
        bundle.Unload(false);
    }


    public void SetInfoText(string text)
    {
        //infoText.text = text;
    }

    void OnGUI()
    {
        GUILayout.Label("Dummy Label:" + infoText);
    }
}

这是我的场景截图:

对我做错了什么有什么建议吗?谢谢

我在你的 AssetbundleDownloadingScript 中注意到你正在创建一个 GameObject santaasset,但是你从未将对象分配给 new 或现有的游戏对象,甚至 Instantiating它。您正在分配从 bundle 加载的 Asset。然而,该资产也从未被分配,因为它只是被加载到内存中,以便 Unity 可以识别它。这就是您遇到的情况,这就是为什么您在游戏中看到该对象,但它没有激活,即使它没有被禁用。

要解决此问题,您必须像这样分配游戏对象或实例化它:
GameObject santaasset = Instantiate(bundle.LoadAsset("animation_keyframes_increase_v1", typeof(GameObject)) as GameObject);