質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.62%

  • C#

    6839questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    3799questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

ゲームで複数の特徴あるキャラクターを実装する場合、スクリプトはどうやって分けて書くものなのでしょうか?

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 192

Unityでゲームのキャラクターを作りたいと思っています。

内容としては、基本的にクリックするとプレイヤーがジャンプするだけなのですが、そこをキャラクターごとに特徴を出していきたいと思っています。

例えば、Aのキャラクターは長くジャンプできるだとか、Bのキャラクターは二段ジャンプができるとかそんな感じです。

実装するにあたって疑問に思ったのですが、一つのスクリプトにAのキャラクラス、Bのキャラクラスとやってつくるのかそれとも、キャラごとにスクリプトを分けるべきなのか、あとは継承?などすべきなのか、私自身把握しておりません。

特徴あるキャラクターを複数つくる場合はどのようにスクリプトを分けていけばいいですか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

規模感により異なるかなと思います。

例のようにキャラ種類数が少なく、分岐パターンも少ない場合は
1つのコードに全部の挙動を記載して、キャラ種類を示す変数を1つ作ってif文で分岐、でいいかと。

反対に種類数が多かったり分岐パターンが多い場合は、継承やデリゲートで作る方法も考えられます。
(他にも色々あるので「デザインパターン」で検索するといいかもしれません)

 ■継承のイメージ

●キャラクタークラス
・移動する
・ジャンプする
・ダメージを食らう
・etc

●キャラクターAクラス(キャラクタークラスを継承)
・ジャンプする→メソッド上書き(オーバーライド)で長いジャンプが出来るようにする
※他メソッドは記載しなければ継承元のが使われる

●キャラクターBクラス(キャラクタークラスを継承)
・ジャンプする→メソッド上書き(オーバーライド)で二段ジャンプが出来るようにする
※他メソッドは記載しなければ継承元のが使われる

実際にオブジェクトに付けるのは
キャラクタークラス、キャラクターAクラス、キャラクターBクラスのいずれか。

 ■デリゲートのイメージ

//キャラクター基底クラス
public class Character : MonoBehaviour 
{   
    public delegate void MyDelegate();
    public MyDelegate jump;
    public MyDelegate die;

    void Awake () 
    {
        //デフォルトのメソッドを入れる
        jump = DefaultJump;
        die = DefaultDie;
    }

    void Update () 
    {
        //該当メソッドを呼び出す
        jump();
        die();
    }

    void DefaultJump()
    {
        if (ジャンプボタンが押されている) {
            ジャンプする処理
        }
    }

    void DefaultDie()
    {
        if (HPが0になっている) {
            プレイヤー死亡処理
        }
    }
}

//長いジャンプ処理
public class LongJump : MonoBehaviour 
{   
    void Start () 
    {
        //自身のメソッドを入れる
        GetComponent<Character>().jump = MyJump;
    }

    void MyJump()
    {
        if (ジャンプボタンが押されている) {
            ジャンプする処理
        }
    }
}

//二段ジャンプ処理
public class TwiceJump : MonoBehaviour 
{   
    void Start () 
    {
        //自身のメソッドを入れる
        GetComponent<Character>().jump = MyJump;
    }

    void MyJump()
    {
        if (ジャンプボタンが押されている) {
            ジャンプする処理
        }
    }
}


実際にオブジェクトに付けるのは
「キャラクタークラス」+「LongJumpまたはTwiceJumpまたは無し」

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/26 22:06

    なるほど!周りにこういうことを聞ける方がいないのでとても勉強になりました。
    検索もどうやって検索すればいいのかわからなかったので助かりました。
    ありがとうございます。

    キャンセル

0

作り方は開発者のこだわり所だと思いますが、
個性はパラメータとして持たせ、メインルーチンは固定にするのがコード量を抑えられるため好まれてるんじゃないかと思います。
もちろん、キャラクター毎に別々のルーチンで動かすことも可能ですが、同じコードをコピーすることになる為、共通の要素の一部を変更したくなった場合にキャラクターの数だけ書き換えることになります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/24 20:10

    なるほど。つまり一つのスクリプトにそれぞれの特徴を書いて、キャラごとに処理をわけるということですね。ご回答ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    C、C++における簡素なジャンプゲームの作成方法について

    CまたはC++で簡単なジャンプゲームを作成中のプログラミング初心者です。 このゲームの完成度的な目的地は、 ・キャラクターにある程度の加速度が存在している ・ジャンプと射撃、移動が

  • 解決済

    ゲーム作りでずっと疑問に思うこと

    こんにちは 自分にとってずっと解決されない疑問があります。 それは、if文や配列を何度勉強してもゲーム制作につながりそうにないということです。 私の目標は一人でゲーム(白猫プロ

  • 解決済

    pc上で動くキャラクター

    PCの画面上でキャラクターが動き回るようなプログラムをJavaで作りたいのですが 可能でしょうか? 可能ならばどういった方法でできるのかを是非お聞きしたいです! すごくあ

  • 受付中

    staticについて

    RPGを作っているのですけど、主人公の体力をstaticにしていいのですかね? また、他に何か良いやり方があったら教えてください。 追記 もし、他のキャラクターが出てくる場

  • 解決済

    【Swift】ゲームアプリでステージごとにスコアを保存したい。

    前提・実現したいこと ゲームアプリを作っているのですが、ステージごとにスコアを保存したいです。 以下のように色々選択肢があるようなのですが、できればNSUserDefaults

  • 解決済

    Unity GameObjectクラスとは何か

    TransformクラスとGameObjectクラスの違いってなんでしょうか? Transformクラスはオブジェクトの大きさ、位置、方向を操作するためのオブジェクトだという

  • 解決済

    プログラムでキャラクターを動かすことはどういうことでしょうか

    MAYAで作ったキャラクターの、例えば右足を1歩前に出すとかいう処理は、 既に出来上がったキャラクターに対して 別のプログラムで動かしているのでしょうか? MAYA自体が

  • 解決済

    pythonでRPGゲームの会話処理

    python、pygameを使ってRPGゲームの会話処理を実装したいです。 NPCが1文だけ喋る、というのはできそうなのですが、掛け合いをするという部分で躓いています。 やりたいこ

同じタグがついた質問を見る

  • C#

    6839questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    3799questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • トップ
  • C#に関する質問
  • ゲームで複数の特徴あるキャラクターを実装する場合、スクリプトはどうやって分けて書くものなのでしょうか?