このスクリプトは、ハンドルの操作(拡大縮小/回転/移動)を、ターゲットのTransformに反映するスクリプトです。
ターゲットにモデルのボーンを設定することで、モーションに変化を付けることが出来ます。
Unity の GameObject に Add Copmonet して使用します。
「ユーザーが操作するGameObject」をハンドル、「ハンドルの影響を受けて動くGameObject」をターゲットと呼びます。
「ハンドルを操作」→「ターゲットが動く」という関係です。
本スクリプトのメインコンポーネントです。
必須。
| パラメータ名 | 設定する内容 |
|---|---|
| Size | 設定するターゲットの数 |
| Element - TR | ターゲットのTransformを指定 |
| Element - Scale Weight | 拡大/縮小の重み(ウェイト) |
| Element - Rotaion Weight | 回転の重み(ウェイト) |
| Element - Position Weight | 移動の重み(ウェイト) |
各ウェイトは 0~1 で指定します。
0 は無効、1 はハンドルの動きがそのまま適用されます。
ハンドルに加えたTransformの変化を、ターゲットに反映します。
| 反映する動き | コンポーネント名 |
|---|---|
| 拡大/縮小(scale) | ScaleEffect |
| 回転(Rotation) | RotationEffect |
| 移動(Position) | PositionEffect |
| プロパティ名 | 反映する動き |
|---|---|
| Keep Length | 辺の合計の長さを保つ |
ScaleEffectのみ設定可能です。
ハンドルの変形をターゲットに反映する際、ターゲットの辺の合計の長さを保つ様に努力します。
ハンドルが初期位置に戻る動きを付けます。
ハンドルに戻ることで(Effectコンポーネントの効果で)ターゲットにも戻る動きが付きます。
| プロパティ名 | 反映する動き |
|---|---|
| weight | 反動の重さ |
| Friction | 揺り戻し |
Friction(揺り戻し)は ScaleRecoil と PositionRecoil のみ設定可能です。
weight と Friction、どちらかまたは両方が 0 の場合、無効になります。
RotationRffectを利用して、キャラクターを指定のターゲットに向けることが出来ます。
| パラメータ名 | 設定する内容 | 設定範囲値 |
|---|---|---|
| Target | 向ける対象オブジェクト(Transform) | オブジェクトを向けるTransform |
| Move Speed | Rotationの変化量への係数 | 0~1 |
| Weight Max | 向きへの重み(最大) | 0~1 |
| Weight Min | 向きへの重み(最小) | 0~1 |
| X Angle Limit | X軸の方向の最大回転角 | 0~180 |
| Y Angle Limit | Y軸の方向の最大回転角 | 0~180 |
| Z Angle Limit | Z軸の方向の最大回転角 | 0~180 |
| Is Rot Delay | Targetが移動時に回転量をリセット | true of false |
Move Speed は 対象オブジェクトへに向くための変化量に対する係数です。 Tragetの移動速度が速い場合(オブジェクトを向ける変化量が)は大きい場合、回転速度は早くなります。
Weight Max は Targetへの向きの回転量を、最大どの程度Add Componentしたオブジェクトに伝えるかの重み、 Weight Min は 向きが変わった際の、重みの初期値です。
X Angle Limit はX軸の回転の最大値となり、オイラー角で180度までをしています。 360度方向への回転も、同じだけの角度で制限されます。 0 が指定された場合は、角度制限されません。
Y Angle Limit はY軸の回転をと Z Angle Limit もZ軸の回転を同様に制限します。
Is Rot Delay はTargetが移動した場合(Add Componentしたオブジェクトの向きが変わる際)に、 ターゲットに向く移動速度を Weight Min でリセットすることためのフラグです。 Trueに設定することで、向きを変える際に僅かな遅延を発生させることが出来ます。
モーション中の馬のモデルに干渉してみます。
モデルはUnityのAssetStoreの『Animated Horse』というアセットをお借りしました。
Animated Horse: https://www.assetstore.unity3d.com/jp/#!/content/16687
ハンドルとなるGameObjectを、Hierarchyの「Horse」ツリーの配下に置きます。
ここではモデルの横に配置しておきますが、Scene上のどこでも構いません。
ハンドルにコンポーネントをAddします。
Size に ターゲットの数を決めて、TRにターゲットのTransformを、各Weight にハンドルの動きを伝える重みを設定します。
設定が出来たら、実行(play)して、ハンドルを動かす(拡大縮小/回転/移動)ことで、ターゲットを操作することが出来ます。
例えば、拡大縮小を行わない場合は「ScaleEffect と ScaleRecoil のコンポーネントは不要」、回転を自動で戻さない場合は「RotationRecoilコンポーネントは不要」です。
各コンポーネントのEnable/Disableで、実行中に有効/無効を切り替えることが出来ます。
Unity 2017.3.0f3 (64bit) にて動作確認をしています。
