2016-05-11 74 views
0

我試圖讓我所有的能力都遵循來自超類的指令來減少重複代碼的數量。我試圖通過在構造函數中傳入Monobehavior作爲參數來做到這一點。這完全可以工作,除非我收到警告說我根本無法做到這一點。這是我的超級班。Unity中的繼承問題

public class Ability : MonoBehaviour { 


private SpriteRenderer renderer; 
private MonoBehaviour ability; 
public Ability(MonoBehaviour b) { 
    ability = b; 
    renderer = ability.GetComponent<SpriteRenderer>(); 

} 

public void Start() { 

} 


void Update() { 

} 

public void checkAvailability() 
{ 

    if (ability.GetComponentInParent<SpeedBall>().getAvail()) 
    { 
     renderer.enabled = true; 
    } 
    else 
     renderer.enabled = false; 
} 

public void updateRenderer() 
{ 

    renderer.enabled = true; 
    renderer.transform.position = ability.GetComponentInParent<BoxCollider>().transform.position; 

    renderer.transform.localScale = new Vector3(.2f, .2f, 0); 

} 

這裏是一個子類,它將完美工作。

public class Sprite : MonoBehaviour { 

private Ability ability; 
void Start() { 

    ability = new Ability(this); 
} 

// Update is called once per frame 
void Update() { 
    ability.updateRenderer(); 


    ability.checkAvailability(); 

} 

}

這是反傳統的,但它應該工作。無論如何,在沒有傳遞單行爲的情況下完成同樣的事情。我無法擴展多個類,我需要它來擴展MonoBehavior。謝謝你的幫助!

回答

1

您可以訪問派生類中的基類繼承成員。澄清假設你有ExtendMonobhevior類(你自己的Monobehaviour版本具有附加功能)。

class MonoBehaviourExtended : MonoBehaviour { 
    //your extended featuer of MonoBehaviour goes here 
} 

現在你可以從MonoBehaviourExtended推動您的正常類(要與gameobjects附加)(自定義擴展MonoBehaviour的版本),它也包含MonoBehaviour

//inherit with extended monobehviour also contains extended features 
public class Player : MonoBehaviourExtended { 
    //your normal class functinality 
} 

//inherit with extended monobehviour also contains extended features 
public class Enemy : MonoBehaviourExtended 
{ 
    //your normal class functinality 

} 

而且你可以完全訪問MonoBehaviour也是。

+0

這是完美的謝謝你,我現在覺得笨拙 – Luke

+0

沒問題,我很樂意幫助你 –