top of page

1分間 Unity講座 定期的に弾を撃ち続ける方法1(Time.deltaTime の活用)

このブログはUnityの初心者向けに、Untiyの機能の使い方、基本のスクリプトファイルの使い方から応用までをご説明しています。中級以上の方に読んでいただきたい内容も随時更新していますので、お時間がある方、検索でここにアクセスされた方はぜひ立ち寄っていってください。


今回は2Dのプロジェクトで一定間隔ごとに弾を撃ち続ける方法のご説明です。敵や味方の弾幕に使えそうです。

今回は Time.deltaTime を使って時間を計測し、指定した時間になったら弾を発射する方法をご説明します。


下の動画は「ファイブボックス 一分間Unity講座 定期的に弾を発射し続ける方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください。




1 素材の作成


■ Player

ヒエラルキー上で 2DObject ⇒ Sprite ⇒ Triangle で三角形のオブジェクトを配置

名前をPlayerにしておきます。

※今回の課題では動きはないので、これだけでOKです。

Unityで2Dオブジェクトの三角形を作成

■ Bullet

上で作成したPlayerと同様、2DObject ⇒ Sprite ⇒ Circle で弾の素材を作ります。

Unityで2Dオブジェクトの円を作成

名前を Bullet にしておきます。さらに以下の項目を修正

  • Transformコンポーネント Scale を0.3倍に指定

  • SpriteRendererコンポーネント Color に任意の色を指定(サンプルではオレンジ)

  • Rigidbodyコンポーネント 【追加】 GravityScale を 0 にして重力を無し

最後はAssetsフォルダにドラッグ&ドロップでプレハブにしておきます

Bulletの作成と初期設定

ヒエラルキー上のBulletは不要なので削除しておきます。


2 スクリプトファイル

弾を発射するプログラム「PlayerShot」を作成します。名前は任意です。


PlayerShotには以下のコードを記述します。


[SerializeField] GameObject bulletPrefab;   //Bulletのプレハブ
float timer;        //経過時間を管理するタイマー

void Update()
{
    timer += Time.deltaTime;    //timerに経過時間を加算
    if (timer > 0.2f)           //timerが0.2秒を超えたら
    {
        //弾を自分の場所に生成し、bullet という名前で変数化
        GameObject bullet = Instantiate(bulletPrefab, transform.position, 
uaternion.identity);
        //bullet からRigidbody2Dを取得し、上向き×200の力を加える
        bullet.GetComponent<Rigidbody2D>().AddForce(transform.up * 200);
        Destroy(bullet,2.0f);   //2秒後にbulletを削除
        timer = 0;              //timerを0でリセット
    }
}

Time.deltaTime

Update関数やCollisionStay関数などの繰り返し呼び出される関数で使用される、直前のフレームから現在のフレームまでにかかった時間を示します。

高フレームレートの場合、deltaTime の値は小さくなり、低フレームレートの場合は値が大きくなります。フレームレートが違っても、Time.deltaTime を累積していくことで、リセットされてからの経過時間を図ることができます。


今回は比較的簡単なスクリプトファイルです。

作成したスクリプトファイルを Player にアタッチ、変数 BulletPrefab には作成済みの「Bullet」のプレハブをAssignします。

作成したBulletをプレハブ化

これでプレイすると、0.2秒に1発ずつ弾を撃ち続けるオブジェクトができています。


 

ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

コメント


bottom of page