栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Unity:制作新类实例时为空

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity:制作新类实例时为空

public class Rule : MonoBehaviour{}Rule rule2 = new Rule();

不能 使用

new
的关键字,如果你是从继承创建新实例
MonoBehaviour

您应该得到如下异常

您正在尝试使用’new’关键字创建MonoBehaviour。这是不允许的。只能使用AddComponent()添加MonoBehaviours。或者,您的脚本可以从scriptableObject继承,也可以根本没有基类

如果有,您的代码本来可以工作,

public class Rule {}
但是有
public class Rule : MonoBehaviour{}

创建派生自的类的新实例

MonoBehaviour

示例类:

public class Rule : MonoBehaviour{    public Rule(int i)    {    }}

如果您继承自

MonoBehaviour
,则应该使用
GameObject.AddComponent
Instantiate
创建它的新实例。

Rule rule2 = null;void Start(){  rule2 = gameObject.AddComponent<Rule>();}

要么

public Rule rulePrefab;Rule rule2;void Start(){    rule2 = Instantiate(rulePrefab) as Rule;}

如果

Rule
脚本已经存在并已附加到GameObject,则无需创建/添加/实例化该脚本的新实例。只需使用
GetComponent
函数从连接到的GameObject中获取脚本实例。

Rule rule2;void Start(){    rule2 = GameObject.Find("NameObjectscriptIsAttachedTo").GetComponent<Rule>();}

您会注意到,从派生脚本时, 不能 在构造函数中使用参数

MonoBehaviour



创建不是派生自的类的新实例

MonoBehaviour

示例类:(请注意,它不是从“

MonoBehaviour
” 派生的

public class Rule{    public Rule(int i)    {    }}

如果您 继承自

MonoBehaviour
,则应使用
new
关键字创建它的新实例。现在,您 可以 根据需要在构造函数中使用参数。

Rule rule2 = null;void Start(){    rule2 = new Rule(3);}

编辑

在最新版本的Unity,创建脚本的新实例,从继承

MonoBehaviour
new
关键字可能不会给你的错误,可能并不
null
太大
,但所有的回调函数将不会执行 。这些包括
Awake
Start
Update
功能等。因此,您仍然必须按照此答案顶部所述正确执行操作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/597006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号