こんにちは、カバゴトです!今回は、左クリックで地面から武器を出す方法について超初心者向けに解説していきたいと思います!
完成形は下のようになります!

キャラクターの作成なしでも、左クリックすると武器が地面から出すことは可能です。
今回は私がキャラクターを動かしながら武器を地面から出したかったので、キャラクターの作成も行っています!
Starter Assets – ThirdPersonをインストールする(したい人のみ)
Starter Assets – ThirdPersonのインストール
まず、TPS視点で動けるキャラクターを設定します。
UnityAssetStoreから、「Stater Assets ThirdPerson」を検索します。
上の画像のようなページが出てくると思うので、青色ボタン「Add to My Assets」→「Open in Unity」をクリックします。


すると、Unity内でこのような画面がでてくるので、「Import」をクリックします。

インストール・ダウンロードが完了すると、「StarterAssets」フォルダーが出てきます。

「Assets」→「StarterAssets」→「ThirdPersonController」→「Scenes」の順にフォルダーを開いていき、「Playground」をダブルクリックします。

すると、このような画面がでてくると思います!
先ほどの「Playground」を開いても全面がピンク色になっていまうことがあります。
そうなった方は、下の記事を参考にしてください。

キャラクターのみ別のシーンに持っていく

プロジェクトビュー(下のフォルダー以外の余白)を右クリック→「Create」→「Scene」で新しいシーンを作成します。シーンの名前は何でもいいですが、今回は「NeedleGame」にしました。

先ほどのStaterAssetsのヒエラルキービューの中の「MainCamera」~「UI_EventSystem」を全て選択し、コピーします。(シフト+左クリック、ctrl+cで簡単にできます)

先ほど作った「NeedleGame」のヒエラルキービューにペーストします。(ctrl+v)

一番上の「MainCamera」を右クリック→deleteで消します。

GameObjectでPlaneを作成して実際に実行すると、キャラクターは動かせるようになります!
出現エフェクトの作成
出現するときのエフェクトはこのアセットを用いました。同じ要領でUnityで開きます。

インポートが完了すると、下のようなフォルダーが出てくると思います。

そのフォルダーから、「Assets」→「Hovi Stusdio」→「Magic effects pack」→「Demo scene」→「Magic effects」をクリックします。

シーンを開くと、全体がピンク色のシーンに移ります。ヒエラルキービューの「Healing circle」をコピーして、先ほどの「NeedleGame」にコピー&ペーストします。

すると、「NeedleGame」に「Healing circle」を出すことができます。

ヒエラルキービューの「Healing circle」をクリックし、インスペクタービューの色を選択します。色は何色でもいいですが、私は「255,80,80」で少し明るめの赤に設定しました。

先ほど赤色にした「Healing circle」以外の、「Sides」「Light」を赤色に、「Spark」「Healing」を削除します。


「Healing circle」のStart Sizeを1に設定し、「Sides」のx,y,zを「0.5,1,0.5」に設定します。

ヒエラルキービューにある「Healing circle」をプロジェクトビューにドラッグ&ドロップし、プレハブ化します。そして、プレハブの名前を変更して「Circle」にします。

「Healing circle」の名前を「Circle」に変更します。

これで、出現エフェクトの設定が完成します!
出てくる武器の設定
今回はこの武器アセットを使いました!これもインストールしましょう。

インストールした後「Assets」→「Low Poly」→「Prefabs」から「Dagger」をヒエラルキービューに持っていきます。

「Dagger」をプレハブ化します。プレハブ化した「Dagger」を「Needle」の名前に変更し、ヒエラルキービューの名前も「Needle」にします。
スクリプト作成

ヒエラルキービューに右クリックで「Create Empty」で空のオブジェクトを作成し、「NeedleManager」と名前を付けます。
using UnityEngine;
public class NeedleManager : MonoBehaviour
{
public GameObject circlePrefab;
public GameObject needlePrefab;
public float delay; // ニードルが出るまでの時間
public float destroyTime; // オブジェクトを消すまでの時間
public LayerMask groundLayer; // 地面レイヤー(Raycastヒット対象)
void Start()
{
// カーソルを表示&自由に動かせるようにする
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("クリック検知!");
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100f, groundLayer))
{
Debug.Log("地面ヒット!");
Vector3 spawnPos = hit.point;
GameObject redCircle = Instantiate(circlePrefab, spawnPos, Quaternion.identity);
Destroy(redCircle, destroyTime);
StartCoroutine(SpawnNeedleAfterDelay(spawnPos));
}
else
{
Debug.Log("ヒットなし(地面に当たっていない)");
}
}
}
System.Collections.IEnumerator SpawnNeedleAfterDelay(Vector3 position)
{
yield return new WaitForSeconds(delay);
GameObject needle = Instantiate(needlePrefab, position, Quaternion.identity);
Destroy(needle, destroyTime);
}
}
「Assets」→「Create」→「C#Script」でスクリプトを作成し、上のコードを書き、先ほどの「NeedleManager」にドラッグ&ドロップします。

「NeedleManager」の「Circle Prefab」「Needle Prefab」にプレハブ化した「Needle」と「Circle」をドラッグ&ドロップします。

「Delay」と「Destroy Time」のパラメータを設定します。「Delay」は、出現エフェクトが出てきた後に武器が出てくるまでの時間、「Destroy Time」は出現エフェクトと武器が出現時間です。また、「Ground Layer」を「Default」に設定します。

これで完成です!武器の種類や大きさは適宜変えてみてください。
補足:装飾
完成系の画像では、下のアセットを使って、地面の色を表現しています。
終わりに
最後まで読んでくださりありがとうございます!今回は左クリックで地面から武器を出す方法を解説しました。もし、うまくいない場合や意見等あればコメントの方をよろしくお願いします!
この記事が参考になれば幸いです。また、次回のブログでお会いしましょう!
コメント