2017-10-06 186 views
0

我有一個基類,它有一個函數,它不知道它調用的函數是什麼。該行爲在兒童中定義。然後從孩子那裏調用父母的功能。什麼是使這項工作正確的語法/方法?特別是我必須把FunctionToBeDefinedLater例如,代替如下:孩子調用在Unity中使用子功能的父功能

public class ToolScript : MonoBehaviour { 
    public void isActive() 
    { 
     if (Input.GetKeyDown("space")) 
     { 
      Use(); 
     } 
    } 
    FunctionToBeDefinedLater Use(); 
} 

public class GunController : ToolScript 
{ 
    public void Use() 
    { 
     //Spawn bullet at this direction, this speed, give it spiral, tons of behavior etc. etc. 
    } 
    private void Update() 
    { 
     isActive(); 
    } 
} 

public class FlamethrowerController : ToolScript 
{ 
    public void Use() 
    { 
     //Spawn fire at this direction, this speed, set tip of flamethrower to be red etc etc 
    } 
    private void Update() 
    { 
     isActive(); 
    } 

} 

Update功能是從團結被稱爲每一幀。請讓我知道,如果我可以進一步澄清我的問題,我會盡快這樣做。我不知道這是否引用了重寫,接口或抽象,所以我已經標記了它們。我會盡快解決這個問題。

+2

閱讀關於抽象和虛擬方法在這裏:https://stackoverflow.com/questions/14728761/difference-between-virtual-and-abstract-methods –

回答

0

基於什麼@邁克爾柯蒂斯執導我我已經更新了我的代碼是:

public **abstract** class ToolScript : MonoBehaviour { 
    public void isActive() 
    { 
     if (Input.GetKeyDown("space")) 
     { 
      Use(); 
     } 
    } 
    **public abstract void** Use(); 
} 

public class GunController : ToolScript 
{ 
    public **override** void Use() 
    { 
     //Spawn bullet at this direction, this speed, give it spiral, tons of behavior etc. etc. 
    } 
    private void Update() 
    { 
     isActive(); 
    } 
} 

public class FlamethrowerController : ToolScript 
{ 
    public **override** void Use() 
    { 
     //Spawn fire at this direction, this speed, set tip of flamethrower to be red etc etc 
    } 
    private void Update() 
    { 
     isActive(); 
    } 
} 

明星不在代碼只是爲了強調。這段代碼解決了我的問題。

+2

您可以將Update()函數移動到ToolScript類中。這樣你就不需要爲每個孩子類輸出它。從那裏調用isActive(),它將在子類中調用相關的Use()函數。 –