Idle→AttackはAttack 他に作り方が見つかり(思いつき)次第追記していこうと思います。 - ノード間の感覚が狭い 使用している方が少ないようでして・・・。, こちら記事が古くて申し訳ありません。 動画はこちら VRでの使用を目的に調べていたので、VRに適しているかどうかの評価が多分に含まれます。, 一番オーソドックスなのは、Trail Rendererを使う方法だと思います。(記事も多いです) 2018/6/10追記:Animator使っても結構大丈夫そうになってきました。 Unityでドット絵アニメーションをコードで編集して撮影する. デフォルトでは軌跡をオフにし、 Run→JumpはJump 今回はAssetStoreで配信されているアセット「X-WeaponTrail」の紹介です。 https://github.com/keijiro/Smrvfx Unity これがないと始まらない; Visual Studio スクリプトの編集のおとも。 TypeはVertexだと発生位置が偏りやすいので、EdgeかTriangleにするとよいです。, Inherit VelocityモジュールのMultiplierの数値を0より大きくすることで、剣を振った方向にパーティクルを飛ばすことができるようになります。ModeはCurrentにすると剣の速度の影響を常に受けるようになってしまうので、Initialにするのがいいと思います。, VFX GraphでパーティクルをSkinned Mesh RendererなどMeshから発生させたい場合、現状(2019年12月11日現在)のVFX Graphには標準でそのような機能はついていません。 攻撃アニメーションの名前の変更. Shaderを自分で実装する必要がありますが、一つのTrailだけでできるのは楽でよいです。, もう一つが、「剣向け汎用トレイル Black.Cat's様作」の実装法で、TrailRendererを大量に使用する方法です。 お早いお返事ありがとうございます。 アニメーションの遷移 animator.SetFloat ("Speed", input.magnitude); && !animator.GetCurrentAnimatorStateInfo (0).IsName ("Jump"), キャラクターが剣を振る時に攻撃ボタンを押した時ではなく剣を振りおろすアニメーションの時に剣を振る効果音を鳴らす。. https://youtu.be/mU_uUo__vkw, グローバルモジュール内のSimulationSpaceをWorldにします。 こちらを参考にしてください。(先ほど紹介した炎の軌跡エフェクトもVFX Graphで作成したものです), 他にも作る方法があるかと思いますが、とりあえず自分の知る範囲のことを紹介してみました。 2018/6/10追記:Animator使っても結構大丈夫そうになってきました。 Unityでドット絵アニメーションをコードで編集して撮影する. それぞれ赤と青の点が表示されるため分かりやすいです。, 次にプレハブ自体に付いている「X WeaponTrail」コンポーネントを設定します。 現時点の最新バージョン(1.4.4)の場合、XWeaponTrailクラスのメソッドから表示・非表示が行えます。, ・表示したいとき: `XWeaponTrail.Activate()` WeaponTrailクラスのメソッドを呼び出すと表示・非表示を切り替えられます。例えばこんな感じ。, これはサンプルなので、StartAttack()とEndAttack()の呼び出し元は割愛しています。実際のゲームに合わせて実装してあげてください。 子どもにゲーム作りを通して表現力を伸ばすことを教えています 【Unite Tokyo 2018】誘導ミサイル完全マスター, 一般的な3Dゲームで使用する剣の軌跡であるならば、アニメーションが固定なのでTrailのオンオフで割と簡単にごまかせるのですが、VRだとそうはいきません。, ねじれ問題の対処方法なのですが、二種類あると思っています。 以下の動画が参考になります(英語字幕)。 すでにいくつもの記事でアニメーションイベントを使用した処理を記述していますが改めてアニメーションイベントに特化した記事を書こうと思いました。, アニメーションイベントを使用する前にサンプルとして使用するキャラクターを作成します。, この記事で作成するキャラクターはアニメーションイベントの確認の為に使用する為、多少作りこんだものになっています。, 今回の記事とは直接関係はないので無理に作って確認しなくてももっと簡易な方法で試してみてください。, StandardAssetsにあるモデルのEthanをシーンに配置しEthanのインスペクタにCharacterControllerコンポーネントを取りつけコライダのサイズを調整し、音声再生用のAudioSourceを取りつけます。, EthanにはSaishouMoveCSharpというスクリプトを作成し取りつけます。, スクリプトの具体的な解説は先ほど紹介した他の記事内でされているのでそちらを参照してください。, とりあえずキャラクターが移動、ジャンプ、攻撃が出来るようにしたスクリプトになります。, EthanのインスペクタのAnimatorに設定するAnimatorControllerは, Idle→RunはSpeedが0.1以上 今回はUnity Technologies Japanが提供する「ユニティちゃん」というキャラクターを使用したいと思います。 ユニティちゃんの公式サイトのダウンロードページから「ユニティちゃん 3Dモデルデータ」を選択して、3Dモデルデータのパッケージファイルをダウンロードしましょう。 今回はUnityでスクリプトからメッシュを作成し、剣の軌跡を表示してみたいと思います。, TrailRendererを使えば簡単に剣の軌跡を表示出来そうなんですが、わたくしの場合うまく出来なかった為、スクリプトからメッシュを生成する事にしました。, 剣の軌跡はあらかじめ3DCG等で軌跡のメッシュを手動で作成したりする事でも作成出来るみたいですが、わたくしはスクリプト向きっぽいですね(謎), スクリプトからメッシュを生成するようにすれば、剣を振るアニメーションがどんなものであれ、剣の根元と剣先を設定すれば勝手に軌跡を作成してくれるので、個別のアニメーションに対応して軌跡を作成する必要はありません。, 勝手に軌跡を作成してくれると簡単に言ってますが、機能を作るのは結構大変です・・・・(^_^;), 今回の機能を作成する前にスクリプトからメッシュの生成をする方法について知っておく必要があるので、, 剣の軌跡を表示する為にはメッシュを構成する頂点、UV、三角形を作る方法を考えなくてはいけません。, 剣の軌跡を表示する為には剣の根元と剣の先の位置がいくつかわかればその点を繋いでメッシュの頂点情報に使えそうです。, 剣元と剣先は剣の子要素に空のゲームオブジェクトで作成しておきデータを保存すれば良さそうです。, その為には1フレーム毎(UpdateやLateUpdateでデータを取得)に剣元と剣先の位置をデータとして残しておきます。, 過去の位置データと現在の位置データを頂点にすればそこからUV、三角形を設定出来るのでメッシュの生成が出来ますね。, ↑のように1フレーム前の過去の剣元と剣先の位置と、現在の剣元と剣先の位置の4点がわかれば三角形2つを作って四角形の面が出来、剣の動いた間に軌跡を作る事が出来ますね。, 剣の軌跡用のテクスチャを、作成したメッシュに割り当てる為にはテクスチャの横方向を軌跡のメッシュの数に応じて値を変更しなければいけません。, 過去の1フレームの剣の位置と現在のフレームの剣の位置から三角形を2つ作成するので、縦のVの値は0か1の値で、横方向も0か1の値です。, ですが、剣の軌跡を前のデータを元にさらに作成した場合は縦のVの値は0か1で固定ですが、横のUの値は四角形の数によって変わってきます。, ↑のように過去2フレーム前から現フレームまでのデータを使ってメッシュを作成した場合、中間の1フレーム前のUV座標は剣元が(0.5, 0)、剣先が(0.5, 1)にしなければいけません。, 三角形の作成は剣元と剣先の過去フレームのデータから作成する事が出来るので、後は配列に設定する順番だけですね。, 剣の軌跡は手前側を表で統一したい為、過去フレームから時計回りに頂点を指定し三角形のデータを作成していきます。, 剣元の2フレーム前→剣先の2フレーム前→剣元の1フレーム前(ここで三角形1つが出来る)→剣元の1フレーム前→剣先の2フレーム前→剣先の1フレーム前(ここで三角形2つ目)→剣元の1フレーム前→剣先の1フレーム前→・・・・・, キャラクターには武器を持たせ、攻撃ボタンが押されたら攻撃アニメーションが再生されているとします。, 剣の子要素に空のゲームオブジェクトで剣元(StartPosition)と剣先(EndPosition)を作成し設定します。, ↑のように剣の子要素に剣元と剣先を作成します(名前はわかりやすく変えた方がいいですね・・・・)。, StartPositionとEndPositionが設定出来たので、これらの位置をスクリプトから取得し、メッシュを生成してみます。, RequireComponentアトリビュートを使って、このスクリプトをゲームオブジェクトに取り付けた際にMeshFilterとMeshRendererコンポーネントを自動で取り付けます。, 過去フレームの剣元、剣先の位置を保存する時はStartPointsリストとEndPointsリストを使います。, これらのフィールドはインスペクタで確認出来るようにSerializeFieldアトリビュートを取り付けています。, LateUpdateメソッドで剣元と剣先の位置の保存や削除、メッシュの生成を行っています。, 1つの四角形を作るには最低でもStartPointsに2点、EndPointsに2点が保存されている必要がある為、条件を加えています。, また、StartPointsとEndPointsにどんどんデータを保存してもメッシュの数に応じて必要な数は決まって来るので、それ以上になったらデータを削除しています。, メッシュ数を3にすればStartPointsとEndPointsはそれぞれ4点づつが必要になりますね。, その他の頂点リスト、UVリスト、三角形リストをクリアにし、CreateMeshメソッドが呼ばれる度にデータを消して再度データを作成していきます。, 前の剣元の位置→前の剣先の位置→次の剣元の位置→次の剣元の位置→前の剣先の位置→次の剣先の位置, startPoints(剣元)とendPoints(剣先)は一番古いデータが0番目なので、一番古いデータから新しいデータへと頂点を登録していきます。, 今回は頂点を共有しない形で作っているので、三角形はその頂点を順番に繋いでいくだけです。, 剣の軌跡の場合は頂点を共有した方が光の当たり具合がいいような気がするので、後でそちらのスクリプトに切り替えますが、シェーダ―を切り替えるだけでそれほど問題がないような気もします。, RecalculateBoundsはメッシュを覆うBoundsの再計算、RecalculateNormalsはメッシュの法線方向の再計算です。, 頂点、UV、三角形はそれぞれSetVertices、SetUVs、SetTrianglesを使うとリストを配列に変換しなくても引数に設定すればメッシュを生成出来ますが、, SetUVsとSetTrianglesは別の引数も指定する必要がある為、配列化してデータを入れるようにしています。, スクリプトが出来たので、そのスクリプトを取り付ける空のゲームオブジェクトを作成します。, 空のゲームオブジェクトを作成したら名前をSwordTrailとし、Transformの歯車からResetを選び位置をデフォルト値にします。, お絵かきソフト等で256×256ピクセルか512×512ピクセルサイズの画像を作成し、灰色から白色のグラデーションの画像を作成します。, ↑のように右側が剣の色に近い色、左側が色落ちした白色にします(剣の色によって色を変えてください)。, 画像を作成したらUnityのAssetsフォルダで右クリック→Import New Assetを選択し、画像を取り込みます。, 取り込んだ画像を選択し、インスペクタでWrap ModeをClampにして、画像が繰り返されないようにします。, Assetsフォルダで右クリック→Create→Materialを選択し、名前をCreateSwordTrailにします。, 先ほど作成したSwordTrailゲームオブジェクトのマテリアルにCreateSwordTrailを設定します。, SwordTrailはEthan(キャラクター)の子要素ではなく同じレベルの階層に位置しています。, さらにメッシュの表面をカメラの方向にしている為、カメラ側から見ると軌跡が表示されていますが、カメラの反対側から見ると、, 頂点を反時計回りに同じように登録し、三角形を反対側にも作れば裏側からも見えますが面倒くさいので、軌跡の透明化と裏側から見えるようにする処理をシェーダ―を変える事で実現しましょう。, 剣の軌跡を表示する事は出来ましたが、過去フレームの剣元と剣先の位置をそのまま繋いでいる為、軌跡がカクカクしています。, 現在の状態でも十分だとは思うんですが、曲線を作る方法を調べてしまった為、ここからが大変でした・・・(/_;)しくしく, ある点Aからある点Bの間の曲線を作るには、A点での速度、B点での速度が必要だったり、A点の前の点、B点の次の点が必要だったりします。, 今回はCatmull-Romスプライン曲線というA点の前の点、A点、B点、B点の先の点を使ってA点B点間の曲線を求めていきます。, Catmull-Romスプライン曲線を使うとp1とp2間の曲線をp1、p2、p1の前の点p0、p2の次の点p3の4点を使って曲線を作る事が出来ます。, ただこの場合、p1の前の点p0とp2の次の点p3が得られない時は曲線を求める事が出来ません。, わたくしの場合はp2の先のp3が得られない場合はp0、p2を足して2で割って計算する事にしました。, p0、p1、p2、p3の点を使ってCutmull-Romスプライン曲線を使ってp1とp2間の曲線が作られる様子を確認出来るサンプルを作成します。, シーンビュー上でそれぞれの点を動かして出来る曲線を確認したり、p0やp3に点がない場合の曲線の作られ方を確認出来ますが、個人的に確認するように作ったサンプルなのであえて作らなくてもいいです。(^_^;), まずはシーンビュー上で右クリック→Create→Sphereを選択し名前をposition0とし、TransformのScaleを0.3にします。, position0をCtrl+Dキーでコピーし名前をposition1~position3とします。, この4つのpositionがCatmull-Romスプライン曲線の計算に使う4点になります。, 次に右クリック→Create→Emptyを選択し、名前をCatmullSplineTestとします。, CatmullSplineTestには新しくCatmullSplineTestスクリプトを作成し取り付けます。, インスペクタのposition0からposition3には先ほど作成したゲームオブジェクトをそれぞれ設定します。, Catmull_Romメソッドは4点からtに受け取った0~1の割合でp1からp2の間の点を返します。, 例えばp0の点がない場合はp1とp3の点を足して2で割ったベクトルをp0の引数に渡します。, 2で割らずに0.5を掛けた方が計算処理が早くなるかもしれませんが、見た時にわかりやすくしておきました。, Unityを実行してシーンビュー上でposition0からposition3の点をそれぞれ動かすとposition1とposition2の間で作られる曲線が変わるのを確認出来ます。, CutmullSplinTestスクリプトのインスペクタでposition0かposition3の設定をnullにすると曲線の作られ方が少し変わります。, 一つは一度作った頂点情報はそのままにして、現在の剣の位置と前のフレームの位置で曲線を作り頂点リストに追加していくパターン。, こちらはCreateMeshメソッドでは現在の剣の位置と前のフレームの位置だけで計算する為(要はp3の点が求められない)、軌跡の形は変わりませんが曲線があまり綺麗にはなりません。, こちらは現在の剣の位置と前のフレームの剣の位置から作る曲線部分は先ほどのパターンと同じですが、その前のフレームの曲線は4点が求まるので綺麗な曲線になります。, CreateMeshメソッドで毎回曲線を作り直すので、前回作成した剣の位置と前のフレームの位置の曲線を再計算し、綺麗な曲線になります。, それでは現フレームの剣の位置と前フレームの剣の位置で曲線を作っていくスクリプトを作成します。, 先ほどのスクリプトでは頂点を共有しない形で作成していましたが、ここからは共有する形でスクリプトを組んでいきます。, faceDivisionNumは曲線を作る時の分割する数で、isSwordTrailは剣の軌跡を表示するかどうかのフラグです。, 作成したメッシュを再計算しない為にCreateMeshメソッドではverticesListsのクリアを行いません。, その為、表示するメッシュに不用になった頂点をverticesListsから削除します。, で頂点の数が計算出来ますのでそれ以上になった時にDeleteMeshメソッドを呼び出し頂点を削除します。, startHalfは剣元の間の分割点、endHalfは剣先の間の分割点を入れる配列です。, addFloatParamが分割値になり、これをCatmull_Romのtの部分に渡します。, 今回は初期値として分割値を与えてstartHalfとendHalfには分割した点のみ入るようにしています。, 現在の位置の先の点は取得出来ないので、前の前の点と現在の点を足して2で割った値をp3の値として渡します。, UV座標は頂点を共有する形にしたので、頂点番号が偶数かどうかでUV値を変えています。, 偶数の時は剣元の座標を計算するのでVの値は0、奇数の時は剣先の座標を計算するのでVの値は1になります。, また剣先の値を設定したら次は剣元の値なのでaddParamの値を増やして分割値を増やします。, 繰り返し条件は頂点を共有している為、一つの四角形では共有している2点を引いて、さらに一回の繰り返しで三角形を2つ作っている為、2で割っています。, isSwordTrailは剣の軌跡を表示するかどうかのフラグなので、表示する場合だけデータを書き換えています。, DeleteMeshメソッドは分割数 × 2分の頂点とUVを削除します(UVはいらないかも?)。, SetSwordTrailメソッドはアニメーションイベントを別のスクリプトで受け取り、そこから実行するメソッドで、剣の軌跡を表示するかどうかを切り替えます。, またキャラクターにReceiveActionEventスクリプトを作り取り付けます。, インスペクタでSwordTrailゲームオブジェクトをドラッグ&ドロップしてください。, SaveMeshNumを5、FaceDivisionNumを10にして確認します。, モーションが速くてわかり辛いですが、現在の位置と前のフレームの位置を繋いだ線が曲線にはなっていますが、多少歪んでいますね。, わたくしも解説がしんどいです・・・・(((((((((((((ーー;) さささっ・・・, 途中コマ送りして確認している部分でわかりますが、一度描いた軌跡を再計算する為、次のフレームになると元の形を変えています。, ですが、攻撃のモーションが相当遅くなければ気にならないですし、軌跡の曲線が綺麗なのを考慮するとこちらのパターンの方がいいかもしれませんね。, 頭で考えるだけじゃわからないので、紙に絵を書いて頂点の数や、UVの座標、三角形の作成方法を考えました。, それでも完全に出来た!という感じではなく、スクリプトも解り辛いままになっています。, 処理速度を考慮するともう少し最適化しないといけないかなぁとは思いますが、さすがにもうこの機能はやりたくありません。(^_^;), いずれまたやる気が起きた時にでも改良したいですが、その時にまた一からスクリプトを読み解いていかないといけないと思うと恐怖ですね・・・(T_T)/~~~, メールはこちらにお願いします(記事に関する質問は送らないでください)。

Sharepoint Faq Ľ成方法, Â B Ãスター, Áす Âチャップ Ãーズ Ãンジ, Ƹ谷 ƴ食 ű酒屋, Ãースフェイス Ãウンテンダウンジャケット Âールドウィン, Lisa Ǵ蓮華 ţ上枚数, Ǧ井 Âニ Ãアー, Ų山 Ť阪 Ɩ幹線 Goto Ɨ帰り, Âクスプローラ Ãットワーク ɝ表示 Âループポリシー, Youtube Ãンバーシップ Ɯ末, Âイコスケース Ãザー ȇ作,

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.