Unityでの自機ショット連射方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
匿名

Unityでの自機ショット連射方法

#1

投稿記事 by 匿名 » 6年前

UnityでSTGを作り始めましたが、弾を遅延なく発射させる方法がイマイチ見つかりません。
一応https://codegenius.org/open/courses/20/sections/68のコードを参考にしているのですが、これだとボタンを押してから若干の遅延が出ます。

コード:

void Update () {

		// ★改良(長押し連射)
		timeCount += 1;

		// ★改良(長押し連射)
		// 「GetButtonDown」を「GetButton」に変更する(ポイント)
		if (Input.GetButton ("Fire1")) {

			// ★改良(長押し連射)
			// 「5」の部分の数字を変えると「連射の間隔」を変更することができます(ポイント)
			// 「%」と「==」の意味合いを復習しましょう。
			if (timeCount % 5 == 0) {
				
				GameObject missile = Instantiate (missilePrefab, transform.position, Quaternion.identity) as GameObject;
				Rigidbody missileRb = missile.GetComponent<Rigidbody> ();
				missileRb.AddForce (transform.forward * missileSpeed);
				AudioSource.PlayClipAtPoint (fireSound, transform.position);
				Destroy(missile, 2.0f);
			}
		}
	}
}
どなたか解決法をご存知の方がいらっしゃいましたらどうかよろしくお願いします。

sadora3
記事: 175
登録日時: 11年前

Re: Unityでの自機ショット連射方法

#2

投稿記事 by sadora3 » 6年前

>>ボタンを押してから若干の遅延が出ます
これは初弾のことですよね?

でしたら、以下のようにすると、匿名さんが想定している動作になると思われます。

コード:

void Update () {
    const int SHOT_INTERVAL = 5;
    if (Input.GetButton ("Fire1")) {
        timeCount++;

        //カウントが発射間隔に達したら、弾を発射
        if (timeCount > SHOT_INTERVAL) {
            timeCount = 0;	//カウント初期化
            GameObject missile = Instantiate (missilePrefab, transform.position, Quaternion.identity) as GameObject;
            Rigidbody missileRb = missile.GetComponent<Rigidbody> ();
            missileRb.AddForce (transform.forward * missileSpeed);
            AudioSource.PlayClipAtPoint (fireSound, transform.position);
            Destroy(missile, 2.0f);
        }
    }else{
        //「Fire1」ボタンが押されていない場合、次弾用意
        timeCount = SHOT_INTERVAL;
    }
}
動作確認はしていないので、間違っていたら申し訳ありません。
ちなみに「5」というマジックナンバーは気持ちが悪かったので、定数化しました。

匿名

Re: Unityでの自機ショット連射方法

#3

投稿記事 by 匿名 » 6年前

>sadora3氏

返信遅れて申し訳ありません。
ご回答ありがとうございました。timecountが初期の0の時に発射、5を過ぎるとまた0に戻って…という方式は思いつきませんでした。

また、お恥ずかしながら「匿名」のような名前は規約違反だったということを確認しておりませんでした。大変申し訳ありませんでした。
次回から質問させていただく場合は適切な名前を名乗らせていただきます。
今後ともどうかよろしくお願いします。

返信

“C言語何でも質問掲示板” へ戻る