Как динамически добавить 3D-модель на базовую плоскость - PullRequest
0 голосов
/ 26 апреля 2018

Я использовал функцию наземной плоскости Unity для размещения 3D-модели.Однако сейчас я загружаю эту 3d-модель, используя функцию AssetBundle, и мне нужно поместить ее на сцену Ground Plane, используя сценарий.

Однако она не отображается при развертывании ее на устройстве Android ...

Я использую Xiaomi Redmi 3s, которая поддерживает обнаружение GroundPlane.

Я добавил скрипт для загрузки комплекта активов в 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);
    }
}

Вот скриншот моей сцены: enter image description here

Есть какие-либо предложения о том, что я делаю неправильно?Спасибо.

1 Ответ

0 голосов
/ 30 апреля 2018

Я заметил, что в вашем AssetbundleDownloadingScript вы создаете GameObject santaasset, однако вы никогда не назначаете объект new или существующему GameObject, или даже Instantiating ему.Вместо этого вы присваиваете Asset, который вы загружаете из bundle.Однако этот ресурс также никогда не назначается, поскольку он был просто загружен в память, чтобы Unity могла его распознать.Это то, что вы испытываете, и именно поэтому вы видите объект в игре, но он не активен, даже если он не отключен.

Чтобы исправить эту проблему, вы должны назначить свой GameObject или установить его так:
GameObject santaasset = Instantiate(bundle.LoadAsset("animation_keyframes_increase_v1", typeof(GameObject)) as GameObject);

...