我的游戏使用各种不同的游戏模式,我想根据所选的游戏模式在场景开始时生成不同的 GameController 脚本。然后其他项目(例如,敌人)将引用主 GameController,无论是 GameController_Mode1、GameController_Mode2 等。但是如果我不知道类型,如何让其他对象引用它呢?
Unity iOS 需要严格的 unityscript 类型,因此我无法使用鸭子类型来解决这个问题。
您可以像在 C# 中一样执行此操作,多态性。从单个基本控制器类派生所有控制器。然后你的游戏控制器var
可以设置为派生控制器的任何实例(参见Start()
在下面的例子中)。
这是一个使用简单控制器的快速示例:
#pragma strict
var controller : MyController;
class MyController {
var data : int;
public function MyController(){
this.data = 42;
}
public function Print(){
Debug.Log("Controller: " + this.data);
}
}
class MyController1 extends MyController {
public function MyController1(){
this.data = 43;
}
public function Print(){
Debug.Log("Controller1: " + this.data);
}
}
class MyController2 extends MyController {
public function MyController2(){
this.data = 44;
}
public function Print(){
Debug.Log("Controller2: " + this.data);
}
}
function Start () {
controller = new MyController();
controller.Print(); // prints Controller: 42
controller = new MyController1();
controller.Print(); // prints Controller1: 43
controller = new MyController2();
controller.Print(); // prints Controller2: 44
}
我假设您的游戏控制器共享函数名称,唯一的区别是每个函数中的代码。
[Update]
关于Heisenbug的评论如下:如果您的控制器是组件,则可以使用GetComponent来获取基类控制器。
基类(BaseController.js):
class BaseController extends MonoBehaviour{
public function Print(){
Debug.Log("BaseController");
}
}
扩展类(Controller1.js):
class Controller1 extends BaseController {
public function Print(){
Debug.Log("Controller1: " + this.data);
}
}
Test:
var controller : BaseController;
controller = gameObject.GetComponent("BaseController"); //.GetComponent(BaseController) also works
controller.Print(); // will print "Controller1" if actual attached component is a Controller1 type
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)