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

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: Unityでの自機ショット連射方法

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

#3

by 匿名 » 6ヶ月前

>sadora3氏

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

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

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」というマジックナンバーは気持ちが悪かったので、定数化しました。

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);
			}
		}
	}
}
どなたか解決法をご存知の方がいらっしゃいましたらどうかよろしくお願いします。

ページトップ