Unity5(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity9】UNETで敵プレイヤーにダメージを与える!【UNET8】

いつもひよこのたまごをご利用下さいましてありがとうございます!
おかげ様でチュートリアル数も10ゲーム目となりました!
チュートリアル一覧は
こちら からどうぞ!


スポンサーリンク

Unity5.1.1p3 Personal(2015年7月)


前回の続きです〜


今回は敵プレイヤーにダメージを与えていきます〜
実際にはダメージを与える前段階として、敵プレイヤーの名前を取得するところまで進めます〜



UNET Part 8 - Shooting - YouTube

【目標】敵プレイヤーの名前を取得する

①敵プレイヤーにダメージを与える目的のスクリプト作成

まずはスクリプトを作成していきます〜

Player_Shootingという名前のスクリプトを新規作成し、Playerプレハブに取り付けて下さい〜

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class Player_Shooting : NetworkBehaviour {
	
	private float damage = 25; //ダメージ量
	private float range = 200; //Raycastの距離
	//FirstPersonCharacterを指定
	[SerializeField] private Transform camTransform;
	private RaycastHit hit;

	void Update () {
		CheckIfShooting();
	}
	
	void CheckIfShooting ()
	{
		if (!isLocalPlayer) {
			return;
		}
		
		if (Input.GetKeyDown(KeyCode.Mouse0)) {
			Shooting();
		}
	}
	
	void Shooting ()
	{
		//カメラの前方にRaycastを飛ばす
		//TransformPoint: 指定した分だけ座標をずらす
		if (Physics.Raycast (camTransform.TransformPoint (0, 0, 0.5f), camTransform.forward, out hit, range)) {
			Debug.Log (hit.transform.tag);
			//RaycastがPlayerと衝突した時
			if (hit.transform.tag == "Player") {
				//名前を取得
				string uIdentity = hit.transform.name;
				//名前とダメージ量を引数にメソッド実行
				CmdTellServerWhoWasShot(uIdentity, damage);
			}
		}
	}
	
	//Command: SyncVar変数の変更結果を、全クライアントへ送信
	[Command]
	void CmdTellServerWhoWasShot (string uniqueID, float dmg)
	{
		//敵プレイヤーの名前でGameObjectを取得
		GameObject go = GameObject.Find(uniqueID);
		//Apply damage to that player
	}
}

Player_Shooting.cs


まずはSerializeField変数であるcamTransformへ、FirstPersonCharacterを指定します〜


f:id:hiyotama:20150712075922p:plain


続いてPlayerタグをPlayerプレハブに取り付けましょう〜


f:id:hiyotama:20150713110658p:plain
PlayerプレハブのInspectorビューから、Tag > Player選択


画面をクリックした時にShootingメソッドを呼び、カメラ前方にLaycastを飛ばし、Laycast上にPlayerタグのついたオブジェクトが存在した場合名前を取得し、名前とダメージ量を引数にCmdTellServerWhoWasShotメソッドを呼んでいます〜


CmdTellServerWhoWasShotメソッドでは今のところ、取得した名前を元にGameObjectを取得しているだけです〜
次回以降で実際にダメージを与えていくと思われます〜

②画面に照準を表示させる

今のままでも画面中央にPlayerが来た時に画面をクリックすれば、CmdTellServerWhoWasShotメソッドを実行できますが、敵Playerが画面中央に来たのが分かりやすいように照準を表示します〜


まずはImageオブジェクトを作成します〜HierarchyビューからCreate > UI > Imageを選択します〜


f:id:hiyotama:20150713111424p:plain


Anchor Presetをcenter - middleにし、WidthとHeightをそれぞれ4に設定します〜また、ImageのColorを赤にします〜


f:id:hiyotama:20150713111620p:plain
Imageの設定


f:id:hiyotama:20150713111831p:plain
画面中央に照準を表示


この赤点に敵Playerが重なった時に画面をクリックすれば、CmdTellServerWhoWasShotメソッドを実行することができます〜

③結果


f:id:hiyotama:20150713112159p:plain
照準を合わせてクリック!


f:id:hiyotama:20150713112334p:plain
Playerタグ取得!


今回はここまでです〜

ありがとうございました〜


【Unity9】UNETでマルチプレイヤーなオンラインゲーム開発【UNET1】
【Unity9】UNETでプレイヤーの動きを補間し、なめらかな動きを実現する【UNET1-2】
【Unity9】UNETでネットワーク越しに傾き(Rotation)を同期させる【UNET2】
【Unity9】UNETでオンライン開始時のプレイヤー生成位置を変更する【UNET2-2】
【Unity9】UNETのネットワークトラフィックを軽減し、効率化する【UNET3】
【Unity9】UNETのlatency(遅延時間)を改善する【UNET4】
【Unity9】UNETのlatency(遅延時間)を表示して、ちょっとだけ改善する【UNET4-2】
【Unity9】UNETのSyncVarのhookの使用例と、前時代の同期方法【UNET5】
【Unity9】UNETを使ってRotationを同期させる【UNET6】
【Unity9】UNETで各プレイヤーにPlayerIDを設定する【UNET7】
【Unity9】UNETで敵プレイヤーにダメージを与える!【UNET8】
【Unity9】UNETでHPを画面に表示し、Playerへダメージを与える【UNET9】
【Unity9】UNETでHPが0以下になった時、Playerを破壊する!【UNET10】
【Unity9】UNETで死んだPlayerを生き返らせる!【UNET11】
【Unity9】UNETでゾンビAIを出現させる!【UNET12】
【Unity9】UNETでゾンビ生成時にユニークなIDを付ける!【UNET13】
【Unity9】UNETでゾンビを撃つ!【UNET14】
【Unity9】UNETでゾンビに攻撃させる!【UNET15】
【Unity9】UNETでゾンビの動きをスムーズにシンクロさせる!【UNET16】
【Unity9】UNETでゾンビ発生地点を増やす【UNET17】
【Unity9】UNETで発生したバグを取り除く【UNET18】
【Unity9】Unity MultiPlayerを使ってネットワーク越しにマッチメイキング!【UNET19】
【Unity9】GUIを改善して、Network Managerを見やすくする!【UNET20】
【Unity9】表示したGUI(Network Manager)を機能させる!【UNET20-2】
【Unity9】UNETでAnimationを同期させる!【UNET21】