Unity3Dは、ダイナミック、アニメーションコール(rpm)を作成するためのスクリプトを使用します

オリジナルリンク:https://blog.csdn.net/pigautumn/article/details/81781403

需要シナリオ:オブジェクトの不特定多数複数の底に位置合わせトップ、順番に左から右へ移動する場所に0.1秒の間隔を必要とし、その後、短い距離を返します。

分析:Unity3Dを使用したアニメーションシステムがこの機能を実装するのは非常に簡単ですが、オブジェクトの不確か数は、同じオブジェクトにそれバインドし検討し、オブジェクトが動的に作成されたアニメーションは、AnimationClip(アニメーションは、アクションの数AnimationClipが含まれていてもよいですしかし、我々は1つのアクションだけを)必要とし、各サブオブジェクトごとに異なるAnimationCurveを作成し、最後にアニメーションを呼び出して、あなたはそれぞれの目的を達成することができるモーション・アニメーションセットに応じて移動しました。

コード:

testAnimクラス
{
プライベートアニメーション_animation = NULL;

公衆ゲームオブジェクトTARGET = NULL; //観客
公衆ゲームオブジェクト[]商品= NULL; // 子の観客アレイは、オブジェクト
公共フロート[] POSY =ヌル; Y // ターゲット・オブジェクトの子オブジェクト座標

//アニメーションに使用される時間;公共フロートAnimDuration = 0.3F
公共フロートAnimBackTime = 0.1F; //アニメーション時間のリターン
公共フロートAnimInterval = 0.1Fと、隣接間//オブジェクトのアニメーション間隔
公共フロートInitXPos = -25; // X座標の初期位置
公共フロートMaxXPos = 90; // X座標が最大の位置である
公共フロートDestXPos = 60; // X目標位置の座標

を使用し、このため//初期化
スタート(無効)
{
(目標== == NULL ||アイテムIF || items.lengthヌル<= 0 || items.length = PosY.Length)!
{
返します;
}

= Target.AddComponent _animation <アニメーション>();

VAR =新しい新しいAnimationClipクリップ()
{
NAME = "テスト"、
レガシー= trueに、
WrapMode = WrapMode.Once
};

私はitems.lengthを<;(VAR I = 0 I ++ )
{
VAR =項目項目[I];
IF(項目== NULL)
{
続行;
}

VAR = relativePath item.name用;

//作成アニメーションX軸
VAR =新しい新しいAnimationCurve曲線();
curve.AddKey(新しい新しいキーフレーム(0 、InitXPos)); //初期状態
curve.AddKey(新しいキーフレーム(0 + AnimInterval * I、InitXPos)); // キーフレーム一時停止
curve.AddKey(新しいキーフレームを(0 + AnimInterval * iはAnimDuration、MaxXPosを))+。 //モーションキーフレーム
curve.AddKey(新しいキーフレーム(AnimInterval *私は + AnimDuration + AnimBackTime、DestXPos)); // キーフレーム返し
clip.SetCurve(relativePathザ・、typeof演算(RectTransform)を、 "m_AnchoredPosition.x"、曲線);

//作成アニメーションY軸
=新しい新しいAnimationCurve曲線();
curve.AddKey(新しい新しいキーフレーム(0、POSY [I]));
curve.AddKey(新しい新しいキーフレーム(AnimDuration AnimInterval * + I、POSY [I]));
clip.SetCurve(relativePathザ、typeof演算(RectTransform)、 "m_AnchoredPosition.y"曲線);

//アニメーションスケール作成
カーブ=新しい新しいAnimationCurve();
curve.AddKey(新しいキーフレーム(0、0)); //初期状態
curve.AddKey(新しいキーフレーム(0 + AnimInterval * iが、0)) ; // 状態休止
curve.AddKey(新しいキーフレーム(AnimInterval * iは //; AnimDurationを+ 1)) の動きを
clip.SetCurve(relativePath、typeof演算(RectTransform)、 "m_Scale.x"曲線)。
clip.SetCurve(relativePath、typeof演算(RectTransform)、 "m_Scale.y"曲線)。
}

_animation.AddClip(クリップ、clip.name)。
_animation.Play(clip.name)。
}
}
ポイント:

(1)各アニメーション(動画)は、複数のセグメント(AnimationClip)、一方のみを含んでいてもよいです。

(2)属性曲線オブジェクト(relativePathザ)について説明それぞれが曲線(AnimationCurve)を複数備え、各セグメントは、どのように動き(m_AnchoredPosition.xの例えばRectTransformは、X軸のアンカー位置の変化を示します)。

(3)キーフレーム(キーフレーム)を複数備え、各作用曲線(AnimationCurve)は、例えば、X軸との間で移動し、次いで、(0.3秒、位置90)に(0秒位置0)座標、動きの変化を示します(0.4秒、位置60)。

(4)重要な点は、プロパティRectTransform例の種類を説明する際に、参照、フォーム「m_AnchoredPosition.x」の使用を必要とすることを「AnimationClip.SetCurve RectTransform色パラメータが欠落!状況が現れる解決」です。
---------------------
著者:xhuboboの
出典:CSDN
オリジナルます。https://blog.csdn.net/pigautumn/article/details/81781403
免責事項:この記事ブロガーのオリジナルの記事、複製など、ボーエンのリンクを添付してください!

おすすめ

転載: www.cnblogs.com/fujianxiaopihai/p/10966235.html
おすすめ