私は2つの同一のオブジェクトと2つのカメラを持っています。私は何を達成したいことは以下の通りです:他のオブジェクトに対するオブジェクトの位置と回転のキャプチャ
1)カメラでB(これはIように、キューブBにそのカメラA
2)転送に対するキューブの位置と回転をキャプチャキューブAがカメラに見えるよう、キューブBが正確に見える)に移動することはできません
私は次のコードで位置していることをやって成功しました:
positionDifference = CubeA.InverseTransformPoint(CameraA.transform.position);
は、キューブBにそれを転送するには、私が実行します。
cubeBpos = transform.InverseTransformPoint(CubeB.transform.localPosition);
while (Mathf.Abs (cubeBpos.x + positionDifference.x) > 0.01f) {
if (cubeBpos.x + positionDifference.x > 0) {
CubeB.transform.position += new Vector3(-0.01f, 0, 0);
}
else if (cubeBpos.x + positionDifference.x < 0) {
CubeB.transform.position += new Vector3(+0.01f, 0, 0);
}
cubeBpos = transform.InverseTransformPoint(CubeB.transform.position);
}
これは厄介ですが、機能します。しかし、回転を移そうとすると、キューブBは原点を中心に回転を開始します。面白いことに、キューブAを世界座標で移動すると、キューブBはローカルで移動し、逆も同様です。私は地元から世界への座標変換が問題だと思っていますが、私の回転コードはナイーブだとも思います。私が最初にこのように、二つの方法で回転をキャプチャしてみました:
rotationDifference = Quaternion.Inverse(CubeA.transform.rotation) * CameraA.transform.rotation;
CubeB.transform.rotation = Quaternion.Inverse(rotationDifference);
第二の試み:
rotationDifference = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z);
CubeB.transform.eulerAngles = rotationDifference;
両方のアプローチは、奇妙な回転オフセットの結果を。私はlocalPositionとlocalEulerAnglesを使ってみましたが、助けにはなりませんでした。
私はこれを行うには、よりスマートな方法があります願っています:)
EDIT: ここでDropboxのlinkのプロジェクトへ
ありがとうございますニコ!私はUnityにそれを適応させる方法がわからなかったが、私はこれで終わった、それは私が何を望むかを行います。 \t \t 'するVector3翻訳=新しいのVector3(0,0,0);' \t \t '翻訳+ = cubeA.transform.position; ' \t \t'翻訳 - = cameraA.transform.position; ' \t \t'翻訳= cameraA.transform.InverseTransformPoint(翻訳); ' \t \t'翻訳= cameraB.transform.TransformPoint(翻訳/ 2); \t \t 'cubeB.transform.position = translation;' \t \t 'クォータニオン回転= Quaternion.identity;' \t \t '回転= Quaternion.Inverse(cameraA.transform.rotation);' \t \t 'cubeB.transform.rotation =回転;' –