ํฌ์ ์ขํ๋ฅผ ์ ๋ํฐ ์์น๋ก ๋ณํํ๋ ๋จ๊ณ๋ณ ๊ฐ์ด๋
I. ์๊ฐ
ํฌ์ ์ขํ๋ฅผ ์ ๋ํฐ ์์น๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ข ํฉ ๊ฐ์ด๋์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค. ์ด ๋จ๊ณ๋ณ ๊ฐ์ด๋๋ ๊ฒ์ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ ํ๋ ๋ถ๋ค์๊ฒ ์ด ์ค์ํ ๊ณผ์ ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
II. ์ขํ ๋ณํ๊ธฐ์ ํ์์ฑ
๊ฒ์ ๊ฐ๋ฐ์ ์ธ๊ณ์์ ์ค์ธ๊ณ GPS ์ขํ๋ฅผ ์ ๋ํฐ ๊ฒ์ ๋ด์์ ์ฌ์ฉํ๋ ๋ฅ๋ ฅ์ ํ์์ ์ ๋๋ค. ์ขํ ๋ณํ๊ธฐ๋ ์ํํ ๊ฒ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ํ์ ๋๊ตฌ์ ๋๋ค.
III. ์ง๋ฆฌ ์ขํ์ ํฌ์ ์ขํ
์ง๋๋ฅผ ํต์นํ๋ ๋ ๊ฐ์ง ์ขํ ์ ํ์ด ์์ต๋๋ค: ์ง๋ฆฌ ์ขํ์ ํฌ์ ์ขํ.
- ์ง๋ฆฌ ์ขํ๋ ์ง๊ตฌ ํ๋ฉด์์ ์์น๋ฅผ ๋ํ๋ด๋ ์๋์ ๊ฒฝ๋ ๊ฐ์ ๋๋ค. ๋, ๋ถ, ์ด ๋๋ ์ญ์ง ๋๋ก ํ์๋๋ฉฐ, ์ง๋ํ์ ๊ธฐ์ด์ ๋๋ค.
- ํฌ์ ์ขํ๋ ๋ ๊ฐ ๋๋ ์ธ ๊ฐ์ ์ฐจ์ ํ๋ฉด์์ ์์น๋ฅผ ๋ํ๋ด๋ ๋ฐ์นด๋ฅดํธ ์ขํ (x, y) ๋๋ (x, y, z)์ ๋๋ค. ์ง๋ฆฌ ์ขํ๋ฅผ ๋ค์ํ ์ง๋ ํฌ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ํฌ์ํจ์ผ๋ก์จ ๋ง๋ค์ด์ง๋ฉฐ, ๊ฐ๋จ ํ๊ณ 3D ํ๊ฒฝ์์ ์กฐ์ํ๊ธฐ ์ฌ์ด ํน์ฑ ๋๋ฌธ์ ๊ฒ์ ๊ฐ๋ฐ์์ ์ ํธ๋ฉ๋๋ค.
์ด ๊ฐ์ด๋์์๋ ํฌ์ ์ขํ์ ์ธ๊ณ๋ฅผ ํํํฉ๋๋ค.
IV. ์ขํ ๋ณํ์ ๊ธฐ๋ณธ ์๋ฆฌ
์ขํ ๋ณํ์ ์ค์ธ๊ณ ํฌ์ ์ขํ๋ฅผ ๊ฒ์ ์ธ๊ณ ์ขํ ์ฒด๊ณ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋๋ค. ์ด ์์ ์ ์ํํ๊ธฐ ์ํด ๋ค์ํ ์ขํ ๋ณํ ๊ธฐ๋ฒ๊ณผ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค.
V. C# ์คํฌ๋ฆฝํธ
๋ค์ C# ์คํฌ๋ฆฝํธ๋ ํฌ์ ์ขํ๋ฅผ ์ ๋ํฐ ์์น๋ก ๋ณํํ๋ ๊ณผ์ ์ ๊ตฌํํฉ๋๋ค.
- ConvertToUnityPosition() ๋ฉ์๋: ์ด ๋ฉ์๋๋ ํฌ์ ์ขํ๋ฅผ ์ ๋ํฐ ์์น๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ ํผ๋ฐ์ค ์๋์ ๋ ํผ๋ฐ์ค ๊ฒฝ๋๋ ๋ณํ์ ์ํ ๊ธฐ์ค์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- OnDrawGizmos() ๋ฉ์๋: ์ด ๋ฉ์๋๋ ๋ณํ๋ ์ ๋ํฐ ์์น์ ๊ตฌ๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ง๋ ฌํ๋ ํ๋์ ์ฌ์ฉ์ ์ ์: ์คํฌ๋ฆฝํธ์๋ scaleFactor์ ๊ฐ์ ์ง๋ ฌํ๋ ํ๋๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ ๋ํฐ ์๋ํฐ์์ ์กฐ์ ํ ์ ์์ต๋๋ค. ConvertToUnityPosition() ๋ฉ์๋์ xIncrement ๋ฐ zIncrement ๋ณ์๋ ๋ณํ๋ ์์น์ ์ค์ผ์ผ์ ๋ณ๊ฒฝํ๋ ๋ฐ ์กฐ์ ํ ์ ์์ต๋๋ค.
VI. ๊ฒฐ๋ก
์ด ๊ฐ์ด๋๋ฅผ ํตํด ํฌ์ ์ขํ๋ฅผ ์ ๋ํฐ ์์น๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์์ต๋๋ค. ์ด๋ฌํ ์ง์์ ์ค์ธ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฒ์ ๊ฐ๋ฐ์์ ํฐ ๋์์ด ๋ฉ๋๋ค. ์ด ๊ฐ์ด๋์ C# ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ํฌ์ ์ขํ๋ฅผ ์ ๋ํฐ ๊ฒ์ ํ๊ฒฝ์ ํตํฉํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํ ๋๋ก ์ฐฝ์์ ์ธ ๊ฒ์ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ , ์ค์ธ๊ณ์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ธ๊ณ๋ฅผ ๊ตฌ์ถํด ๋ณด์ธ์!
using UnityEngine;
public class ScCoordinatesToPosition : MonoBehaviour
{
[SerializeField] float scaleFactor = 1.0f;
private int index = 0;
// ์ขํ ๋์
private float referenceLatitude = ;
private float referenceLongitude = ;
private Vector2[] coordinates = new Vector2[4];
private Vector3[] unityPositions = new Vector3[4];
private void Start()
{
coordinates[0] = new Vector2(0,0);
coordinates[1] = new Vector2(0,0);
coordinates[2] = new Vector2(0,0);
coordinates[3] = new Vector2(0,0);
for (int i = 0; i < coordinates.Length; i++)
{
unityPositions[i] = ConvertToUnityPosition(coordinates[i]);
Debug.Log("Unity position : " + i + unityPositions[i]);
}
}
private Vector3 ConvertToUnityPosition(Vector2 coordinates)
{
float xIncrement = 44f;
float zIncrement = 55f;
float y = 0;
float x= (coordinates.x - referenceLongitude) * xIncrement * scaleFactor;
float z = (coordinates.y - referenceLatitude) * zIncrement * scaleFactor;
return new Vector3(x, y, z);
}
private void OnDrawGizmos()
{
Gizmos.matrix = transform.localToWorldMatrix;
for (int i = 0; i < coordinates.Length; i++)
{
Gizmos.color = Color.red;
Gizmos.DrawSphere(ConvertToUnityPosition(coordinates[i]), 0.5f);
}
}
}
'๐ฎUnity' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Unity] ๊ทธ๋ํฝ ์ง์ ์ค๊ธฐ (0) | 2023.03.02 |
---|---|
[Unity] Unity Life Cycle (0) | 2022.12.12 |
[Unity] Coroutine, Invoke (0) | 2022.11.28 |
[Unity] Addressables (0) | 2022.11.16 |
[Unity][VR] Oculus Quest apk Build, Test (0) | 2022.09.27 |
๋๊ธ