ホーム » 2020 » 1月 » 24

日別アーカイブ: 2020年1月24日

Archery Motion Packドキュメント和訳

Archery Motion Pack
Unityアセット。矢のような発射物撃つための基礎パック。
Motion Controller v2 と連動してるので、ついでに購入しました。

Motion Controller v2 を併せて購入しないと使用できないので注意。
Motion Controller同様に、ドキュメントが英語の為、日本語和訳したものをメモ。覚書。


モーションパック/Motion Packs
モーションコントローラーのUIがわずかに変更され、「Packs」のボタンが追加されました。
「Packs」ボタンを押すと、プロジェクトにインポートされたモーションパックがリストされます。パックを選択すると、パックに関する詳細情報が提供されます。
この場合、「Archery」パックを選択すると、Archery Packの詳細がリストされます。
各パックには異なるオプションが表示される場合があります。アーチェリーパックの場合、各オプションについて説明します。下部の「Setup Pack」ボタンをクリックすると、チェックされたオプションが実行されます。

Animator Layer
装備、保管、および攻撃の動きをどのレイヤーに適用するかを決定します。  これにより、歩行中に装備と射撃が可能になります。

Create Mecanim
このオプションは、パックのモーションで使用されるMecanimサブステートマシンを作成/再作成するために使用されます。
これがまさに通常のモーションで行うことです。
ここでショートカットを作成します。

Create Motions
これは実際に弓の動きを作成するオブジェクトです。 Movement Styleオプションに基づいて、特定のモーションが有効化および無効化されます。

Create Input Aliases
オンにすると、モーションで使用されるすべての必要な入力エイリアスがUnityの入力マネージャーで作成されます。これは、プロジェクト全体で行う必要があるだけです。

Create Inventory
在庫ソリューションがない場合、このオプションは「基本在庫」コンポーネントを作成し、キャラクターに追加します。

Create Attributes
属性ソリューションがない場合は、このオプションは、「基本属性」コンポーネントを作成し、キャラクターに追加します。

Create Core
キャラクターにアクターコアがない場合、自動的に作成されます。

通常、「セットアップパック」を押す前に、これらのオプションをすべてチェックしたままにします。
ただし、キャラクターをカスタマイズして他のアセットを含めると、基本的なインベントリソリューションが不要になる場合があります。

Inputs
ほとんどの場合、キャラクターの移動と制御にはUnityの標準入力を使用します。 ただし、武器の照準や鞘のようなものをサポートするために、いくつかの新しい入力エントリが追加されています。

これらすべての追加エントリには、「キーボード」エントリとXboxコントローラーエントリがあります。

モーションコントローラーと入力ソースの標準に従って、特別なキー(Bow-Unsheatheなど)が必要な各モーションでは、入力エントリを変更できます。
これらをアクションエイリアスと呼び、モーションをトリガーします。
 たとえば、Bow – Unsheatheは上記の「Sheathe Bow」エントリを使用します。

このアプローチを使用すると、「アクションエイリアス」を設定するか、エイリアスが表すキーまたはボタンを変更することで、モーションが使用する入力エントリを変更できます。

キーまたはボタンの変更方法は、使用している入力ソリューションによって異なります。
  標準のUnity Input Managerの場合、「編集| プロジェクト設定… | Unityのメニュー項目を入力します。

アクターコア/Actor Core
前述したように、アクターコアはすべてのキャラクターに存在し、キャラクターの意思決定とロジックの一部を表します。
アクターコアを持つキャラクターに矢が当たると、ダメージを受けて適切に反応するのはアクターコアです。

オブジェクトが破損または破壊されないオブジェクトである場合、Actor Coreは必要ないことに注意してください。

アクターコアは非常に基本的なものです。次のプロパティがあります。

Attribute Source(属性ソース)
アクターの属性を含むコンポーネント。

Health ID(ヘルスID) ヘルス値を保持する属性のIDである文字列。

Is Alive オブジェクトがまだアクティブかどうかを決定する単純なブール値。

Damaged Motion
ダメージが矢から取られたときにアクティブにするモーションの名前。

Death Motion
アクターが死ぬほどのダメージを受けたときにアクティブにするモーションの名前。

Code Summary
内部的に、Actor Coreにはいくつかの重要な機能があります。

OnDamaged()
この関数は、ActorCoreを持つオブジェクトに影響を与えるときにArrowCoreによって呼び出されます。
これは、矢がヒットしたキャラクターとダメージの程度をキャラクターに伝える方法です。
この関数では、ActorCoreは属性ソースに体力の程度を尋ねます。
ダメージがこのヘルスを超えると、キャラクターは死にます。

OnDeath()
この関数は、ダメージがキャラクターの体力を超えた場合にOnDamaged関数によって呼び出されます。

死のアニメーションが終了すると、モーションコントローラーは無効になります。

IActorCore Interface
独自の「actor heart beat」MonoBehaviourがある場合、 IActorCoreインターフェイスをクラスに追加し、これを無視するだけです。繰り返しますが、目標はモジュール式で交換可能にすることです。
基本属性/Basic Attributes

Actor Core内に単にヘルス属性を保存することもできましたが、属性を管理している可能性のあるRPGアセットをサポートするのに十分なモジュール性を確保したかったのです。

あなたが以前から思い出すなら、私は属性ソースについて話しました。ソースは、使用されているソリューションに関係なく属性を取得するために使用できる単なるブリッジです。この「基本属性」コンポーネントは、RPG属性アセットの非常に基本的なバージョンです。すべての属性ソースと同様に、IAttributeSourceインターフェイスを実装します。

この方法で属性を実装することにより、ゲームに新しい属性を追加できます。
Archeryアドオンでは、1つの属性のみが重要です。

HEALTH キャラクターが実際に持っている現在の健康。覚えている
これは、上記のアクターコアで使用したIDです。

コードの要約
属性ソースとして、次の機能を使用できます。

GetAttributeValue()この関数は、指定された名前の属性の値を返します。

SetAttributeValue()この関数は、名前を指定して属性の値を設定します。

イメージできるように、これらの2つの関数は、キャラクターの現在の健康状態を取得して保存するために、Actor Coreによって使用されます。
アクターコアは、「健康」属性に基づいて、キャラクターが単に損傷したか殺されたかを判断します。

基本インベントリ/Basic Inventory
使用する在庫ソリューションにはIInventorySourceインターフェースを実装する必要があります。これにより、情報を取得する方法がわかります。

私の「基本インベントリ」ソリューションは非常に基本的なものですが、インベントリソースです。
私の実装には3つのリストが含まれています。
アイテム、スロット、武器セット。

アイテムリストには、キャラクターがインベントリに持っているすべてのアイテムとそれらのいくつかのプロパティが含まれています。

スロットリストは、アイテムの使用状況を表します。
したがって、「LEFT_HAND」スロットは、左側に装備されているものを定義します。
「READY_PROJECTILE」スロットは、使用可能な矢を決定します。
左の例では、キャラクターには弓(「Longbow_01」)と矢のセット(「Arrow_01」)があります。
現在、彼は左手に何も持っていませんが、彼の矢筒は矢のセットを持っています。

武器セットを使用すると、アイテムをグループ化して、装備と保管を同時に行うことができます。
たとえば、「武器セット2」にはLongbow_01とArrow_01が含まれます。別の武器が私の剣と盾になると想像できます。

アイテム/Items
各アイテムには次のプロパティがあります。
ID アイテムを一意に識別する単純な文字列。
Equip Motion アイテムの装備に使用されるモーションの名前
Store Motion アイテムを保存するために使用されるモーションの名前
Instanceアイテムである編集時に作成されたインスタンス
Resource Pathこれは、アイテムを表すプレハブを見つけることができるUnityリソースフォルダーのパスです。
この値を使用して、時間が来たら弓と矢を作成します。
スロット/Slots

各スロットには次のプロパティがあります。
ID –スロットを一意に識別する単純な文字列。
アイテムID 現在スロットにあるアイテムのID。空の値は、スロットが空であることを意味します。

アイテムの変更
武器セット(武器セット2など)を装備すると、武器セットのアイテムが装備されます。 これらの武器セットアイテムは、どのアイテムがどのスロットに入るかを定義します。 したがって、スロットのアイテムが更新されます。

そのため、デフォルトでは「READY_PROJECTILE」スロットには「Arrow_01」アイテムが表示されます。 「Arrow_01」アイテムは、アイテムの「リソースパス」プロパティを使用してスポーンする矢印を定義するプレハブの場所を示します。

新しい種類の矢印を作成するとしましょう… [アイテム]セクションに新しいアイテムとして追加し、「Arrow_02」などのIDを付けて、リソースパスを新しいプレハブに設定します。 次に、スロットにアイテムを設定する武器セットアイテム(「READY_PROJECTILE」)で、エントリの「アイテムID」の値を「Arrow_01」から「Arrow_02」に変更します。

矢を別の方法で変更する場合は、[スロット]セクションでアイテムIDを直接変更できます。

コードの要約
インベントリソースとして、次の機能を使用できます。

GetResourcePath()指定されたアイテムのリソースパスを取得します。
EquipItem()指定されたスロットに指定されたアイテムを装備します。
GetEquippedItemID()指定されたスロット内のアイテムのアイテムIDを取得します。
ClearSlot()指定されたスロットからアイテムを削除します。 これらの関数は、弓と矢を作成し、弓を装備/装備解除するためにアーチェリーの動きで使用されます。 繰り返しますが、必要なインベントリソリューションを使用できます。しかしながら、 そのソリューションは、IInventorySourceインターフェイスを実装する必要があります。
レチクル/Reticle
シーンにレチクルを追加するのは、付属のCrosshair Fill Circleスクリプトを使用するだけです。

BGテクスチャは、レチクルの背景画像です。
カスタマイズするには、画像を置き換えるだけです。

塗りつぶしテクスチャは、弓に動力が供給されているときにBGテクスチャをオーバーレイするものです。 このテクスチャも置き換えてください。

弓の動きにより、レチクルが自動的に有効化、無効化、および更新されます。


パックには、ゲームで使用できる弓が含まれています。弓のプロパティをカスタマイズすることも、ガイドラインに従って独自の弓を作成することもできます。

弓は、モデル、コア、プレハブの3つの部分で構成されています。

弓モデル
このモデルは、実際にはボーン付きのスキンメッシュです。このようにして、引き戻すときに弓を曲げることができます。この弓は、Mayaで作成、リギング、およびスキン作成されました。

IKを使用してジョイントを曲げるので、弓をアニメートする必要はありません。

スケルトンのルートは、矢が置かれる場所です。

画像は、Mayaの弓とボーンの配置方法を示しています。
特定の数のボーンは必要ありません…しかし、追加するほど曲線は滑らかになります。

弦の中心にもボーンがあります。それが「nock」であり、矢を固定する場所です。
したがって、nockを戻すと、弦と矢も戻ります。

骨の名前
使用する必要がある4つの重要な名前があります。
「root」はスケルトンを開始するボーンです。
「nock」は、弦の中央の骨です。
「upper1」は、曲げる弓の上部にある最初のボーンです。
「lower1」(図示せず)は、曲げる弓の一番下の最初のボーンです。
Bow Coreは、トランスフォーム階層でこれらのトランスフォーム名を探します。

ボウコア/Bow Core
弓の芯は弓の鼓動です。弓の曲がり方、力などを制御します。
キャラクターの左手のボーンがどのように作成されるかわからないため、補正するために「Local Position(ローカル位置)」と「Local Rotation(ローカル回転)」の値を含めます。

これには試行錯誤が必要ですが、左手の骨に対する弓の位置と回転をオフセットできます。

MountPointsを使用している場合、これらについて心配する必要はありません。

弓にはオーバードロー(またはパワーアップ)する能力があるため、ドローパワーとインパクトパワーは範囲です。

引き力は、弓がどれだけ遠くに飛ぶかを決定します。
この値は、飛行する前に矢印に加える力の大きさです。
したがって、オーバードローがない場合、上の画像は1600の値を使用します。100%オーバードローがある場合、2000の値を使用します。

これらの値は、矢印の剛体のAddForce()関数で使用されます。

Impact Powerは、矢印が剛体に衝突するときに使用する乗数です。

これにより、弓自体が矢印の力を超える力を追加できます。これは、矢印のヒット強度を上げるのに役立ちます。

弓プレハブ/Bow Prefab
最後の部分は、弓のプレハブ自体です。弓が装備されたら、プレハブをインスタンス化します。

プレハブを構築するとき、プレハブの原点がハンドルと一致し、前方を向くように、弓のスキンメッシュを配置します。これにより、キャラクターの手に入れるのが簡単になります。

ご想像のとおり、プレハブにはBow Coreと、プレハブに固有の変更した設定が保持されます。

複数のプレハブを作成することで、ロングボウ、ショートボウ、さらに遠くに発射するマジックロングボウなどを作成できます。

矢/Arrow
弓と同様に、矢をカスタマイズできます。
矢印も、モデル、コア、プレハブの3つの部分で構成されています。

矢モデル/Arrow Model 
矢印モデルは単なる静的メッシュです。方向と起源以外に特別なことは何もありません。

Unityでは、順方向を矢印の順方向にする必要があります。

起源については、私はそれを矢じりの先端に置くのではなく、もっと後ろに置きます。その理由は、ターゲットに矢印を埋め込むときに、矢印がターゲット内にあるように見せたいからです。

アローコア/Arrow Core
アクターコアおよびボウコアと同様に、アローコアはアローの鼓動です。衝突を検出し、衝突が発生したときに反応する方法です。
Embed Distanceは、ターゲットが衝突したときに矢をターゲットにプッシュする少し余分な量です。
ほとんどのキャラクターにはボディメッシュから離れたコライダーがあるため、これを行います。これにより、矢印が実際に頭または胸の中にあるように見えます。

Tail Distanceは、矢を元に戻すとき、弦からの距離を決定するために使用するものです。矢を引き戻すためのオフセットのようなものだと考えてください。

矢がターゲットに影響を与えると、Max Ageによって矢の有効期間(秒単位)が決まります。0に設定すると、矢はそれ自体を破壊しません。

Impact Powerは、ターゲットが剛体である場合にターゲットに適用される力の基本的な大きさです。

これが、Unityの物理学の下でターゲットを移動させる原因です。
最終的な力の大きさは、この値に弓の衝撃力を掛けたものになります。

Damageは、ダメージ範囲です。
Minは、弓の特性と同様に、オーバードローされていない場合の最小ダメージ。
Maxは、弓が100%オーバードローされている場合の最大ダメージ。

どちらの場合も、ターゲットにIActorCoreコンポーネントがある場合にのみダメージが適用されます。
Arrowプレハブ
矢印のプレハブには、剛体を含める必要があります。
リジッドボディは、実際に矢印を前進させるものです。
弓が発砲すると、リジッドボディのAddForce()メソッドを呼び出し、その方向に矢印を送信します。

独自のプレハブを構築するときは、Arrow Coreコンポーネントが無効になっていることを確認してください。
矢を放つときに有効にします。

コライダー
矢印プレハブにはコライダーがありません。

多くのテストを通じて、コライダーは矢印ではうまく機能しないことがわかりました。代わりに、矢印が飛ぶときに短いレイキャストを使用します。

このレイキャストは、ヒットしたものや角度などについて、より正確でタイムリーな情報を提供します。

Motions
前に、各モーションの簡単な説明をしました。ここで、モーションプロパティについて詳しく説明します。

ベーシックアイドル/Basic Idle
弓を手に持つシンプルなアイドルアニメーション。

Rotate With Input-マウス(右スティック)の移動に合わせてキャラクターが回転するかどうかを決定します。

Rotate With Camera-カメラの方向に合わせてキャラクターが回転するかどうかを決定します。

Rotation Speed -回転する1秒あたりの度数。

Use Pivot Animations-回転中にピボットアニメーションを使用するかどうかを決定します。回転は90度未満の増分で行われる可能性があるため、アニメーションが過剰になる可能性があります。必要に応じて使用できます。

基本アイテム装備/Basic Item Equip
装備する右弓を決定してから装備するUnsheatheアニメーション。

Action Alias-弓を装備する入力エントリ

Bow Resource Path-インベントリソースを使用しない場合は、弓プレハブへのリソースパスをインスタンス化します。

Inventory Source–弓のリソースパスを取得する在庫ソース。
空のままにした場合、在庫ソースがこのキャラクターにあるかどうかを確認します。

Equip Slot ID-弓を配置するインベントリソースのスロットID。

Bow Ready Slot ID –インベントリソースのスロットID。どの弓を装備する必要があるかを示します。 基本アイテムストア/Basic Item Store
弓を片付け、通常の(弓ではない)アイドル状態に戻ります。

Action Alias–弓を装備解除する入力エントリ

Inventory Source –弓を装備していないと言うために使用する在庫ソース。

Equip Slot ID–クリアするインベントリソースのスロットID。

Basic Walk Run Pivot
移動中、手に弓を持つ動き。
この移動スタイルは、より「アドベンチャー」スタイルであり、軌道カメラで使用する場合、キャラクターはカメラに向かって歩くことができます。

Default to Run–キャラクターがデフォルトで走行または歩行するかどうかを決定します(アクションエイリアスによって反転します)。

Run Action Alias-[Default to Run]オプションに基づいてキャラクターの走行(または歩行)をトリガーするために使用します

Walk Speed-0より大きい場合、ルートモーションをオーバーライドし、一定の速度(1秒あたりの単位)を作成します。

Run Speed-0より大きい場合、ルートモーションをオーバーライドし、一定の速度(1秒あたりの単位)を作成します。

Rotation Speed-回転する1秒あたりの度数。
Basic Walk Run Store
移動中、手に弓を持つ動き。
この動きのスタイルは、より「シューター」スタイルであり、常にキャラクターが前方を向いています。ストラフィングをサポートします。

Similar to the standard WalkRun …モーションと同様に、WalkRunPivotまたはWalkRunStrafeのみを有効にします。両方ではありません。

Default to Run–キャラクターがデフォルトで走行または歩行するかどうかを決定します(アクションエイリアスによって反転します)。

Run Action Alias-[Default to Run]オプションに基づいてキャラクターの走行(または歩行)をトリガーするために使用されます。

Walk Speed-0より大きい場合、ルートモーションをオーバーライドし、一定の速度(1秒あたりの単位)を作成します。

Run Speed -0より大きい場合、ルートモーションをオーバーライドし、一定の速度(1秒あたりの単位)を作成します。

Rotate With Input-マウス(右スティック)の移動に合わせてキャラクターが回転するかどうかを決定します。

Rotate With Camera-カメラの方向に合わせてキャラクターが回転するかどうかを決定します。

Rotation Speed-回転する1秒あたりの度数。

Stop Delay – Mecanimブレンドツリーを支援するために、停止する前に追加する小さな遅延。
Basic Ranged Attack
矢印を発射するために使用されるモーション。

Attack Action Alias –弓を撃つようにキャラクターをトリガーするために使用されます。

Rotate With Input-マウス(右スティック)の移動に合わせてキャラクターが回転するかどうかを決定します。

Rotate With Camera-カメラの方向に合わせてキャラクターが回転するかどうかを決定します。

Rotation Speed -回転する1秒あたりの度数。

Horizo​​ntal Angle –左腕のヨー(左/右回転)をオフセットするIK値。これは、弓を向けるのに役立ちます。

Vertical Angle-左腕のピッチ(上下の回転)をオフセットするIK値。これは、弓を向けるのに役立ちます。

Quick Horizontal Angle -クイックショットを行うときに左腕のヨー(左/右回転)をオフセットするIK値。
これは、弓を向けるのに役立ちます。

Quick Vertical Angle –クイックショットを行うときに左腕のピッチ(上下の回転)をオフセットするIK値。
これは、弓を向けるのに役立ちます。

Arrow Resource Path -インベントリソースを使用しない場合、インスタンス化する矢印プレハブへのリソースパス。

Inventory Source –弓のリソースパスを取得する在庫ソース。空のままにすると、在庫ソースがこのキャラクターにあるかどうかを確認します。

Arrow Ready Slot ID –どの矢印を装備する必要があるかを示すインベントリソースのスロットID。

Release From Camera –デフォルトでは、矢印は弓の現在の位置から発射します。 ただし、アニメーションによっては、矢印が小さな角度で発射される場合があります。
 矢印を完全に制御したい場合は、代わりにカメラから撮影してください。 これは、肩越しモードに特に役立ちます。

Release Time–アニメーション内で矢印をリリースするとき。

Default Draw Force-弓から値が設定されていない場合、矢印を発射するデフォルトの力。
Basic Damaged
アクターが矢印に当たったときに使用されるアニメーション。
Basic Death
アクターが矢印で殺されたときに使用されるアニメーション。

NPC
Archery Motion PackはNPCをサポートしています。
これを行うには、PCと同じようにNPCを設定します。
次に、さらにいくつかの変更を加えます。

最初に、変換を使用して動きを決定するようにアクタコントローラが設定されていることを確認します。
次に、入力ソースまたはカメラリグが自動的に設定または検出されないことを確認します。
最後に、NPCにはNPCSの他のコンポーネントとともに「戦闘員」コンポーネントを追加する必要があります。
Code
これらの変更により、NPCを制御する準備が整いました。
Node Canvas、Behavior Designer、またはその他のAIドライバーのいずれかを使用するか、コードを使用してNPCを制御できます。
アセットには、見て、使用するためのデモといくつかのNPCコードが含まれています。

デモ:Assets \ ootii \ _Demos \ MotionControllerPacks \ Archery \ Demos \ Scenes \ demo_NPC_Shooter

AIコード:Assets \ ootii \ _Demos \ MotionControllerPacks \ Archery \ Demos \ Scenes \ AMP_NPC_Controller

通常の移動ロジックに加えて、NPCが矢を発射できるようにする実際のコードは次のとおりです。

CombatMessage lMessage = CombatMessage.Allocate();
lMessage.ID = CombatMessage.MSG_COMBATANT_ATTACK;
lMessage.Attacker = gameObject;
lMessage.Defender = Target.gameObject;
mMotionController.SendMessage(lMessage);
CombatMessage.Release(lMessage);

NPCアーチャーが弓を装備している場合、この「攻撃」メッセージを送信すると、ディフェンダーに向かって発砲します。
防御側の代わりに射撃する方向を設定することもできます。 防御者の代わりに、メッセージに「HitDirection」vector3変数を設定するだけです。

管理人

ハンドルネーム:タケハタ
本名:波田野剛望(はたのたけみ)

お絵描きとゲームが好きなオス。
2020年の目標は、スチームでゲームをリリースすること。