Unityで銃を撃つ #1 銃のアセットを持たせてパーティクルを再生する

投稿者: | 2019-12-29


リアル銃をFPSコントローラーに持たせて撃ってみます。

アセットストアで銃を検索するとたくさんのアセットが出ます。

無料のものを適当にダウンロード&インポートしてみます。

プレハブから一つ選んでシーンに配置しました。

スタンダードアセットのFPSコントローラも配置します。

銃をプレイヤーに持たせるには、銃のプレハブをFPSコントローラーの子オブジェクトのFirstPersonCharacterの子オブジェクトにします。

ゲーム画面に銃が映るのを見ながら、シーン上で銃の位置や向きを変えました。

レティクルを表示する

フリーの画像素材サイトからレティクルをダウンロードして、Unityにインポートしました。

画像を選択してインスペクタでTexture Typeを「Sprite」にします。

ヒエラルキーウィンドウでImageを新規作成します。

CanvasにImageが畳まれています。

まずCanvasのインスペクタでUI Scale Modeを「Scale With Screen Size」にします。

Imageを選択して、インスペクタのSource Imageにレティクル画像をドラッグアンドドロップします。

画像の位置と大きさがおかしいので修正します。

まず、ImageのRect Transformの左側にある四角い画像をクリックして、Shift,Altを押しながら真ん中を選択します。

画像が真ん中に表示されたら、WidthとHeightで大きさを変更します。

画像を半透明にしたいときは、Colorをクリックしてカラーパレットを出して、アルファチャンネルの値を下げます。

これでレティクルが付きました。

パーティクルとライトを動かす

銃のプレハブをよく見ると、パーティクルとポイントライトが付いています。ポイントライトはデフォルトで非アクティブになっています。

パーティクルはマズルフラッシュと排莢のようです。

これらをスクリプトでオンオフできるようにします。
新しく空のゲームオブジェクトを作って、新規スクリプトを付けます。

マウスの左クリックを押すとパーティクルの再生が始まって、離すと停止させます。ポイントライトはキーボードのTキーでオンオフさせます。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class GunScript : MonoBehaviour
  6. {
  7. public ParticleSystem gunParticle;
  8.  
  9. public GameObject gunLight;
  10.  
  11.  
  12. // Start is called before the first frame update
  13. void Start()
  14. {
  15. }
  16.  
  17. // Update is called once per frame
  18. void Update()
  19. {
  20.  
  21. if (Input.GetMouseButtonDown(0)) // マウス左クリックを押した時
  22. {
  23. gunParticle.Play(); // パーティクルの再生
  24.  
  25. }
  26. else if (Input.GetMouseButtonUp(0)) // マウス左クリックを離した時
  27. {
  28. gunParticle.Stop(); // パーティクルの停止
  29.  
  30. }
  31.  
  32. if (Input.GetKeyDown(KeyCode.T)) // Tキーを押した時
  33. {
  34. gunLight.SetActive(!gunLight.activeSelf); // ライトのオンオフ
  35. }
  36.  
  37. }
  38. }

gunLight.activeSelfは、ライトの今のオンオフの状態です。gunLight.SetActive()は、trueを入れるとオンにfalseを入れるとオフになるので、今の状態をNOT付きで入れることで、オフならオンに、オンならオフになります。

パーティクルとライトをスクリプトにアタッチします。

次はアセットにデフォルトで含まれているアニメーションも切り替えてみます。

コメントを残す

メールアドレスが公開されることはありません。