規模感により異なるかなと思います。
例のようにキャラ種類数が少なく、分岐パターンも少ない場合は
1つのコードに全部の挙動を記載して、キャラ種類を示す変数を1つ作ってif文で分岐、でいいかと。
反対に種類数が多かったり分岐パターンが多い場合は、継承やデリゲートで作る方法も考えられます。
(他にも色々あるので「デザインパターン」で検索するといいかもしれません)
■継承のイメージ
●キャラクタークラス
・移動する
・ジャンプする
・ダメージを食らう
・etc
●キャラクターAクラス(キャラクタークラスを継承)
・ジャンプする→メソッド上書き(オーバーライド)で長いジャンプが出来るようにする
※他メソッドは記載しなければ継承元のが使われる
●キャラクターBクラス(キャラクタークラスを継承)
・ジャンプする→メソッド上書き(オーバーライド)で二段ジャンプが出来るようにする
※他メソッドは記載しなければ継承元のが使われる
実際にオブジェクトに付けるのは
キャラクタークラス、キャラクターAクラス、キャラクターBクラスのいずれか。
■デリゲートのイメージ
C#
1//キャラクター基底クラス
2public class Character : MonoBehaviour
3{
4 public delegate void MyDelegate();
5 public MyDelegate jump;
6 public MyDelegate die;
7
8 void Awake ()
9 {
10 //デフォルトのメソッドを入れる
11 jump = DefaultJump;
12 die = DefaultDie;
13 }
14
15 void Update ()
16 {
17 //該当メソッドを呼び出す
18 jump();
19 die();
20 }
21
22 void DefaultJump()
23 {
24 if (ジャンプボタンが押されている) {
25 ジャンプする処理
26 }
27 }
28
29 void DefaultDie()
30 {
31 if (HPが0になっている) {
32 プレイヤー死亡処理
33 }
34 }
35}
36
37//長いジャンプ処理
38public class LongJump : MonoBehaviour
39{
40 void Start ()
41 {
42 //自身のメソッドを入れる
43 GetComponent<Character>().jump = MyJump;
44 }
45
46 void MyJump()
47 {
48 if (ジャンプボタンが押されている) {
49 ジャンプする処理
50 }
51 }
52}
53
54//二段ジャンプ処理
55public class TwiceJump : MonoBehaviour
56{
57 void Start ()
58 {
59 //自身のメソッドを入れる
60 GetComponent<Character>().jump = MyJump;
61 }
62
63 void MyJump()
64 {
65 if (ジャンプボタンが押されている) {
66 ジャンプする処理
67 }
68 }
69}
実際にオブジェクトに付けるのは
「キャラクタークラス」+「LongJumpまたはTwiceJumpまたは無し」
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/26 13:06