合計 昨日 今日

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

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: 匿名
[URL]
Date: 2017年12月28日(木) 01:05
No: 1
(OFFLINE)

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

UnityでSTGを作り始めましたが、弾を遅延なく発射させる方法がイマイチ見つかりません。
一応https://codegenius.org/open/courses/20/sections/68のコードを参考にしているのですが、これだとボタンを押してから若干の遅延が出ます。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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);
            }
        }
    }
}


どなたか解決法をご存知の方がいらっしゃいましたらどうかよろしくお願いします。

Name: sadora3
[URL]
上級者(24,158 ポイント)
Date: 2017年12月29日(金) 20:25
No: 2
(OFFLINE)

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

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

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

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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」というマジックナンバーは気持ちが悪かったので、定数化しました。

Name: 匿名
[URL]
Date: 2018年1月11日(木) 17:22
No: 3
(OFFLINE)

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

[解決!]

>sadora3氏

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

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


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[10人]