2016-05-11 2 views
0

Я стараюсь, чтобы все мои способности соответствовали инструкциям суперкласса, чтобы уменьшить количество повторяющихся кодов. Я попытался сделать это, передав в Monobehavior в качестве параметра в конструкторе. Это будет работать отлично, но я получаю предупреждение о том, что я просто не могу этого сделать. Вот мой суперкласс.Inheritance in Unity issue

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. Я не могу расширять несколько классов, и мне нужно, чтобы он расширил MonoBehavior. Спасибо за любую помощь!

ответ

1

Вы можете получить доступ к базовому классу наследуемых элементов в производный класс. Для пояснения предположим, что у вас есть класс ExtendMonobhevior (ваша собственная версия Monobehaviour с дополнительными функциями).

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

Теперь вы можете управлять вашими обычными классами (которые вы хотите прикрепить с геймобжектами) от MonoBehaviourExtended (пользовательский расширенная версию 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

без проблем, я рад помочь вам –