Unityはじめてみた 20日目 対戦人数の拡張

こんにちは栞と申します。
自分のフェチをゲームという形でも表現したくUnityを触っています。

前回の記事↓

あわせて読みたい
Unityはじめてみた 12日目 プロパティってややこしくない? こんにちは栞です。自分の性癖であるぽっちゃり・肥満化をゲームをいう形で具現化したく、7月からUnityを触っています。 その内容ですが、フラッピーバードをもとにした...

前々からスクールの課題として取り組んでいたこちらの
3Dシューティングゲームのチュートリアルが終了しました。

たまに小粋なジョークが挟み込まれて観客がそれに声を上げて笑ってるシーンがあって
会場の和気あいあいとした雰囲気が伝わってきました。

実装終了してローカルで遊べるようになったので録画してみました。
2人対戦のゲームですが3人に拡張してみたところ案外カンタンで、
その時は喜んでいたのですが
次第に「なんでこんなに簡単なんだ?」
という気持ちが大きくなってきたので調べてみました。

↑ちょっと違うかも…

クラスをデータ型に持つ変数は「メモリ上に生成されたオブジェクト」を格納する。
まだインスタンス化していないし、インスタンスを格納しているわけではない。

インスタンス化したオブジェクトはヒエラルキータブ内に表示され、実体を持つ。
(ただし、該当クラスがMonoBehaviourを継承しているときのみ)

オブジェクトとインスタンスは似た概念だが、
オブジェクト⇐インスタンス が成り立つことを覚えておけばOK。

newしただけではオブジェクトが作られるだけ。
GameObjectクラスをデータ型としてnewすれば、オブジェクトが生成され、
インスタンス化もなされる。

// 例    
GameObject newObject = new GameObject("MyNewObject");

// 余談 GameObjectのコンストラクタ文法のひとつ 生成するオブジェクトの名前を決められる
public GameObject(string name);

下へ続く↓

public GameObject m_Instance;   
m_Tanks[i].m_Instance = Instantiate(~~~

m_Tanks[i].m_Instance は意味が重複してしまうことになる。

あいかわらず一つ調べると知らない横文字が芋づる式に出てきますが
一個一個おさえていくほかないですね…

ここからしばらくはコーディングではなく
サーバー技術の学習になるので
忘れてしまわないか不安ですね…

コメントも相変わらずお待ちしております!

それでは。

次の記事↓

あわせて読みたい
Unityはじめてみた 24日目 そのクラスに無い関数を呼び出す方法×5, static関数ほか こんにちは栞です。 フェチを表現するための手段としてUnity触ってます。 前回のタンクゲームの課題が終わり、現在はアイテムリストの作成をしています。 https://shior...
感想をおしえてね(メンションがつきます)

コメント

コメント一覧 (4件)

  • 制作お疲れ様です。
    こんなtank系のtutorialとかあるんですね。。
    Unityのコンポーネント・オブジェクト指向と配列とかのデータ処理は相性がとても良いですよね。

    書かれている通り、C#UnityのコンストラクタはそのクラスをNewしたときに呼び出すInitialize(初期化)関数って受け取ってしまえばいいと思います。
    別にNewした後に静的アクセスできるので、別にコンストラクタに書かなくても。
    例:TestClassというクラスにvoid形でInitializeを用意 他クラスからNew時
    var testClass = new TestClass();
    testClass.Initialize()
    と用意した初期化処理を書けば同じ動作になりますが、ここら辺はもう好みですね。

    ここからサーバーというとUnity.Netとかの話ですかね? 楽しみにしております~

    • コメントありがとうございます!
      Tankの動画はもう2015年のものなので
      あんまり新しくないです笑

      コンストラクタは特に明記しなくても
      C#が自動生成してくれるのですね。
      その場合デフォルト値で初期化されるようです。

      とAIに確認してきました
      https://claude.ai/chat/b1c0ba4e-91f4-4ccd-919f-204666fe691a

      しかし
      > Newした後に静的アクセスできる
      という点だけ理解しかねました。

      静的関数はインスタンスを通して呼び出せないと学習したので…

      Unity.Netなるものは存じませんが
      カリキュラムを見る限りどうやらなさそう?です
      https://tech-sta.com/unity/
      これからも初学者の苦戦する様子を楽しみにしていただけたら幸いです

  • ああ、ごめんなさい、間違えておりました。
    >静的関数はインスタンスを通して呼び出せないと学習したので…
    C#でも関係なくStaticにしないと静的呼び出しは出来なかったですね。
    そもそもNewしている時点でメモリの動的割り当てをしていました。

    カリキュラムを見るとデータベースとPHPでの構築になるんですね。
    シンプルなゲームだと最近(そんなに最近じゃない)netcodeが動くようになったので
    それで実装されることも多いと思ったので、てっきりそれかと思ってしまいました。
    https://unity.com/ja/products/netcode

コメントする

CAPTCHA


目次