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功能等。因此,您仍然必须按照此答案顶部所述正确执行操作。



