リアル銃を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キーでオンオフさせます。
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class GunScript : MonoBehaviour
- {
- public ParticleSystem gunParticle;
-
- public GameObject gunLight;
-
-
- // Start is called before the first frame update
- void Start()
- {
-
- }
-
- // Update is called once per frame
- void Update()
- {
-
- if (Input.GetMouseButtonDown(0)) // マウス左クリックを押した時
- {
- gunParticle.Play(); // パーティクルの再生
-
- }
- else if (Input.GetMouseButtonUp(0)) // マウス左クリックを離した時
- {
- gunParticle.Stop(); // パーティクルの停止
-
- }
-
- if (Input.GetKeyDown(KeyCode.T)) // Tキーを押した時
- {
- gunLight.SetActive(!gunLight.activeSelf); // ライトのオンオフ
- }
-
- }
- }
gunLight.activeSelfは、ライトの今のオンオフの状態です。gunLight.SetActive()は、trueを入れるとオンにfalseを入れるとオフになるので、今の状態をNOT付きで入れることで、オフならオンに、オンならオフになります。
パーティクルとライトをスクリプトにアタッチします。
次はアセットにデフォルトで含まれているアニメーションも切り替えてみます。