アイテムを拾うスクリプト
地面に落ちているアイテムに触れるとアイテムを拾ったことになり、
プレイヤーの持ち物に追加するスクリプトを作りましょう。
新規Javascriptを追加し、「PickUpItems」と名前をつけます。
変数を定義
次のようにデータを格納する変数を定義してください。
//変数------------ var itemType : InventoryItem; var itemAmount = 1; private var pickedup = false; //拾われたかどうか記憶
変数pickupはアイテムがプレイヤーに拾われたかどうかを記憶し、
1回拾ったものが続けて何度か拾ったように判定されるのを防ぎます。
アイテムに触れたときの処理を行う関数
プレイヤーがアイテムに触れた際に、いくつかの処理を行う関数です。
まずは次のように関数を追加します。
//プレイヤーがアイテムに触れたときの処理------------------ function OnTriggerEnter(collider : Collider) {}
アイテムに触れている間ずっと呼び出されるため、拾う処理だけを
させるために次のコードを追加します。
//アイテムが敵ではなく、プレイヤーに触れたことを確認 var playerStatus : PlayerStatus = collider.GetComponent(CharacterStatus); if (playerStatus == null) return;
これにより衝突してきたオブジェクトがCharacterStatusという
コンポーネントを持っていることを確認して持っている場合はプレイヤー、
持っていない場合はプレイヤーでないと判断します。
プレイヤーでないと判断されるとreturnを返してアイテムには何も起きません。
//2回拾われないようにする //(pickupがtrueの場合はここでreturnを返す) if(pickedUp) return; //アイテム一覧に追加する(Player_Inventoryスクリプトは後で作る) var playerInventory = collider.GetComponent(Player_Inventory); playerInventory.GetItem(itemType, itemAmount); pickedUp = true; //ゲームから取り除く Destroy(gameObject);
Player_Inventoryスクリプトは別ページで作成するので後ほど説明します。
Destroyは要らなくなったオブジェクトをゲームシーン上から取り除きます。
このDestroy関数のおかげでアイテムは拾われるとゲーム上から除かれます。
最後に次のコードを追加します。
//アイテムにコライダがついてない場合に取り付ける function Reset() { if(collider == null) { gameObject.AddComponent(SphereCollider); } collider.isTrigger = true; } @script AddComponentMenu("Inventory/PickupItems")
トリガーがない場合はこの関数によって新しくコライダを追加して
トリガーをつけています。最後の行はプレハブにスクリプトを簡単に充てられる
ようにするショートカットとなっています。
書き終わったら拾わせたいアイテムにこのスクリプトを当てます。
ItemTypeもそのアイテムに対応したものに変更しておきましょう。(ここでは「BOOK」)
最後に次のリンクから参考としてJavaScriptファイルをダウンロードできます。
拾うためのスクリプトが出来上がったら、次にアイテムを拾うためのスクリプトを作りましょう
→次項へのリンク