๐ŸŽฎUnity

[Unity] ํˆฌ์˜ ์ขŒํ‘œ๊ณ„ ์œ ๋‹ˆํ‹ฐ ์ขŒํ‘œ ๋ณ€ํ™˜ ๋‹จ์ˆœ ๊ตฌํ˜„

taesooya 2023. 4. 19.

ํˆฌ์˜ ์ขŒํ‘œ๋ฅผ ์œ ๋‹ˆํ‹ฐ ์œ„์น˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ

I. ์†Œ๊ฐœ

ํˆฌ์˜ ์ขŒํ‘œ๋ฅผ ์œ ๋‹ˆํ‹ฐ ์œ„์น˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ข…ํ•ฉ ๊ฐ€์ด๋“œ์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ๋Š” ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ ์ž ํ•˜๋Š” ๋ถ„๋“ค์—๊ฒŒ ์ด ์ค‘์š”ํ•œ ๊ณผ์ •์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

II. ์ขŒํ‘œ ๋ณ€ํ™˜๊ธฐ์˜ ํ•„์š”์„ฑ

๊ฒŒ์ž„ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„์—์„œ ์‹ค์„ธ๊ณ„ GPS ์ขŒํ‘œ๋ฅผ ์œ ๋‹ˆํ‹ฐ ๊ฒŒ์ž„ ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋Šฅ๋ ฅ์€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์ขŒํ‘œ ๋ณ€ํ™˜๊ธฐ๋Š” ์›ํ™œํ•œ ๊ฒŒ์ž„ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ํ•„์ˆ˜ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

 

III. ์ง€๋ฆฌ ์ขŒํ‘œ์™€ ํˆฌ์˜ ์ขŒํ‘œ

์ง€๋„๋ฅผ ํ†ต์น˜ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ขŒํ‘œ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค: ์ง€๋ฆฌ ์ขŒํ‘œ์™€ ํˆฌ์˜ ์ขŒํ‘œ.

  • ์ง€๋ฆฌ ์ขŒํ‘œ๋Š” ์ง€๊ตฌ ํ‘œ๋ฉด์ƒ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์œ„๋„์™€ ๊ฒฝ๋„ ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋„, ๋ถ„, ์ดˆ ๋˜๋Š” ์‹ญ์ง„ ๋„๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, ์ง€๋„ํ•™์˜ ๊ธฐ์ดˆ์ž…๋‹ˆ๋‹ค.
  • ํˆฌ์˜ ์ขŒํ‘œ๋Š” ๋‘ ๊ฐœ ๋˜๋Š” ์„ธ ๊ฐœ์˜ ์ฐจ์› ํ‰๋ฉด์—์„œ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์นด๋ฅดํŠธ ์ขŒํ‘œ (x, y) ๋˜๋Š” (x, y, z)์ž…๋‹ˆ๋‹ค. ์ง€๋ฆฌ ์ขŒํ‘œ๋ฅผ ๋‹ค์–‘ํ•œ ์ง€๋„ ํˆฌ์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‰๋ฉด์— ํˆฌ์˜ํ•จ์œผ๋กœ์จ ๋งŒ๋“ค์–ด์ง€๋ฉฐ, ๊ฐ„๋‹จ ํ•˜๊ณ  3D ํ™˜๊ฒฝ์—์„œ ์กฐ์ž‘ํ•˜๊ธฐ ์‰ฌ์šด ํŠน์„ฑ ๋•Œ๋ฌธ์— ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ํˆฌ์˜ ์ขŒํ‘œ์˜ ์„ธ๊ณ„๋ฅผ ํƒํ—˜ํ•ฉ๋‹ˆ๋‹ค.

 

IV. ์ขŒํ‘œ ๋ณ€ํ™˜์˜ ๊ธฐ๋ณธ ์›๋ฆฌ

์ขŒํ‘œ ๋ณ€ํ™˜์€ ์‹ค์„ธ๊ณ„ ํˆฌ์˜ ์ขŒํ‘œ๋ฅผ ๊ฒŒ์ž„ ์„ธ๊ณ„ ์ขŒํ‘œ ์ฒด๊ณ„๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์ขŒํ‘œ ๋ณ€ํ™˜ ๊ธฐ๋ฒ•๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

V. C# ์Šคํฌ๋ฆฝํŠธ

๋‹ค์Œ C# ์Šคํฌ๋ฆฝํŠธ๋Š” ํˆฌ์˜ ์ขŒํ‘œ๋ฅผ ์œ ๋‹ˆํ‹ฐ ์œ„์น˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  1. ConvertToUnityPosition() ๋ฉ”์„œ๋“œ: ์ด ๋ฉ”์„œ๋“œ๋Š” ํˆฌ์˜ ์ขŒํ‘œ๋ฅผ ์œ ๋‹ˆํ‹ฐ ์œ„์น˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ ˆํผ๋Ÿฐ์Šค ์œ„๋„์™€ ๋ ˆํผ๋Ÿฐ์Šค ๊ฒฝ๋„๋Š” ๋ณ€ํ™˜์„ ์œ„ํ•œ ๊ธฐ์ค€์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. OnDrawGizmos() ๋ฉ”์„œ๋“œ: ์ด ๋ฉ”์„œ๋“œ๋Š” ๋ณ€ํ™˜๋œ ์œ ๋‹ˆํ‹ฐ ์œ„์น˜์— ๊ตฌ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  3. ์ง๋ ฌํ™”๋œ ํ•„๋“œ์™€ ์‚ฌ์šฉ์ž ์ •์˜: ์Šคํฌ๋ฆฝํŠธ์—๋Š” 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

๋Œ“๊ธ€