我在运行时生成了一组预制件。这些预制件是一个简单的Text UI对象,带有动画器,可创建出现在游戏对象上方的“浮动”数字。
初始化预制件时,可以从Resources文件夹中正确加载预制件,但是一旦将其插入,就无法将它们从通用UnityEngine.Object
更改为FloatingText
类型。
我尝试使用一系列方法强制转换对象,但似乎无济于事。我尝试使用GetComponent
,但要么因调用错误引发Exception要么返回空值。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class FloatingTextController : MonoBehaviour
{
private static FloatingText popupText;
private static GameObject canvas;
public static void Initialize()
{
canvas = GameObject.Find("Canvas");
UnityEngine.Object temp = Resources.Load("Prefabs/PopupTextParent") as UnityEngine.Object;
GameObject popupTextGameObject = temp as GameObject;
if (!popupText) popupText = popupTextGameObject.GetComponent<FloatingText>();
}
public static void CreateFloatingText(string text, Transform location)
{
FloatingText instance = Instantiate(popupText);
Vector2 screenPosition = Camera.main.WorldToScreenPoint(location.position);
instance.transform.SetParent(canvas.transform, false);
instance.transform.position = screenPosition;
instance.SetText(text);
}
}
上面的代码是我的Floating Text Controller对象。错误到达popupText = popupTextGameObject.GetComponent<FloatingText>();
我想念什么?
答案 0 :(得分:2)
这里有很多错误。
Resources.Load()
。GetComponent<T>()
。您不能简单地将Game Object转换为Monobehaviour类型。CreateFloatingText
中,您要实例化组件对象而不是游戏对象。再次不能做到这一点。您使用AddComponent
。 总而言之,目前尚不清楚您要做什么,尤其是为什么要以这种方式进行。 Google如何使用预制件并实例化它们以正确执行。