void FixedUpdate() { bool isBlock; //進行方向にブロックがあるかどうか switch (moveDirection) { case MOVE_DIR.LEFT: //左に移動 rbody.velocity = new Vector2(moveSpeed * -1, rbody.velocity.y); transform.localScale = new Vector2(1, 1); // localPosition = 親の Transform オブジェクトから見た相対的なスケール //↑これで左右の反転を行っている //Linecast(bool型)を使ってキャラクター前方に衝突判定を与える isBlock = Physics2D.Linecast //(始点、終点、レイヤー) レイヤーは衝突の対象となるもの (new Vector2(transform.position.x, transform.position.y + 0.5f), new Vector2(transform.position.x - 0.3f, transform.position.y + 0.5f), blockLayer); if (isBlock) //ぶつかったら移動方向反転 { moveDirection = MOVE_DIR.RIGHT; } break; case MOVE_DIR.RIGHT: //右に移動 rbody.velocity = new Vector2(moveSpeed * 1, rbody.velocity.y); transform.localScale = new Vector2(-1, 1); //反転 isBlock = Physics2D.Linecast (new Vector2(transform.position.x, transform.position.y + 0.5f), (new Vector2(transform.position.x + 0.3f, transform.position.y + 0.5f)), blockLayer); if (isBlock) { //ぶつかったら移動方向反転 { moveDirection = MOVE_DIR.LEFT; } } break; } }