プレイするゲームがないなら、自分で作ればいいじゃない!
ということで Unity 初心者が「ゲームを作る」ゲームをやっていきます!
今回は「自機を強化するアイテムを作成してみた」の記事です
内容
自機を強化するアイテムを作成する
今回は移動速度UPを作ります
まずはとりあえずの実装
アイテムの画像をシーンに配置する
コライダーを追加して、アイテム用のタグを設定します
あとはプレイヤーのスクリプトにヒット判定を追加して
強化処理を書けばとりあえずの実装は完了です
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.CompareTag("Item"))
{
// 強化処理
moveSpeed += 2;
// アイテムを消す
Destroy(other.gameObject);
}
}
実行
アイテムに当たると強化処理が実行されて、移動が速くなりました!
作成したオブジェクトはプレハブ化しておく
本実装
アイテムの処理は出来たので、次は仕様に合わせて実装します
敵から出現させる
敵のスクリプトにアイテムの設定を追加
[SerializeField] GameObject itemObj; // アイテムオブジェクト
弾がヒットしたときにアイテムを生成するように修正します
void OnTriggerEnter2D(Collider2D other)
{
// 当たったのがプレイヤーの弾
if (other.gameObject.CompareTag("player_bullet"))
{
// アイテムがセットされていれば生成
if(itemObj)
{
Instantiate(itemObj, transform.position, Quaternion.identity);
}
}
}
あとはアイテムを落とす敵を決めて、
敵オブジェクトにアイテムを設定すればOK!
アイテムのスクリプト
他のアイテムにも対応できるようにします
public class ItemController : MonoBehaviour
{
public enum ITEM_TYPE
{
SPEED_UP = 0, // 速度アップ
SHOT_UP, // ショットアップ
}
[SerializeField] float moveSpeed = 2.0f; // 移動値
[SerializeField] ITEM_TYPE itemType = ITEM_TYPE.SPEED_UP; // アイテムタイプ
void Update()
{
float addMove = -moveSpeed * Time.deltaTime;
transform.Translate(addMove, 0, 0);
}
// タイプの取得
public ITEM_TYPE GetItemType()
{
return itemType;
}
}
プレイヤーのスクリプト
こちらも他のアイテムに対応できるように修正
void OnTriggerEnter2D(Collider2D other)
{
// アイテムにヒット
if (other.gameObject.CompareTag("Item"))
{
ItemController item = other.gameObject.GetComponent<ItemController>();
if(item)
{
switch (item.GetItemType())
{
// 移動スピードアップ
case ItemController.ITEM_TYPE.SPEED_UP:
{
++moveSpeedIndex;
moveSpeedIndex = Mathf.Min(moveSpeedIndex, MoveSpeedList.Count - 1);
SoundManager.Instance.PlaySe("speed_up");
}
break;
}
}
// アイテムを消す
Destroy(other.gameObject);
}
}
gameObject.GetComponent<ItemController>()
オブジェクトに指定したコンポーネントがあれば取得できます
ない場合は null になります
MoveSpeedList
これでアイテムのタイプで強化処理を変更することができました!
まだスピードアップしかないですが…
サンプル動画
さいごに
アイテムの種類も増やしたいですし、敵の行動も増やしていきたいですね!
コメント