"自作ゲーム"カテゴリーの記事一覧
-
懐かしい・・・私が鬱病と戦っていた学生時代に聞いていた
お気に入りのバンド「Hi-Standard」がいつの間にか活動開催
していたんですよね~。今はこういった弾けた曲は余り聞かなく
なってしまいましたが、死ぬ前に一度はライブに言ってみたい
ですね。
さてさて、いきなり脱線事故ですがゲーム制作へ
話を戻しましょう。
とりあえずですが、マウスカーソル前方に法線を
出してオブジェクトにぶつかったら「[E]PickUp Item」
と表示するようにしました。とりあえずの表示なので
テキトーにテキストで。
ちなみにこの状態でEキーを押すとオブジェクトを破棄
し、インベントリにアイテムが追加される様になっている。
私の環境ではUnityとVisualStudioの併用時には何故か
ブレークポイントが機能しないのでココらへんは苦労
しました。
途中から使えるやり方があると知り、
それ以降は大分作業効率が上がりましたけども(笑)
ここだけで1ヶ月程掛かった気がします・・・
頭がでかい(物理的に)割に脳みそが小さいんです^^;
さて、まだ未実装なのはアイテムが重なった時に個数を
表示させる事とインベントリが埋まった状態でもアイテム
が取れてしまう所でしょうか。
この次はインベントリ内でのアイテムの移動や破棄、
簡単に言うとドラッグ&ドロップ処理ですね。更にそれらを
装備スロットに入れられる処理も追加する必要が・・・
まぁ、少しづつですが確実に一歩ずつ前へ!PR -
インベントリの処理を構築中です。
ひどいコードですが、とりあえず実装しましょう。
アイテムを拾う→モデルの破棄
これは完了してます。あとはインベントリに入れるのみ! -
今のままでもコードを書くことは可能なのですが
「柔軟性にかける」ということでもう少し勉強して
見たいと思います。
オブジェクト指向な書き方もそうなのですが、
どうやらUnityは特別なようで、Unity指向とも
言うべきか「必要なときに参照する」というのが
主流らしいです。なのでUnityで実際に人のプログラム
を使ってどんな流れで構成されるのか、今本を買って
勉強中でございます。
大変申し訳ないですが、少しばかしこのFPSの開発
は一時的に止まってしまうでしょう。
-
申し訳ながらこの方法では成功しない可能性が出てきました。
と言うのも実際に組み込んでみたところ、nullが入っているのです。
どうやら上手く入っていない様子です。
もう少し考えてみる事に致します。 -
継承したクラス、
派生クラスの変数にどうしても基底クラスを
代入したいそんな時皆さんはどうしていますか?
ちなみに皆様ご存知違う型への変換を「キャスト」
と呼びますよね。実はその中に細分化されてまして
アップキャストとダウンキャストというものがあります。
アップキャストとは、
派生クラスを基底クラスに入れる事です。
例えば、
//基底クラス
class Base { }
//派生クラス
class Derived : Base { }
//基底クラス型の「b」
Base b;
//派生クラス型の「d」
Derived d;
//インスタンス生成
b = new Base();
//派生クラス「b」を基底クラス「d」に代入可能。
d = b ;
これがアップキャストだそうです。
派生を基底に代入する事は何の問題もなく代入可能
のようなのです。キャストすらする必要も無いという。
しかしこの逆の基底を派生に代入する、というのが少し
ばかり注意みたいで、これを「ダウンキャスト」と言う
ようです。
ではまったく同じ事をして見ましょう。
//基底クラス
class Base { }
//派生クラス
class Derived : Base { }
//基底クラス型の「b」
Base b;
//派生クラス型の「d」
Derived d;
//インスタンスの生成
d= new Derived();
//キャストしてもエラーになる
b = (Base)d;
これはエラーになってしまうんですね。
一見派生のほうが基底のクラスよりメンバが
同じかそれ以上あるので、基底にあるメンバ
のみに代入してくれそうな気はしますが残念
ながら基底クラス側「b」が「d?そんな奴
しらないよ!」と拒絶するのです。
キャストとはどうやら型を変換するだけであり、
中身自体の値が消えるわけではない
と言う点に注意。
ではどうすればダウンキャストできるのでしょうか?
キャストでだめなら一体どうすれば・・・意外にダウン
キャストの情報はそれほど多くないのです。
大体が良く分からない(理解できる脳を持ち合わせていない)
中、これは!というものを見つけました。
重要なタイミングはどうやらインスタンス化にあるようです!!
最初のBase型に同じ型でnewするのではなく、
//ここが重要!
b = new Derived ();
d = (Derived )b;
派生型を入れてやる事がミソなんだそうです。
Base型なのに派生型のDerivedをnewするなんて
c++から来た私には異様に見えますw
まぁ、なぜ問題なくできるのかと言うのは正直
説明できません。理解するには今一度、宣言とは、
C#のnewとは、キャストとはどんなものかを
掘り下げて勉強する必要が出てきそうですね・・・