Unityでジャンクゲームを作っているっぽい

会社帰りにGPD PocketにUnity入れてゲーム作ってます

03 playerの移動の基本

今回は自動で移動を目指す

Player_Move.cs を用意

とりあえず、右に移動させるスクリプトを用意

public class Player_Move : MonoBehaviour{
	public float speed = 3.0f;	//移動speed
	void Update(){
		//右移動
		transform.position += transform.right * speed * Time.deltaTime;
	}
}

スクリプトをPlayer_mainにアタッチ

f:id:mekatamatama:20201008220722p:plain
右に移動しましたが、ずーっと右に移動して画面外へ移動してしまいます…

Wall_Rとの接触判定をしたい

壁にtagを設定

f:id:mekatamatama:20201008221943p:plain

Player_mainの子供にPlayer_collisionを追加。

f:id:mekatamatama:20201008222454p:plain

Player.cs を新規に作ってPlayer_collisionにアタッチ

ここで、右の壁に接触したかを判定する

public class Player : MonoBehaviour{
	public bool isWallHit_R;	//wall hit flag
	void Start(){
		isWallHit_R = false;//初期化
	}
	//他のオブジェクトとの当たり判定
	void OnTriggerEnter( Collider other) {
		if(other.tag == "Wall_R"){
			isWallHit_R = true;
		}
	}
}
Player_Move.cs に追記

player.csで判定したflagを取得して、移動切り替えのの判定に利用する

public class Player_Move : MonoBehaviour{
	private Player childScript;	//Player.csスクリプトを入れる用
	public float speed = 3.0f;	//移動speed
	void Start(){
		//下の階層のオブジェクトにアタッチしている(Player.cs)を参照
		childScript = GetComponentInChildren<Player>();
	}
	void Update(){
		//右の壁に接触したら
		if(childScript.isWallHit_R == true){
			//左移動
			transform.position -= transform.right * speed * Time.deltaTime;
		}
	}
}

判定できるようになった
これで右の壁に接触すると左に移動できるようになった