c# - 我无法加载预制件并将其转换为类型
问题描述
我在运行时生成一组预制件。这些预制件是一个简单的文本 UI 对象,带有动画师来创建出现在游戏对象上方的“浮动”数字。
当我初始化预制件时,我可以让它们从 Resources 文件夹中正确加载,但是一旦我把它们放进去,我就无法将它们从泛型更改UnityEngine.Object
为我的FloatingText
类型。
我尝试使用一系列方法来投射对象,但似乎没有任何效果。我尝试使用GetComponent
,但要么通过调用错误抛出异常,要么返回空值。
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);
}
}
上面的代码是我的浮动文本控制器对象。错误到达时发生popupText = popupTextGameObject.GetComponent<FloatingText>();
我错过了什么?
解决方案
这里有很多错误的地方。
- 如果控制器类是静态的,为什么要使用 MB。我没有看到任何非静态成员。
- 您正在从资源中加载预制文件并尝试获取组件。你不能这样做。您需要实例化预制件并获取组件的实例。您不能以任何方式使用预制文件中的组件。使用公共字段来获取预制件的参考,您不需要
Resources.Load()
. - 您正在寻找的是
GetComponent<T>()
. 您不能简单地将 Game Object 转换为 Monobehaviour 类型。 - 然后在你的第二个函数中
CreateFloatingText
你想要实例化一个组件对象而不是一个游戏对象。又不能那样做。你用AddComponent
.
总而言之,尚不清楚您要做什么,尤其是为什么要以这种方式做。谷歌如何使用预制件并实例化它们以正确地做到这一点。
推荐阅读
- python - 如何划分列表中的特定元素,然后将值平方?
- django - django项目上的Digital Ocean内部服务器错误
- angular - 从 Angular 7 迁移后,Angular 8 无法构建
- c++ - 写入子类中的文件(在此处首先需要 X 的隐式复制构造函数)
- angular - 带有订阅的 Angular 浅单元测试
- ios - 通过 Apple 商务管理或其他方式将 Apple iOS 应用程序分发到公司/BYOD(设备)
- reactjs - React table 复选框使用已删除行的状态
- excel - 打开文件后子程序停止工作
- java - 替代响应spring boot api rest
- asp.net-core - dotnet publish -o published 每次发布都会创建嵌套目录