top of page

Unityで「シュヌティングゲヌム」を぀くろうVol.28

前回はアむテムを1぀䜜成し、「Enemy」を倒したずきに 1/2 の確率でアむテムを出珟させる動き、さらにそのアむテムを取埗した際に、HPが1だけ回埩する動きを䜜成するこずができたした。


今回はその動きを改良しおいきたす。今回行うこずは次の2぀。

アむテムの远加プログラム

効果の振り分けずアむテムAHP回埩を取埗したずきのスクリプト文の改修

それでは早速䜜っおいきたしょう。

 

、アむテムの远加


この䜜品では6皮類のアむテムず、その効果を䜜っおいきたす。

さらにそれぞれのアむテムの出珟確率も仮蚭定しおおきたす。

A、HP回埩  30%

B、歊噚匷化  20

C、防埡シヌルド発生  20

D、スピヌドアップ   15

E、党回埩10秒間無敵  10

F、ザコキャラの䞀斉砎壊  5


「ItemManager.cs」を立ち䞊げお、以䞋のコヌドを远蚘しおいきたす。


❶ SpriteRendererコンポヌネントを䜿うための倉数を宣蚀したす。


❷ アむテムの画像は配列で指定したす。画像を入れるための配列を宣蚀したす。この画像は埌にInspectorから指定するので、アクセス修食子を「public」にしおおきたしょう。


❞ ❶で宣蚀した倉数にSpriteRendererコンポヌネントからデヌタを取埗し代入


❹ 出珟させるアむテムを抜遞番号を099たでの乱数で取埗したす。

  出珟確率がわかりやすいように100通りの数字を甚意しおいたす。


❺ ❹で指定したアむテムが30未満、぀たり 30/100 の確率ずいうこずになりたす。


❻ ❷で指定した配列の0番目の画像を、SpriteRendererコンポヌネントの「sprite」、぀たり芋た目の画像ずしお指定したす。


あずは❺❻の繰り返しですので、省略したす。


SpriteRenderer itemRenderer;    //❶SpriteRenderer型の倉数を宣蚀
public Sprite[] sprites;        //❷アむテム画像を入れる配列を宣蚀


void Start()
{
    itemRd2d = GetComponent<Rigidbody2D>(); //蚘述枈み
    itemRenderer = GetComponent<SpriteRenderer>();  //❞倉数デヌタを取埗
    int item = Random.Range(0, 100);                //❹Itemを乱数で決定
    if (item < 30)                                  //❺乱数が30未満なら
    {
        itemRenderer.sprite = sprites[0];           //❻0番目の画像を指定
    }
    else if (item < 50)
    {
        itemRenderer.sprite = sprites[1];
    }
    else if (item < 70)
    {
        itemRenderer.sprite = sprites[2];
    }
    else if (item < 85)
    {
        itemRenderer.sprite = sprites[3];
    }
    else if (item < 95)
    {
        itemRenderer.sprite = sprites[4];
    }
    else 
    {
        itemRenderer.sprite = sprites[5];
    }
}

続いおUnity゚ディタ偎から画像をセットしおいきたしょう。


①前回取埗した画像から、アむテムの効果AFに合う玠材を遞び、名前を「ItemA」「ItemF」に倉曎したす。

倉曎しなくおも進めるこずはできたすが、プログラムで名前をキヌにしおアむテムを刀定するので、わかりやすいように名前を指定しおいたす。

Unityで䜜るシュヌティングゲヌムVol28

②Itemプレハブのむンスペクタヌから、ItemManagerを遞択しお、スクリプト文の倉数で宣蚀した配列「Sprites」のSize に 6 を入力したす。

するず、6぀のスペヌスが珟れるので、䞊から順に①で名前を぀けた「ItemA」「ItemF」をセットしたす。


Unityで䜜るシュヌティングゲヌムVol28

、効果の振り分けずHP回埩コヌドの修正


続いお、プレむダヌに䜜成したアむテムを振り分ける仕組みを䜜っおいきたす。


「PlayerController.cs」を立ち䞊げお、以䞋のコヌドを远蚘したしょう。

すでに蚘述枈みの䟵入刀定のむベント関数 

OnTriggerEnter2D() の、

if (collision.tag == "Item")

぀たり、アむテムを取埗したら、の郚分を修正したす。

前回は以䞋のコヌドを蚘述したしたが、Destroy()関数以倖は䞀旊削陀したす。

hp++;                                 //削陀
HPText.text = "HP:" + hp.ToString();  //削陀
Destroy(collision.gameObject);        //蚘述枈み

❌䟵入した盞手からSpriteRendererコンポヌネントを取埗しお、sprite パラメヌタの name、぀たりスプラむトの名前を取埗、いったんstring型文字列型の倉数、name に代入したす。


❜ここから「swich文」を䜜っおいきたす。

「swich文」は定型文、「if文」ず䞊んで、条件分岐ではよく䜿われるものなので、芚えおおくず䟿利です。

今回は ❌で取埗した倉数「name」をキヌに振り分けをしたす。


❟name が "ItemA" のずきずいうこずですね。


➓ SubHP()関数はもずもずHPを枛らすために䜜成しおいたした。

 匕数にマむナスの倀を枡すこずで、HPを増やすこずもできたす。

 わかりやすく、マむナスずプラス、逆にしおおけばよかったですね。


⓫ 確認のためにConsoleに衚瀺させたす。埌で消したす


⓬「swich文」の定型文です。最埌は「break」が必芁になりたす。

void OnTriggerEnter2D(Collider2D collision)
{
	if (collision.tag == "Enemy") //蚘述枈み
	{
		SubHP(1);               			
	}
	if (collision.tag == "Item")	//"Item"タグを持っおいたら
	{
		string name = collision.GetComponent<SpriteRenderer>().sprite.name; //❌Itemの名前を取埗
		switch (name)    //❜ ❌で取埗したnameをキヌに振り分け
		{
			case "ItemA":                //❟name がItemA の堎合
				SubHP(-1);	     //❿HP枛関数を発動
				Debug.Log("HP 1UP"); //⓫デバッグで確認
				break;		     //⓬定型文
			case "ItemB":
				Debug.Log("パワヌショット");
				break;
			case "ItemC":
				Debug.Log("シヌルド");
				break;
			case "ItemD":
				Debug.Log("スピヌドアップ");
				break;
			case "ItemE":
				Debug.Log("党回埩");
				break;
			case "ItemF":
				Debug.Log("ザコ䞀掃");
				break;
		}
		//hp++; 削陀
		//HPText.text = "HP:" + hp.ToString(); 削陀
		Destroy(collision.gameObject);     //蚘述枈み
					
	}
}

これで、振り分けは完成。

埌はそれぞれの動きを1぀ず぀、远加しおあげればよさそうですね。


今回はここたでにしおおきたす。


教宀では実際に通っお頂いおの授業の他、ちょっずしたお困りごずに察するオンラむン授業やオンラむンサポヌトも行っおおりたす。

お困りごずのある方、ご興味がある方は、ぜひお問い合わせください。


お問い合わせは こちら から。

䜓隓授業のお申蟌みは こちら から。


過去の䜜品はこちらから。

Vol.20たでの䜜品は、䞋のVol.21 文末のリンクからどうぞ


最新蚘事

すべお衚瀺

ファむブボックス 䞊田教宀

bottom of page