ゴマちゃんフロンティア

アザラシが大好きなエンジニアの開発日記です

【Unity】アセット「X-WeaponTrail」で武器を振った時の軌跡を表示する

time 2015/11/03

今回はAssetStoreで配信されているアセット「X-WeaponTrail」の紹介です。
https://assetstore.unity.com/packages/tools/particles-effects/x-weapontrail-20972

武器を振ったときの軌跡を表示してくれるアセットで、とても見栄えが良くなります。
意外と使われていないようですが、私的にはかなりおすすめで、自分のゲームでも多用しています。

導入と使い方

アセットストア (記事冒頭のURL) からダウンロードします。
有料なのでご注意ください。そこそこお値段するので、セールやクーポンが来るまで待つのも手です。

インポートすると中に「X-WeaponTrail」というプレハブがあるので、これを表示したいキャラクターの子オブジェクトに追加します。

キャラクターのアニメーションに合わせる場合、Armatureの武器の動きに対応するBoneの子オブジェクトとして設定します。メッシュにそのままくっ付けても追従しないので注意が必要です。
このあたりはインポートした中にあるデモシーンを見ると分かりやすいです。

プレハブの子オブジェクトに「StartPoint」と「EndPoint」があるので、これで軌跡の位置と幅を調節します。
それぞれ赤と青の点が表示されるため分かりやすいです。

次にプレハブ自体に付いている「X WeaponTrail」コンポーネントを設定します。
といっても「MyColor」を必要に応じて変えるくらいで、他は初期値で問題ないかと思います。

ここまでできたら再生して武器を動かしてみましょう。

上手く設定できていれば、上のような軌跡が表示されます。

軌跡の表示・非表示を切り替えたい場合

実際のゲームで使う場合、常に軌跡を出しっぱなしにするというケースは少ないですよね。
WeaponTrailクラスのメソッドを呼び出すと表示・非表示を切り替えられます。例えばこんな感じ。

using UnityEngine;
using XftWeapon;

public class WeaponTrailTest : MonoBehaviour
{
    [SerializeField]
    private XWeaponTrail weaponTrail;

    void Start()
    {
        // 開始時は非表示にしておく
        weaponTrail.Deactivate();
    }

    public void StartAttack()
    {
        weaponTrail.Activate();
    }

    public void EndAttack()
    {
        weaponTrail.Deactivate();
    }
}

これはサンプルなので、StartAttack()EndAttack()の呼び出し元は割愛しています。実際のゲームに合わせて実装してあげてください。
ちなみに私の場合はStateMachineBehaviourを利用し、アニメーションの途中でそれぞれ呼ばれるようにしています。

weaponTrailフィールドの参照はあらかじめインスペクター上から設定しておきましょう。

以下は「攻撃する瞬間にActivate()」「攻撃を終えた後にDeactivate()」を呼び出した例です。

こんな感じで簡単に制御できるので、試してみてください。

コメント

  • はじめまして。
    X-WeaponTrailについて調べているうちにこちらへ参りました。
    購入して使っているのですが、
    どうしても軌跡が出っぱなしで困っています。
    公式の方に従ってやってみているつもりなのですが、
    うまくいかず・・・
    記事も拝見しましたが、もしご迷惑でなければ、
    もう少し教えていただけないでしょうか・・・。
    X-WeaponTrailについてweb検索やtwitterなどで調べても、
    使用している方が少ないようでして・・・。

    しろから  2020年8月3日 1:54 AM

    • しろからさん
      コメントありがとうございます。

      こちら記事が古くて申し訳ありません。
      現時点の最新バージョン(1.4.4)の場合、XWeaponTrailクラスのメソッドから表示・非表示が行えます。

      ・表示したいとき: `XWeaponTrail.Activate()`
      ・非表示にしたいとき: `XWeaponTrail.Deactivate()`

      なので使用しているクラスにXWeaponTrailのフィールドを作り、インスペクター上から参照を設定してあげた後で、上記メソッドを呼び出す形でいかがでしょうか?

      riberunn  2020年8月3日 9:52 AM

  • りべるん様
    お早いお返事ありがとうございます。
    私は
    デフォルトでは軌跡をオフにし、
    剣を振るときのみアニメーションイベントのインスペクターからオンにしようと
    考えていたのですが、
    まずデフォルトでオフにするのがどうしてもできず・・・
    そもそもアニメーションイベントでオン、という認識も間違っているのでしょうか?
    プログラミングも含め初心者の質問で申し訳ありません・・・。

    しろから  2020年8月3日 4:02 PM

  • りべるん様
    記事に詳しくしていただきありがとうございます。
    おかげさまで
    軌跡のオンオフができるようになりました・・・!
    本当にありがとうございます!

    しろから  2020年8月3日 8:47 PM

down

コメントする