忍者ブログ

素人ゲーム開発を垂れ流しつつ、覚醒に至るまでの記録や役立ち情報、愚痴を書くブログ。ちなみに前立腺の開発もやっている。



 懐かしい・・・私が鬱病と戦っていた学生時代に聞いていた
お気に入りのバンド「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とは、キャストとはどんなものかを
掘り下げて勉強する必要が出てきそうですね・・・


  
ブログ内検索
最新コメント
[10/06 ダージリン]
[10/03 ゼン]
[10/01 ダージリン]
[09/25 ゼン]
[12/20 ダージリン]
プロフィール
HN:
kawaハギ
年齢:
36
性別:
男性
誕生日:
1989/07/03
職業:
無職
趣味:
ゲーム 音楽
自己紹介:
人類を5次元意識へ押しあげる為のゲームを
開発しています。

小学生3年頃から鬱を発症。対人恐怖症、醜形恐怖等で引きこもり。
生きる意味を長らく探し求め、ようやく答えを見つけスピリチュアル
にたどり着く。覚醒を数段階体験し現在は”もう一度”物理的な自立を目指しています。
カウンター
Copyright ©  -- 覚醒できるゲームを作るブログ --  All Rights Reserved

Design by CriCri / Material by petit sozai emi / powered by NINJA TOOLS / 忍者ブログ / [PR]