[WP]no.011 [unity] Flip操作を作ってみる

ついでに投稿しておこうシリーズ
製作時間:NaN

Robocraftで機体がひっくり返った時に、Fキー押して機体を水平に戻すアレみたいな感じ。

操作として、
1.機体を上にあげる
2.機体を回転させる

横転した機体。キーを押すと持ちあがる。

回転

水平状態まで回転する。




//using省略

public class YourClassNameHere : MonoBehaviour {

private Rigidbody rbody;
private int timeflip=0;
private Quaternion prevQuate;
private Quaternion toQuate;
private Vector3 prevVect;

private const int TimeFlipInt = 350;
private const int TimeFlipRotate = 220;

void Start () {
rbody = GetComponent<Rigidbody>();
}
void Update () {
if (timeflip > 0) ApplyFlip();
}
// 何かボタンを押したらこの関数を呼び出すようにする
public void Flip()
{
if (timeflip > 0) return;
timeflip = TimeFlipInt;

prevQuate = rbody.rotation;
toQuate = Quaternion.Euler((prevQuate.eulerAngles.y) * Vector3.up);
prevVect = rbody.position;

rbody.velocity = Vector3.zero;
rbody.angularVelocity = Vector3.zero;
rbody.isKinematic = true;
}
private void ApplyFlip()
{
if (timeflip < TimeFlipRotate)
rbody.rotation = Quaternion.Lerp(prevQuate,
toQuate, (float)(TimeFlipRotate - timeflip) / TimeFlipRotate);

rbody.position = Vector3.Lerp(prevVect, prevVect + Vector3.up * 3f,
(float)(TimeFlipInt - timeflip) / (TimeFlipInt - TimeFlipRotate));
if (timeflip-- < 2)
rbody.isKinematic = false;
}
}

※抜粋なのでコンパイル未確認
コメント入れる気はありません。

Flip()が呼び出されると、Flipし始めます。
Flip中の動作はApplyFlip()に記述されます。Update()から呼び出してます。
timeflipはFlip動作のフレーム時間。


回転後のQuaternionはFlip()にて計算されます。
toQuate = Quaternion.Euler((prevQuate.eulerAngles.y) * Vector3.up);
要は、y軸回転だけ残すようにします。xyzで記述した方が高速だったかな?


Quaternion、Vector3に実装されているLerp関数とは、線形補間する関数です。
Lerp(from,to,t)で書き、t=0fの時fromが、t=1fの時toが返ります。t=0.5fならば中間点。
この関数のおかげで、下手な座標変換をせずに済むわけです。

Quaternion.Lerp(pQ,tQ, (float)(TFR- timeflip) / TFR); // ApplyFlip()から+4行目
timeflipはTFRから0へ変化する変数と考えることにすると、TFRで割っているので、
「(float)(TFR- timeflip) / TFR 」は0から1へ変化する数になります。
よってLeapは、pQからtQへ変化するQuaternionを返します。

記事書いてる途中に気付いたのですが、この記述はもっと簡単に書けそうですね。
Quaternion.Lerp(tQ,pQ, (float)( timeflip ) / TFR);


修正:2015/08/08 間違ってました。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : Unity

コメントの投稿

非公開コメント

プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++RubyJavaUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
1467位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
265位
アクセスランキングを見る>>