unity中如何实例化指定地方的对象?
How to instantiate objects in a specified place in unity?
我有一个增强现实应用程序,它在检测到二维码时会显示对象。我这样做的方法是使用一个名为 model caller 的空对象,它有一个实例化模型的脚本,这是脚本:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Android;
using UnityEngine.Networking;
using UnityEngine.UI;
public class Load_Models: MonoBehaviour
{
// Start is called before the first frame update
[Serializable]
public class PlaceModel
{
public string Clave = "";
}
public GameObject[] model;
public string[] clave_modelos;
public string URL;
public GameObject ModeloUI;
public PlaceModel placeModel;
Dictionary<string, GameObject> strGO = new Dictionary<string, GameObject>();
public void Start()
{
StartCoroutine(GetRequest(URL));
for (int i = 0; i < model.Length; i++)
{
strGO.Add(clave_modelos[i], model[i]);
}
}
IEnumerator GetRequest(string uri)
{
using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
{
// Request and wait for the desired page.
yield return webRequest.SendWebRequest();
string jsonForm = uri;
if (webRequest.isNetworkError)
{
Debug.Log("Error loading");
}
else
{
try
{
PlaceModel model_1 = JsonUtility.FromJson<PlaceModel>(webRequest.downloadHandler.text);
Instantiate(strGO[model_1.Clave], new Vector3(0, 0, 0), Quaternion.identity, transform); //instantiates the model
Debug.Log("Loaded");
}
catch
{
Debug.Log("Error in connection");
}
}
}
}
}
这是当我检测到超过 1 个 QR 时发生的情况(它也只发生在一个 QR 上,只是没有模型相互“融合”):
说明:它应该显示 3 个模型,1 个简单的街道(白色方块)和 2 个“无模型”3d 文本,但是,这个想法是让模型显示为“附加”(我不知道如何措辞)到二维码。我试图通过将模型调用者作为 ImageTarget 的子级,并将模型调用者置于图像目标的死点,同时使用 new Vector3(0, 0, 0).
来做到这一点
有办法吗?
我知道我可以通过简单地使用预制件本身而不是脚本来做到这一点,但我需要根据网站更改模型(我已经这样做了)。
我为此使用 EasyAR 3
如果我没看错,请尝试以这种方式更改实例化行:
Instantiate(strGO[model_1.Clave], transform.position, Quaternion.identity, transform);
另外,也许您不需要设置父转换,这取决于您的实现。
我有一个增强现实应用程序,它在检测到二维码时会显示对象。我这样做的方法是使用一个名为 model caller 的空对象,它有一个实例化模型的脚本,这是脚本:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Android;
using UnityEngine.Networking;
using UnityEngine.UI;
public class Load_Models: MonoBehaviour
{
// Start is called before the first frame update
[Serializable]
public class PlaceModel
{
public string Clave = "";
}
public GameObject[] model;
public string[] clave_modelos;
public string URL;
public GameObject ModeloUI;
public PlaceModel placeModel;
Dictionary<string, GameObject> strGO = new Dictionary<string, GameObject>();
public void Start()
{
StartCoroutine(GetRequest(URL));
for (int i = 0; i < model.Length; i++)
{
strGO.Add(clave_modelos[i], model[i]);
}
}
IEnumerator GetRequest(string uri)
{
using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
{
// Request and wait for the desired page.
yield return webRequest.SendWebRequest();
string jsonForm = uri;
if (webRequest.isNetworkError)
{
Debug.Log("Error loading");
}
else
{
try
{
PlaceModel model_1 = JsonUtility.FromJson<PlaceModel>(webRequest.downloadHandler.text);
Instantiate(strGO[model_1.Clave], new Vector3(0, 0, 0), Quaternion.identity, transform); //instantiates the model
Debug.Log("Loaded");
}
catch
{
Debug.Log("Error in connection");
}
}
}
}
}
这是当我检测到超过 1 个 QR 时发生的情况(它也只发生在一个 QR 上,只是没有模型相互“融合”):
说明:它应该显示 3 个模型,1 个简单的街道(白色方块)和 2 个“无模型”3d 文本,但是,这个想法是让模型显示为“附加”(我不知道如何措辞)到二维码。我试图通过将模型调用者作为 ImageTarget 的子级,并将模型调用者置于图像目标的死点,同时使用 new Vector3(0, 0, 0).
来做到这一点有办法吗?
我知道我可以通过简单地使用预制件本身而不是脚本来做到这一点,但我需要根据网站更改模型(我已经这样做了)。
我为此使用 EasyAR 3
如果我没看错,请尝试以这种方式更改实例化行:
Instantiate(strGO[model_1.Clave], transform.position, Quaternion.identity, transform);
另外,也许您不需要设置父转换,这取决于您的实现。