๊ฑด์ถ๋ฌผ์ ์ค์นํ ๋ ๊ฐ์ฅ ์ค์ํ๊ฑด ์ค๋ ์์ผ์ฃผ๋ ์์คํ ์ด๋ผ๊ณ ์๊ฐํจ.
๊ทผ๋ฐ ๋ณดํต ๊ฑด์ถ๊ฐ๋ฅํ ๊ฒ์์ ๋ณด๋ฉด ๊ฐ ๊ฑด์ถ๋ฌผ๋ค์ด ๊ฐ์์ ์ขํ์์คํ ์ ์ด์ฉํ๊ณ ํ๋ ์ด์ด๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ฑด์ถ๋ฌผ์ ์ขํ๊ณ์ ๋ง์ถฐ์ ์ค๋ ์์ผ์ค.
์ฝ๊ฒ ๊ฐ๋ ๋ฐฉ๋ฒ์ ์์.
Transform.TransformPoint()๋ฅผ ์ด์ฉํ๋ฉด ์๋ํฌ์ง์ ์ ํด๋น ํธ๋์คํผ ์๋์ ๋ก์ปฌ ํฌ์ง์ ์ผ๋ก ๋ฐ๊ฟ์ค.
๋ฐ๋๋ก Transform.InverseTransformPoint()๋ฅผ ์ด์ฉํ๋ฉด ํด๋น ํธ๋์คํผ ์๋์ ๋ก์ปฌ ํฌ์ง์ ์ ์๋ ํฌ์ง์ ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ .
๊ทผ๋ฐ ์ด๊ฑด ์ผ๋จ ํด๋น ํธ๋์คํผ์ ์ง๋ ๊ฒ์์ค๋ธ์ ํธ๊ฐ ๋ฐ๋์ ํ์ํ ๋ฐฉ๋ฒ์ด๊ณ , ๋ญ๊ฐ ์์ ๋กญ๊ฒ ์์ฉํ๊ธฐ๊ฐ ํ๋ฌ.
๊ทธ๋์ ์กฐ๊ธ ์์๋ดค์.
๊ธฐ๋ณธ์ ์ผ๋ก ํธ๋์คํผ์ ๊ณ์ฐ ํ ๋ ์์ -> ๋ถ๋ชจ ์์๋ก, ์ค์ผ์ผ->๋กํ ์ด์ ->ํฌ์ง์ ์์๋ก ๊ณ์ฐํด์ค.
์์์ ๋ก์ปฌ์ค์ผ์ผ/๋กํ ์ด์ /ํฌ์ง์ ์ ๊ณ์ฐํด์ฃผ๊ณ ๋ถ๋ชจ์ ๋ก์ปฌ์ค์ผ์ผ/๋กํ ์ด์ /ํฌ์ง์ ์ ์ ์ฉ์์ผ์ค์ ๋์ค๋๊ฒ ์ต์ข ์ ์ธ ์์์ ํธ๋์คํผ์.
๋กํ ์ด์ ์ ์ ์ฉํ๋๊ฑด ๋กํ ์ด์ ์ฟผํฐ๋์จ์ ๊ณฑํด์ฃผ๋ฉด ๋๋๋ฐ, ์ฌ์ค ์ฟผํฐ๋์จ์ ๊ณต๋ถํด๋ณธ์ ์์ด์ ํ ๋ง์ด ์์.
xyz๊ฐ์ผ๋ก๋ ๊ณ์ฐ์ด ๊ฐ๋ฅํ๋ฐ, Z, X, Y ์์๋ก ํ์ ์์ผ์ฃผ๋ฉด ๋จ.
3D ๋กํ ์ด์ ๋งคํธ๋ฆญ์ค ์ฐพ์๋ณด๋ฉด ํ์ ์์ผ์ฃผ๋ ๋ฐฉ๋ฒ ๋์ด. ์ค๋ฅธ์์ขํ๊ณ,์ผ์์ขํ๊ณ์ ๋ฐ๋ผ ์ฐจ์ด๊ฐ ์๋๋ฐ, ๊ฐ๋์ -1 ๊ณฑํด์ฃผ๋ฉด ์๋ก ํธํ๋๋ค๋๋ผ.
๋ก์ปฌํฌ์ง์ ์ ํ๋จ๊ณ ์ ๋ถ๋ชจ์ ์ขํ๊ณ๋ก ๋ณํ์์ผ์ฃผ๋ ํจ์๋ฅผ ์ง๋ดค์
์ด๊ฒ ๊ดํ ๋ณต์กํ๊ฒ ์๊ฐํด์ ํท๊ฐ๋ ธ๋๋ฐ ์๊ณ ๋ณด๋ ์ ์ผ ๊ธฐ๋ณธ์ ์ธ ์์ ์ด๋๋ผ.
๊ทธ๋ฅ ๋ก์ปฌํฌ์ง์ ์ ๋ถ๋ชจ์ ์ค์ผ์ผ/๋กํ ์ด์ /ํฌ์ง์ ์ ์ ์ฉ์์ผ์ฃผ๋ ์์ ์.
์ธ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์
Vector3 p = localPos;
p.x *= parentScale.x;
p.y *= parentScale.y;
p.z *= parentScale.z;
p = RotateZ(p, parentRot.eulerAngles.z * Mathf.Deg2Rad);
p = RotateX(p, parentRot.eulerAngles.x * Mathf.Deg2Rad);
p = RotateY(p, parentRot.eulerAngles.y * Mathf.Deg2Rad);
p += parentPos;
return p;
๊ทธ๋ฅ ํ๋จ๊ณ์ฉ ์ฒ๋ฆฌํด์ฃผ๊ธฐ
Vector3 p = localPos;
p.x *= parentScale.x;
p.y *= parentScale.y;
p.z *= parentScale.z;
p = parentRot * p;
p += parentPos;
return p;
Quaternion ์ด์ฉํ๊ธฐ
Matrix4x4 m = Matrix4x4.TRS(parentPos, parentRot, parentScale);
return m.MultiplyPoint3x4(localPos);
๋งคํธ๋ฆญ์ค ์ด์ฉํ๊ธฐ.
์ด ๋งคํธ๋ฆญ์ค๋ค์ ๊ณฑํด๋๊ฐ๋ฉด ๊ทธ๋ํฝ์ค์์ ๋ชจ๋ธ->์๋ ๋ณํํ ๋ ์ฐ์ด๋ ๋งคํธ๋ฆญ์ค๊ฐ ๋์ค๋๊ฒ ๋ง๋?
์ ๋ค ์ ๋ํฐ ํธ๋์คํผ๊ณผ ๊ฐ์ ๊ฐ์ด ๋์ด.
๊ทธ๋ฅ ์ด ์์ ์ ์์ -> ๋ถ๋ชจ ๋ฐฉํฅ์ผ๋ก ๋ฐ๋ณตํด์ฃผ๋๊ฒ ์์์ ์ค์ ์๋ํฌ์ง์ ์ ๊ตฌํ๋ ๋ฐฉ์์ธ๊ฒ ๊ฐ์.
๋ฐ๋๋ก ์๋ํฌ์ง์ ์์ ๋ก์ปฌํฌ์ง์ ์ผ๋ก ๊ฐ๋๊ฑด ์ญ์์ผ๋ก ์์ ํด์ฃผ๋ฉด ๋จ.
์ฟผํฐ๋์จ์ด๋ ๋งคํธ๋ฆญ์ค์ inverse๊ธฐ๋ฅ์ด ์๋๋ฐ ์ด๊ฑฐ ์ด์ฉํ๋ฉด ๋ ๋ฏ?
๋งจ๋ ๋ง๋ก๋ง ๋งคํธ๋ฆญ์ค๋ฅผ ์ด์ฉํด ์ขํ๊ณ๋ฅผ ์ด๋ํ๋ค๊ณ ๋ค์ด์ ์ดํด๊ฐ ์ ์๊ฐ๋๋ฐ ์ง์ ํด๋ณด๋๊น ํ ์๋ฟ๋ค.
๊ทธ๋ฆฌ๊ณ ๋งคํธ๋ฆญ์ค๊ฐ ์ ์ ์ฉํ์ง๋ ๋๋์ด ๊นจ๋ฌ์์.
๋งคํธ๋ฆญ์ค ์ฌ๋ฌ๊ฐ๋ฅผ ๊ณฑํด์ผ ํ ๋ ๊ณ์ฐ์ด ์์ฒญ ์์ถ๋๋๋ฏ ใทใท
์ด์ ๋ค์ ๋ชจ๋ธ๋ง ํ๋ฌ ๊ฐ๋ค๊ฐ ๊ฐ์ ํ ์ฑํฐ ๋๋๋ฉด ๋ค์ ๊ฑด์ถ์์คํ ์ ์ ์ฉํ๋ฌ ์ฌ ์๊ฐ์
๋จผ๋ง์ธ์ง ๋ชจ๋ฅด๊ฒ์ง๋ง ์ถ์ฒ
ํ๋ ฌ ๊ฐ์ด๋ ต๊ณ ์ขํ๊ณ ์๋ค๊ฐ๋คํ ๋ ์ด๋ค ์ด๊ฑฐ๋ง์๊ณ ๋ฐ๋ก ์ด๋ฐ์ธ์ง ์๋ชฐ๋ผ์ ๋ฒ๋ ธ๋๋ฐ ์ด๋ฐ๋ฐ ์ฐ๋๊ตฌ๋