Unity備忘録37頁目「アイテムの生成」

江上宿六です。

 

前回とかでアイテムの設定とか管理とか出来るようになったので

そういったデータを用いて実際にアイテムを生成してみようという話です。

とは言っても以前にやった程度の事しかやらないとは思いますが。

アイテムはプレイヤーと同様にベースとなるオブジェクトの子として

モデルデータを配置する事にしています。 ベースとなるオブジェクトには

あらかじめBoxColliderとRigidbody、アイテム制御用のItemControllerスクリプト

追加されていて、これをPrefabにして置いておきます。 これを生成した後に

アイテムのデータを元にモデルデータを生成し、親子関係を設定するわけです。

f:id:y6yegami:20190704150909p:plain

先ほど書いたベースのオブジェクトを受け取るためのGameObjectです。

あとでこのItemDirecterのオブジェクトにPrefabをアタッチしておきましょう。

f:id:y6yegami:20190704151406p:plain

アイテム生成用の関数です。

30行目でまずベースの方を生成し、31行目で引数で指定した位置に移動させます。

32行目はItemController側の名前を設定する関数を呼んでいます。

33行目はおまけで、生成時にちょっと浮くようにしてみました。

 

35行目からがモデルの生成です。 前回作ったGetItem().GetItemModelを使って

指定した名前のモデルを取得し、それをInstantiate()で生成するという感じです。

36行目で親子関係を設定し、37行目でローカル位置を(0,0,0)にしています。

これをしないとPrefabであればそのPrefabに指定された位置になるよう補正され、

そうでなければ(0,0,0)になるように補正されます、多分。

 

例えばベースの位置が(1,0,0)で、子となるオブジェクトの位置が(0,0,0)だった場合

こんな感じで親子関係を設定すると子オブジェクトのローカル位置が(-1,0,0)に

なってしまう、みたいな事があったので設定するようにしました。

 

そして38行目はオブジェクト名をアイテム名に変えました。 ベースの方の名前を

変えても良かったと思います。 そのうち変わってるかもしれません。

f:id:y6yegami:20190704153018p:plain

 呼び出し側です。 先ほどのMakeItem()を呼び出しています、名前はパキラで

位置はキャラモデルの位置にキャラモデルの前方向ベクトルを足したもの、つまり

キャラの前方を指定しています。

f:id:y6yegami:20190704154047g:plain

無事にキャラの前に生成されています。

f:id:y6yegami:20190704154342p:plain

ヒエラルキー内はこんな感じになっています。 やっぱりベースの方をアイテム名に

改名する方が良いかもしれないですね。

 

アイテムが浮いてから落ちた時に軽くバウンドしていますが、これもおまけで

Assets→CreateからPhysicMaterialを生成し、ItemのベースとなるPrefabの

BoxColliderにアタッチしています。 こうする事で色んな挙動をさせる事が

出来るようです。 設定はBouncinessを1にしただけですね。

 

まぁ、こんな感じです。 データの方を参照してInstantiate()しただけですね。

親子関係の所で少し発見があったり、PhysicMaterialで遊んだり出来た分は収穫。

次回はCollision関係で少し前に考えたりやったりした事をまとめたい感じです。

以前やってたアイテムの持ち上げとかを改めて実装したいとも思っていますが。