2016-05-11 10 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); 

} 

ここでは完全に動作する子クラスの1つです。

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 
} 

今ではそれも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の拡張バージョン)MonoBehaviourExtendedから(あなたがゲームオブジェクトに添付したい)通常のクラスをドライブすることができますMonoBehaviourもあります。

+0

これは完璧です、今私は気がなくなりました。 – Luke

+0

問題はありません。 –