スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --年--月--日 --:--:-- : スポンサー広告 ]

【Unity】 iTweenPathで等速移動する方法

iTweenネタ。

iTweenPathを使用して時間指定をしてパス移動させる時、
点と点の間の距離が長い区間ほどスピードが速く、短い区間は遅くなるという仕様なのだが、
これを等速で移動させたい場合の1つの方法を紹介。

ここを参考にした。

    // Start
void Start()
{
m_Path = iTweenPath.GetPath( "root" );

m_PathLength = iTween.PathLength( m_Path );

m_RealOnePercent = m_PathLength * 0.1f;
}
// Update
void Update()
{
movePath();
}

// move around path with constant speed
private void movePath()
{
m_PathOnePercent = Vector3.Distance(
iTween.PointOnPath( m_Path, m_NewPercentPosition ),
iTween.PointOnPath( m_Path, m_NewPercentPosition + 0.10f )
);

m_Distortion = m_RealOnePercent / m_PathOnePercent;

m_RealPercentToMove = (m_Speed * Time.deltaTime) / m_PathLength;

m_NewPercentPosition += (m_RealPercentToMove * m_Distortion);

iTween.PutOnPath(
gameObject,
m_Path,
m_NewPercentPosition
);
}

確かにこれで等速になっているっぽい。

まだあまり詳しく理解していないが、実際のパスの長さの1割とiTweenPathの進行上の長さの1割から
補正値を求めて、それを使って今どの位置にいるべきかを算出しているようだ。

が、PutOnPathによる0.0〜1.0までの値を操作での移動なので、管理が難しい。


HOTweenがconstant speedとあるので、こちらにはデフォルトでありそうだが。
また使ってみたら記事にしてみようと思う。

[ 2014年02月08日 18:27:51 : Unity ]

カレンダー

プルダウン 降順 昇順 年別

11月 | 2018年12月 | 01月
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -


全記事表示リンク

全ての記事を表示する

検索フォーム

リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。