C#, polymorphism에서와 같은 방식으로이 작업을 수행 할 수 있습니다. 단일 기본 Controller 클래스에서 모든 컨트롤러를 파생시킵니다. 그런 다음 GameController var
은 파생 된 컨트롤러의 인스턴스화로 설정할 수 있습니다 (아래 예에서 Start()
참조). 내가 어떤 가정 당신의 gamecontrollers 공유 함수 이름을 만들고 유일한 차이점은 각 기능의 코드라고 해요
#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
}
: 여기
간단한 컨트롤러를 사용하여 간단한 예이다.
아래 Heisenbug의 의견에 대해서 [업데이트]
: 컨트롤러가 구성 요소 인 경우는 기본 클래스 컨트롤러를 얻을 수 GetComponent를 사용할 수 있습니다.
BaseClass로 (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);
}
}
테스트 :
var controller : BaseController;
controller = gameObject.GetComponent("BaseController"); //.GetComponent(BaseController) also works
controller.Print(); // will print "Controller1" if actual attached component is a Controller1 type
@Heisenbug 다른 스크립트에서 기본 클래스에 액세스하는 것이 여전히 어렵다고 말하면 다른 GameObject를 의미합니까? 내 기본 클래스를 별도의 스크립트 파일로 쉽게 이동할 수 있으므로 예상대로 작동합니다. – Jerdak
위의 업데이트에서'getcomponent' 주석을 다루었습니다. – Jerdak
와우! 이것은 완벽하게 작동합니다. Jerdak 대단히 감사합니다. 'extends'키워드를 사용해 본 경험이 없습니다. 나는 그것에 대해 읽으려고했지만 기본 클래스 + 확장 된 클래스 (추가 클래스를 기본 클래스에 추가 함)를 의미한다고 생각하는 것이 맞습니까? 또는 확장 클래스 **는 기본 클래스에 존재하는 변수 및 함수 만 사용할 수 있습니까? 어느 쪽이든, 이것은 꽤 강력합니다. 나는이 사이트를 좋아한다!:) – Essential