2017-10-06 14 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機能が団結からのものであり、すべてのフレームと呼ばれています。私の質問をさらに明確にすることができたら、私に教えてください。できるだけ早くそうします。これがオーバーライド、インタフェース、抽象を参照しているかどうかはわかりませんので、それらをすべてタグ付けしました。私は知ってすぐにこれを修正します。 @Michaelカーチスは私に私を監督するものに基づいて

+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()関数が呼び出されます。 –

関連する問題