2017-12-06 6 views
0

세계 공간에서 게임 오브젝트 스케일 :유니티 :이 달성하기 위해 노력하고

enter image description here

이 Z 축과 함께 믹서기에 세계 공간 조정되는 비 축 정렬 큐브입니다 (Y에서 단일성). 나는 Unity에서 같은 것을 얻고 싶습니다. 나는 이것에 대한 수식을 찾으려고했지만 행운이 없었습니다. 다른 객체에 부모 객체를 추가하고 부모를 확장 할 수 있다는 것을 알았지 만, 원래의 GameObject를 사용하지 않으면 원래의 GameObject를 확장해야합니다. 모든 조언을 많이 주시면 감사하겠습니다.

답변

0

부모가 될 수 있고, 크기를 조정 한 다음 다시 부모 개체로 만들 수 있습니다. 또는 두 개체를 각각 보유 할 수있는 게임 개체를 만들 수 있습니다.

void Rescale(Transform obj, Vector3 newScale) 
{ 
    if(obj.root != obj) 
    { 
     Transform parent = obj.parent; 
     obj.SetParent(null); 
     obj.localScale = newScale; 
     obj.SetParent(parent, true); 
    } 
} 
당신은이 기능을 사용하여 지역 공간 월드 공간에서 규모 (Vector3)를 변환 할 수 있습니다
+0

달성하려는 작업은 설명 된 방법 중 하나를 사용하여 수행 할 수 없습니다. 당신은 LOCAL 공간에서의 스케일링만을 기술했다. WOLD 공간에서 스케일링이 필요하다. 당신의 행동은 결코 큐브를 왜곡하지 않을 것이며, 그것은 항상 90 도의 모서리를 가진 인물로 남아있을 것입니다. – cubrman

+0

죄송합니다. 귀하의 게시물이 잘못되었습니다. Unity에서 객체를 비뚤어지게하는 유일한 방법은 빈 게임 객체 안에 배치하고, 부모를 스케일 한 다음 자식 객체를 회전시키는 것입니다. – Fiffe

0

:

transform.parent.InverseTransformVector(worldScale) 

이 큐브이 같은 일을 할 수있는 올바른 규모에 적용을 :

cube.transform.localScale = cube.transform.parent.InverseTransformVector(worldScale); 
+0

이것은 작동하지 않을 것이며, 로컬 스케일 x, y, z 숫자의 조합은 제가 언급 한 결과를 제공하지 않을 것입니다. 내 겸손한 연구를 통해 Unity는 내부적으로 매트릭스 대신 스케일, 회전 및 위치를 사용하기 때문에 내가하려는 일은 달성 할 수 없다고 믿게되었습니다. – cubrman

+0

내가 아는 한, 화합은 행렬을 사용합니다. Quaternion 클래스는 행렬 작업을 수행하는 데 도움이됩니다. 어쨌든 위의 문제에 대해 제안한 함수를 사용하려면 올바른 회전을 가진 외부 개체를 사용해야하고이 개체에서 InverTransformVector를 호출하여 필요한 축척을 얻은 다음 gameObject에 적용해야합니다. 그러나 Quaternion을 사용하는 것이 더 나은 옵션이라고 생각합니다. – BenBenMushi

+0

당신이 내 질문을 이해하는지 모르겠지만, 나는 변형 매트릭스 (스큐 매트릭스)를 설정하려고합니다. Unity가 내부적으로 이것을 허용하지 않기 때문에 내가 배운 것에서는 불가능합니다. – cubrman

관련 문제