こんにちは栞と申します。
自分のフェチをゲームという形でも表現したくUnityを触っています。
前回の記事↓
前々からスクールの課題として取り組んでいたこちらの
3Dシューティングゲームのチュートリアルが終了しました。
たまに小粋なジョークが挟み込まれて観客がそれに声を上げて笑ってるシーンがあって
会場の和気あいあいとした雰囲気が伝わってきました。
実装終了してローカルで遊べるようになったので録画してみました。
2人対戦のゲームですが3人に拡張してみたところ案外カンタンで、
その時は喜んでいたのですが
次第に「なんでこんなに簡単なんだ?」
という気持ちが大きくなってきたので調べてみました。
↑ちょっと違うかも…
クラスをデータ型に持つ変数は「メモリ上に生成されたオブジェクト」を格納する。
まだインスタンス化していないし、インスタンスを格納しているわけではない。
インスタンス化したオブジェクトはヒエラルキータブ内に表示され、実体を持つ。
(ただし、該当クラスがMonoBehaviourを継承しているときのみ)
オブジェクトとインスタンスは似た概念だが、
オブジェクト⇐インスタンス が成り立つことを覚えておけばOK。
newしただけではオブジェクトが作られるだけ。
GameObjectクラスをデータ型としてnewすれば、オブジェクトが生成され、
インスタンス化もなされる。
// 例
GameObject newObject = new GameObject("MyNewObject");
// 余談 GameObjectのコンストラクタ文法のひとつ 生成するオブジェクトの名前を決められる
public GameObject(string name);
下へ続く↓
ここで挙げたコードで、
もし m_Tanks がインスタンスへの参照を格納しているなら
public GameObject m_Instance;
m_Tanks[i].m_Instance = Instantiate(~~~
の m_Tanks[i].m_Instance は意味が重複してしまうことになる。
あいかわらず一つ調べると知らない横文字が芋づる式に出てきますが
一個一個おさえていくほかないですね…
ここからしばらくはコーディングではなく
サーバー技術の学習になるので
忘れてしまわないか不安ですね…
コメントも相変わらずお待ちしております!
それでは。
次の記事↓
コメント
コメント一覧 (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
なるほど、リアルタイム機能の実装にはいろいろあるのですね