忍者ブログ

ゲーム作成状況を載せて行きますよ。 いつ完成する事やら・・・
01 2017/02 2 3 45 6 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 03

02.07.18:15

インベントリ 1/2



 懐かしい・・・私が鬱病と戦っていた学生時代に聞いていた
お気に入りのバンド「Hi-Standard」がいつの間にか活動開催
していたんですよね~。今はこういった弾けた曲は余り聞かなく
なってしまいましたが、死ぬ前に一度はライブに言ってみたい
ですね。


さてさて、いきなり脱線事故ですがゲーム制作へ
話を戻しましょう。





 とりあえずですが、マウスカーソル前方に法線を
出してオブジェクトにぶつかったら「[E]PickUp Item」
と表示するようにしました。とりあえずの表示なので
テキトーにテキストで。

ちなみにこの状態でEキーを押すとオブジェクトを破棄
し、インベントリにアイテムが追加される様になっている。
私の環境ではUnityとVisualStudioの併用時には何故か
ブレークポイントが機能しないのでココらへんは苦労
しました。

途中から使えるやり方があると知り、
それ以降は大分作業効率が上がりましたけども(笑)




 ここだけで1ヶ月程掛かった気がします・・・

頭がでかい(物理的に)割に脳みそが小さいんです^^;
さて、まだ未実装なのはアイテムが重なった時に個数を
表示させる事とインベントリが埋まった状態でもアイテム
が取れてしまう所でしょうか。

この次はインベントリ内でのアイテムの移動や破棄、
簡単に言うとドラッグ&ドロップ処理ですね。更にそれらを
装備スロットに入れられる処理も追加する必要が・・・

まぁ、少しづつですが確実に一歩ずつ前へ!
PR

02.01.13:31

開発再開の知らせ忘れる

インベントリの処理を構築中です。
ひどいコードですが、とりあえず実装しましょう。

アイテムを拾う→モデルの破棄

これは完了してます。あとはインベントリに入れるのみ!

01.16.15:11

ダウンキャストを使わない構成で。

今のままでもコードを書くことは可能なのですが
「柔軟性にかける」ということでもう少し勉強して
見たいと思います。

オブジェクト指向な書き方もそうなのですが、
どうやらUnityは特別なようで、Unity指向とも
言うべきか「必要なときに参照する」というのが
主流らしいです。なのでUnityで実際に人のプログラム
を使ってどんな流れで構成されるのか、今本を買って
勉強中でございます。


大変申し訳ないですが、少しばかしこのFPSの開発
は一時的に止まってしまうでしょう。


01.16.15:06

前回のダウンキャストについて。

申し訳ながらこの方法では成功しない可能性が出てきました。

と言うのも実際に組み込んでみたところ、nullが入っているのです。
どうやら上手く入っていない様子です。

もう少し考えてみる事に致します。

01.10.20:42

c# 派生クラスに基底クラスをぶち込む「ダウンキャスト」について。

継承したクラス、
派生クラスの変数にどうしても基底クラスを
代入したいそんな時皆さんはどうしていますか?

ちなみに皆様ご存知違う型への変換を「キャスト」
と呼びますよね。実はその中に細分化されてまして
アップキャストとダウンキャストというものがあります。


アップキャストとは、
派生クラスを基底クラスに入れる事です。
例えば、

   //基底クラス
   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とは、キャストとはどんなものかを
掘り下げて勉強する必要が出てきそうですね・・・


   NEXT >>>