[過去ログ] 【3Dゲームエンジン】Unity質問スレッド32 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
836: 2017/12/13(水)00:01 ID:/jokcbje(1/6) AAS
>>827
最初の回転状態が、
rotatiin =Quaternion.identityであれば、
1: rotation = Quaternion
2: rotation = rotation * Quaternion
3: rotation = Quaternion * rotation
1-3は全て同じ結果になります。
position = Vector3.zeroの場合、
1: position = Vector3
2: position = position + Vector3
1-2が同じ結果なのと一緒です。
837: 2017/12/13(水)00:07 ID:/jokcbje(2/6) AAS
rotationの場合も、positionの場合も、
1は、角変位や位置の絶対指定、
2-3は、角変位や位置の相対指定です。
rotatiin =Quaternion.identityでない場合、
position = Vector3.zeroでない場合、
1と、2-3で、結果が変わってきます。
しかも、rotationの場合、
2: rotation * Quaternionと
3: Quaternion * rotationでも、結果が変わってきます。
追加するQuaternionによる角変位の回転軸を、
transform軸を基準にした回転にする場合は2になり、
キャンバスのVector3軸を基準にした回転にする場合は3になります。
838: 2017/12/13(水)00:35 ID:/jokcbje(3/6) AAS
>>825-827
Invokeが呼び出しの際に1フレーム遅れるとわかっているのであれば、
1フレーム前の時間で呼び出させば大丈夫ですよ。
void Start () {
rb.angularVelocity = new Vector3(45, 30, 0) * Mathf.Deg2Rad;
Invoke ("Stop", 1 - Time.fixedDeltaTime); ←1フレーム前に呼び出し
}
void Stop () {
Debug.Log ("1秒後のrotation:" + rb.rotation.eulerAngles);
rb.angularVelocity = Vector3.zero;
}
「1秒後のrotation:Vector3(42.4, 37.4, 15.0)」が出ましたよ。
>>809の方法で求めた場合と一致する値です。
rb.angularVelocity = new Vector3(45, 30, 0) * Mathf.Deg2Rad
angle = (rb.angularVelocity).magnitude * Mathf.Rad2Deg
V = new Vector3(45, 30, 0)
angle = V.magnitudeでも同じ結果になります。
846(1): 2017/12/13(水)20:48 ID:/jokcbje(4/6) AAS
>>843
transform.lossyscale = Vector3.Scale(transform.parent.localscale, transform.localscale)
つまり
transform.lossyscale.x = transform.parent.localscale.x * transform.localscale.x
transform.lossyscale.y = transform.parent.localscale.y * transform.localscale.y
transform.lossyscale.z = transform.parent.localscale.z * transform.localscale.z
localscaleは、インスペクター上で設定するスケールで、
lossyScaleは、自分のlocalscaleと親のlocalscaleの各成分の積になってます。
本当のscaleは、回転が入ると、Vector3ではなくて、3×3行列になってしまいます。
lossyScaleの場合は、回転前のスケールで、Vector3で表せるからだと思います。
848: 2017/12/13(水)22:56 ID:/jokcbje(5/6) AAS
Unityでは、アフィン変換を行う4×4行列であるMatrix4x4が、
TRS(Vector3 position, Quaternion rotation, Vector3 lossy scale)
によって構成されていて、
スケーリング→回転→移動の順に適用するようにしています。
最初にスケーリングを行うことで、
3×3行列の対角成分しか使わず、Vector3で済みます。
RigidbodyのinertiaTensorも一緒で、
本来は3×3行列が必要な慣性モーメントテンソルを、
慣性主軸系に限定することで、対角成分しか使わず、
Vector3の主慣性モーメントで済むようにしています。
849(1): 2017/12/13(水)23:01 ID:/jokcbje(6/6) AAS
>>847
Unity自体はそれほど詳しくないですが、
物理演算系とか、3D数学が専門なので。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.034s