두 개의 동일한 개체와 두 개의 카메라가 있습니다. 내가 달성하고 싶은 것은 다음다른 개체를 기준으로 한 개체의 위치 및 회전 캡처
1), 카메라
2 상대 큐브의 위치와 회전) 큐브 B에 그 이동을 캡처 (카메라의 B에 있도록하는 I 큐브 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를 사용하여 시도했지만 도움이되지 않았습니다.
나는이 :) 할 수있는 현명한 방법이 바라고 있어요
편집 : 여기 프로젝트
고맙습니다. 니코! 내가 유니티에 적응하는 방법을 잘하지 않았다,하지만이 함께 결국, 내가 원하는 것을 수행합니다 \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 = 회전,' –