ここから本文です

Unityで2Dのアクションゲームを作っています。

青白さん

2016/11/1110:45:55

Unityで2Dのアクションゲームを作っています。

プレイヤーが右を向いたときに銃から右方向へ、左を向いたときには左方向へ弾を飛ばしたいのですが、どうすればいいのか行き詰まっています。

下記のように記述すると、右を向いて撃った弾が、次に左を向いて撃ったときに左へ戻ってきます。
右を向いて発射した弾が左へ移動しない、左を向いて発射した弾が右へ移動しないようにするにはどうしたらいいか、助言をお願いします。




public class bullet : MonoBehaviour {
    
    public float speed = 5;
    private GameObject player;
    private player_move playerScript;
    




    // Use this for initialization
    void Start () {
        player = GameObject.Find("player");
        playerScript =player .GetComponent<player_move>();
        Destroy(gameObject, 3);
        
    }

// Update is called once per frame
void Update () {


        if (Input.GetKey(KeyCode.W))
        {
            if (mendakoScript.isMendako == false)
            {
                
                    GetComponent<Rigidbody2D>().velocity = Vector2.right * speed;
                    
                
            }
            else
            {
               
                    GetComponent<Rigidbody2D>().velocity = Vector2.left * speed;
                    
            }
               
           
        }
          
    }
}

閲覧数:
114
回答数:
1

違反報告

ベストアンサーに選ばれた回答

wis********さん

2016/11/1111:52:23

2Dでしたら、Vector2.right、Vector2.leftを使えば、
その名の通り右、左に飛んでいきます。

Vector2 direction;
というメンバ変数を作り、プレイヤーがどちらを向いているかを見て、
代入してやります。
(↓ではplayer_moveに、右を向いていたらtrue,左を向いていたらfalseを返すisRight()というメソッドを作っています)

void Start () {
player = GameObject.Find("player");
playerScript =player .GetComponent<player_move>();
Destroy(gameObject, 3);
direction = playerScript.isRight() ? Vector2.right : Vector2.left;
}

あとはUpdateで
GetComponent<Rigidbody2D>().velocity = direction* speed;

とします。


もうちょっと補足で、
direction = player.transform.TransformDirection(Vector3.right);
これで、今のプレイヤーにとっての右方向(正面方向)が取れます。
これならキャラクターがもし斜めを向いたときでも、斜め方向が取れるので、
弾が向いている方向に飛びます。
また、Transformがあれば取れるので、プレイヤー以外の敵が弾を飛ばしたくなった時にも簡単です。

  • 質問者

    青白さん

    2016/11/1113:16:47

    ありがとうございます!!
    試してみましたが、playerScript.isRightをメソッドのようにしようすることはできませんというメッセージがでてきました。

    あと、
    direction = player.transform.TransformDirection(Vector3.right);
    この記述は、どこに入れたらいいでしょうか。

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2016/11/11 13:55:17

成功しました!!とっても嬉しいです!
ありがとうございます!
また、機会がありましたらよろしくお願い致します。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる