リアル銃を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付きで入れることで、オフならオンに、オンならオフになります。
パーティクルとライトをスクリプトにアタッチします。
次はアセットにデフォルトで含まれているアニメーションも切り替えてみます。