Unity5 C#でのあたり判定について
Posted: 2016年8月24日(水) 16:53
ローグ風のダンジョン探索ゲームをUnityで実装したいと考えております。
Unityになれておらず、あたり判定について上手く理解できておりません。
やりたいこととしてはBoxCollider2Dがアタッチされている壁と当たった時に移動できなくしたいです。
スクリプトで上記の処理を書いているのですが、Update関数が終わってから
OnTriggerEnter2Dなどが呼ばれているため上手く実装できておりません。
こちら対処法がお分かりの方おりませんでしょうか。
Player・・・Rigidbody2D(Is Kinematicにチェック),BoxCollider2Dがアタッチ
Wall・・・BoxCollider2D(Is Triggerにチェック)がアタッチ
Unityになれておらず、あたり判定について上手く理解できておりません。
やりたいこととしてはBoxCollider2Dがアタッチされている壁と当たった時に移動できなくしたいです。
スクリプトで上記の処理を書いているのですが、Update関数が終わってから
OnTriggerEnter2Dなどが呼ばれているため上手く実装できておりません。
こちら対処法がお分かりの方おりませんでしょうか。
Player・・・Rigidbody2D(Is Kinematicにチェック),BoxCollider2Dがアタッチ
Wall・・・BoxCollider2D(Is Triggerにチェック)がアタッチ
public class PlayerController : MonoBehaviour {
float moveSpeed = 0.04f;
Vector3 move = new Vector3 (0, 0, 0);
Vector3 oldPos;
bool moveFlag = true;
void Init() {
this.move = new Vector3 (0, 0, 0);
this.moveFlag = true;
this.oldPos = transform.localPosition;
}
// Use this for initialization
void Start () {
Init ();
}
// Update is called once per frame
void Update () {
//this.moveFlag = true;
// キャラクターの移動
this.move = new Vector3 (0, 0, 0);
// 右
if (Input.GetKey (KeyCode.RightArrow)) {
this.move.x += this.moveSpeed;
}
// 左
if (Input.GetKey (KeyCode.LeftArrow)) {
this.move.x -= this.moveSpeed;
}
// 上
if (Input.GetKey (KeyCode.UpArrow)) {
this.move.y += this.moveSpeed;
}
// 下
if (Input.GetKey (KeyCode.DownArrow)) {
this.move.y -= this.moveSpeed;
}
if (this.moveFlag) {
this.oldPos = transform.localPosition;
transform.Translate (this.move);
}
}
void OnTriggerEnter2D(Collider2D other){
//this.moveFlag = false;
transform.localPosition = oldPos;
this.move = new Vector3 (0, 0, 0);
}
void OnTriggerStay2D(Collider2D other){
//this.moveFlag = false;
transform.localPosition = oldPos;
this.move = new Vector3 (0, 0, 0);
}
}