Пример #1
0
    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;
        }
    }