【3D】カーソルクリックエフェクト【Unity6】

unity技術

カーソルでクリックした場所にエフェクトを発生させる方法です。

簡易版

  • アニメーションオブジェクト(エフェクト素材)を用意。
  • オブジェクト破壊スクリプトを最終フレームにイベント追加。
  • アニメーションオブジェクト(エフェクト素材)をプレハブ化。
  • クリック検知スクリプト空オブジェクトにアタッチ。

アニメオブジェクトをプレハブ化

エフェクトに使用するアニメーションオブジェクトを「プレハブ」化しておきます。

Hierarchy」にあるオブジェクトを「Assets」内へドラッグすることで「プレハブ」化することができます。
プレハブ化ができたらアイコンが水色に変化します。

Hierarchy」にあるプレハブ化したオブジェクトは削除しておきます。

マウスカーソルのクリック検知

左クリックの有無とカーソル位置検出のためのスクリプトを新規作成します。

ファイル名は任意で、今回は「ClickEffectS」としました。

using UnityEngine;
public class ClickEffectS : MonoBehaviour
{
public GameObject clickEffectPrefab;
void Update()
{
if (Input.GetMouseButtonDown(0)) // 左クリックの検出
{
Vector3 mousePosition = Input.mousePosition;
mousePosition.z = 10.0f; // カメラからの距離を設定
Vector3 worldPosition = Camera.main.ScreenToWorldPoint(mousePosition);
Instantiate(clickEffectPrefab, worldPosition, Quaternion.identity);
}
}
}

作成したスクリプトを空のオブジェクトにアタッチします。

Hierarchy」上に空オブジェクトを作成し「ClickEffectS」スクリプトをアタッチします。
オブジェクト名は任意で、今回は「ClickEffectMnager」としました。

アタッチしたスクリプトの変数フィールド「Click Effect Prefab」に先ほど作成したアニメーションのプレハブをドラッグします。

クリック検知設定は以上です。

1回目テストプレイ

このままテストプレイをしてみると、クリックでアニメーションは出現しますが、出っ放しになってしまっています。(Hierarchyにもプレハブが追加され続けているのが分かります)

アニメーションが終わったときにオブジェクトを削除するように設定していきましょう。

アニメーションにイベントを追加

自身を破壊するスクリプトを新規作成します。

ファイル名は任意で、今回は「DestroyAfterAnimation」としました。

using UnityEngine;
public class DestroyAfterAnimation : MonoBehaviour
{
// アニメーションが終了した時に呼ばれるコールバック関数
void OnAnimationEnd()
{
Destroy(gameObject); // このGameObjectを破棄する
}
}

作成した「DestroyAfterAnimation」スクリプトをアニメーションオブジェクトにアタッチします。

指定アニメーションオブジェクトはプレハブ化で指定しているので、該当するプレハブをダブルクリックして中身のアニメーションオブジェクトにアタッチします。

Animation」ウィンドウを開き、アニメーションが終わる最終フレームに移動しておきます。
そこで「Add Event」ボタンを押して、イベントポイントを追加します。

追加したイベントのインスペクターで「DestroyAfterAnimation」スクリプト内の関数である「OnAnimationEnd()」を選択します。

アニメーションフレームへのイベント設定は以上です。

プレハブ修正後に「ClickEffectMnager」の変数フィールド「Click Effect Prefab」が外れていたら、再びプレハブをドラッグして登録しましょう。

2回目テストプレイ

コメント