๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Unity/AR

[์œ ๋‹ˆํ‹ฐ AR FPS ๊ฒŒ์ž„ ๊ฐœ๋ฐœ] - 2. ์ ์„ ๋žœ๋ค ์œ„์น˜์— ์ƒ์„ฑ & UI์— ์ ์ˆ˜ ๊ฐฑ์‹ 

728x90
๋ฐ˜์‘ํ˜•

โ˜ž  ๋ณธ ๊ธ€์€ ์ž‘์„ฑ์ž๊ฐ€ ๊ฐœ๋ฐœํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€๋กœ ์ž˜๋ชป๋œ ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์–ด,  ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
โ˜ž  ํ•ด๋‹น ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ๋ฐ˜๋“œ์‹œ ์ถœ์ฒ˜๋ฅผ ๊ผญ ๋ช…์‹œํ•ด์ฃผ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

https://vrworld.tistory.com/3

 

[์œ ๋‹ˆํ‹ฐ AR FPS ๊ฒŒ์ž„ ๊ฐœ๋ฐœ] - 1. AR ํ™˜๊ฒฝ์—์„œ ์ด์„ ๋ฐœ์‚ฌํ•˜๊ธฐ / Physics.Raycast

โ˜ž ๋ณธ ๊ธ€์€ ์ž‘์„ฑ์ž๊ฐ€ ๊ฐœ๋ฐœํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€๋กœ ์ž˜๋ชป๋œ ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์–ด, ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. โ˜ž ํ•ด๋‹น ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ๋ฐ˜๋“œ์‹œ ์ถœ์ฒ˜๋ฅผ ๊ผญ ๋ช…์‹œํ•ด์ฃผ๊ธฐ ๋ฐ”๋ž๋‹ˆ

vrworld.tistory.com

์ด ์ „์— ๊ตฌํ˜„ ์š”์•ฝ์œผ๋กœ 1~2๋ฒˆ๊นŒ์ง€ ์ด์–ด์„œ ์ด๋ฒˆ์—๋Š” ๋‚˜๋จธ์ง€ 3~4๋ฒˆ์— ๋Œ€ํ•ด ๊ธ€์„ ์จ ๋‚ด๋ ค๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 


 

 

 

 Enemy(์ )์˜ ๋žœ๋ค ๋ฐฐ์น˜

 

ํ˜„์žฌ 1~2๋ฒˆ์˜ ๊ณผ์ •์œผ๋กœ ์ธํ•ด ํ”Œ๋ ˆ์ด์–ด์˜ ๋ชจ๋“  ๋ฐœ์‚ฌ๊ณผ์ •์€ ๋งˆ์ณค๋‹ค. ์ด์   ํ”Œ๋ ˆ์ด์–ด ์•ž๊ณผ ๋’ค์— Enemy๋ฅผ ๋ฐฐ์น˜ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

AR Camera

๊ฒŒ์ž„์„ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์นด๋ฉ”๋ผ๋กœ ๋น„์ถ”๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ๊ณผ AR Camera๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„์ถ”๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ์ด ์„œ๋กœ ์ผ์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 

๊ฒŒ์ž„์—์„œ ํ”Œ๋ ˆ์ด์–ด์˜ ์•ž๊ณผ ๋’ค์˜ ๊ธฐ์ค€์€ AR Camera๊ฐ€ ์–ด๋Š ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ”๋ผ๊ณ  ์žˆ๋Š”์ง€๋กœ ์ •ํ•ด์ง€๊ฒŒ ๋œ๋‹ค.

 

 

CubeSpawn ์˜ค๋ธŒ์ ํŠธ ์œ„์น˜

Hierarchy์— ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ์„ ํ•˜๋ฉด ๋นˆ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์œ„์—์„œ ์„ค๋ช…์„ ํ†ตํ•ด  CubeSpawn์˜ ์˜ค๋ธŒ์ ํŠธ ์œ„์น˜๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ์•ž์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

CubeBackSpawn

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ CubeBackSpawn ๋นˆ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ์ด ์˜ค๋ธŒ์ ํŠธ๋Š” ํ”Œ๋ ˆ์ด์–ด์˜ ๋’ค์— ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

 

CubeSpawn ์˜ค๋ธŒ์ ํŠธ Inspector

์œ„ ์‚ฌ์ง„์€ Cube Spawn ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ Cube Spawn์€ Spawn Object ์ฆ‰, Spawn ์‹œํ‚ค๋ ค๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ Prefab์œผ๋กœ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

 

public class CubeSpawn : MonoBehaviour
{
    public Transform[] spawnPoints;
    public GameObject SpawnObject; //Prefab์œผ๋กœ ์ƒ์„ฑ๋  ์˜ค๋ธŒ์ ํŠธ

    public int xPos;
    public int zPos;
    public int enemyCount;

   
    void Start()
    {
        StartCoroutine(StartSpawing());
    }

    IEnumerator StartSpawing()
    {
        while (enemyCount < 20)
        {
            xPos = Random.Range(-4, 8); //Position X์ถ• -4~ 8 ์‚ฌ์ด์˜ ๋žœ๋ค ๋ฒ”์œ„ ์ƒ์„ฑ
            zPos = Random.Range(6, 11); // Position Z์ถ• 6 ~ 11 ์‚ฌ์ด์˜ ๋žœ๋ค ๋ฒ”์œ„ ์ƒ์„ฑ
            //Prefab ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ์‹œ์ผœ์„œ ํ˜ธ์ถœํ•œ๋‹ค. 
            Instantiate(SpawnObject, new Vector3(xPos, Random.Range(-1, 1), zPos), Quaternion.identity); //(๋ณต์ œํ•  ๋Œ€์ƒ, ์œ„์น˜, ๋ฐฉํ–ฅ)
            yield return new WaitForSeconds(2);
            enemyCount += 1;
        }
    }
}

์Šคํฌ๋ฆฝํŠธ Cube Spawn์— ๋Œ€ํ•œ ์‚ฌ์ง„์ด๋‹ค.  ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ์•ž์—๋Š” Enemy๊ฐ€ 20๋ช…์ด ๋˜๊ธฐ ์ „๊นŒ์ง€  Instantiate()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ์„ ๋ฐ›์•„ Prefab ์˜ค๋ธŒ์ ํŠธ๋“ค์„ ์ธ์Šคํ„ด์Šค ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

์ธ์Šคํ„ด์Šค(Instance)๋Š” ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋– ์˜ฌ๋ฆฌ์‹œ๋ฉด ๋œ๋‹ค.  ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์˜ค๋ธŒ์ ํŠธ๋“ค์„ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ฐ์–ด์„œ ๋งŒ๋“ค์–ด๋‚ด์–ด ๋ณต์ œํ’ˆ์„ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

 

 

CubeBackSpawn ์˜ค๋ธŒ์ ํŠธ Inspector

์œ„์—์„œ ๋ณด์—ฌ์ค€ Cube Spawn๊ณผ ์œ ์‚ฌํ•œ ํ‹€์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.  ๋˜‘๊ฐ™์ด Spawn ํ•  ์˜ค๋ธŒ์ ํŠธ๋ฅผ Prefab์œผ๋กœ ๋„ฃ์–ด์ค์‹œ๋‹ค.

 

public class CubeBackSpawn : MonoBehaviour
{
    public Transform[] spawnPoints;
    public GameObject BackSpawnObject;  //Prefab์œผ๋กœ ์ƒ์„ฑ๋  ์˜ค๋ธŒ์ ํŠธ

    public int BackxPos;
    public int BackzPos;
    public int BackCount;

    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(BackSpawing());
    }

    IEnumerator BackSpawing()
    {
        while (BackCount < 5)
        {
            BackxPos = Random.Range(-2, 6); //Position X์ถ• -2~ 6 ์‚ฌ์ด์˜ ๋žœ๋ค ๋ฒ”์œ„ ์ƒ์„ฑ
            BackzPos = Random.Range(-5, -2); // Position Z์ถ• -5 ~ -2 ์‚ฌ์ด์˜ ๋žœ๋ค ๋ฒ”์œ„ ์ƒ์„ฑ
            //Prefab ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ์‹œ์ผœ์„œ ํ˜ธ์ถœํ•œ๋‹ค. 
            Instantiate(BackSpawnObject, new Vector3(BackxPos, Random.Range(-1, 1), BackzPos), Quaternion.identity); //(๋ณต์ œํ•  ๋Œ€์ƒ, ์œ„์น˜, ๋ฐฉํ–ฅ)
            yield return new WaitForSeconds(2);
            BackCount += 1;
        }
    }
}

while ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋’ค์— Spawn ํ•  Enemy(์ )์˜ ๊ฐœ์ˆ˜๋ฅผ 5๋ช… ์ดํ•˜๋กœ ์กฐ๊ฑด์„ ๊ฑธ์–ด์ฃผ์—ˆ๋‹ค.

์—ฌ๊ธฐ์„œ Instantiate() ํ•จ์ˆ˜ ์•ˆ์— Quaternion.identity๋Š” ํšŒ์ „ ๊ฐ’์„ ๋”ฐ๋กœ ์ •์˜ํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 


 

 

 

 Enemy์— ๋Œ€ํ•œ ์ •๋ณด

Prefab ์ด๋ž€?

์กฐ๊ธˆ ์ „์— Spawn ํ•  ์˜ค๋ธŒ์ ํŠธ์— Prefab์œผ๋กœ ๋งŒ๋“ค์–ด ๋„ฃ์–ด์ค€๋‹ค๊ณ  ํ•˜์˜€๋‹ค.
Prefab์€ '์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—์…‹'์œผ๋กœ ์œ ๋‹ˆํ‹ฐ ๊ณต์‹ ๋งค๋‰ด์–ผ์—์„œ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋˜‘๊ฐ™์€ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋‹จ์ˆœํžˆ ๋ณต์‚ฌํ–ˆ๋‹ค๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณด์ž.  ์ด ๋•Œ  ์ด ์˜ค๋ธŒ์ ํŠธ์— ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ƒ๊ธด๋‹ค๋ฉด ํ•˜๋‚˜ํ•˜๋‚˜ ์ผ์ผ์ด ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฒดํฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด ์ž‘์—…์€ ๋ถˆํ•„์š”ํ•˜๊ณ  ๋น„ํšจ์œจ์ ์ธ ์ž‘์—…์œผ๋กœ ์ด์–ด์ง€๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.
๋งŒ์•ฝ, ์›๋ณธ ํ•˜๋‚˜๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ชจ๋“  ๋ณต์‚ฌ๋ณธ์—๋„ ๋˜‘๊ฐ™์ด ๊ทธ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•ด์ฃผ๋ฉด ์–ผ๋งˆ๋‚˜ ์ข‹์„๊นŒ?
๊ทธ๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ”๋กœ Prefab์„ ์“ฐ๋Š” ์ด์œ ๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.

 

Cube Prefab Inspector

Prefab์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ Cube์— ๋Œ€ํ•œ ์ •๋ณด์ด๋‹ค. Add Component๋ฅผ ํด๋ฆญํ•˜์—ฌ Box Collider๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์ž. ๋งŒ๋“ค์–ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์ถฉ๋Œ ๊ฐ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ์šฐ๋ฆฌ๊ฐ€ ์ ์—๊ฒŒ ์ด์„ ์ˆ์„ ๋•Œ ์•„๋ฌด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ํ˜„์ƒ์„ ๊ฒช๊ฒŒ ๋œ๋‹ค.

 

public class EnemyCube : MonoBehaviour
{
    public float health = 20f;
    public bool isEneymyDead;   //bool ํƒ€์ž… ์ดˆ๊ธฐ๊ฐ’์€ True
  
    public void getdamage(float damageAmount)
    {
        if (!isEneymyDead) // ์ ์ด ์ฃฝ์ง€ ์•Š์œผ๋ฉด
        {
            health -= damageAmount; //๋ฐ๋ฏธ์ง€ ๋ฐ›์€ ๋งŒํผ Enemy์˜ Health๊ฐ€ ๊นŽ์ธ๋‹ค.

            if (health <= 0)
            {
                 Destroy(this.gameObject, 0.5f); //์ ์ด ์‚ฌ๋ผ์ง„๋‹ค.
                 PlayerInform.instance.AddScore(1); // EnemyCube์˜ ํ”ผ๊ฐ€ 0์ดํ•˜์ผ ๋•Œ ์ ์ˆ˜๊ฐ€ 1์”ฉ์ฆ๊ฐ€
            }
        }
    }
}

๋‹ค์Œ์€ ์ ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ Enemy Cube ๋ชจ์Šต์ด๋‹ค. ์ ์˜ health๋Š” 20์œผ๋กœ ์ง€์ •ํ•ด์ฃผ์—ˆ๋‹ค.

get damage ํ•จ์ˆ˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด์„ ์  ๋•Œ๋งˆ๋‹ค ์ฆ‰, HandGunFire ์Šคํฌ๋ฆฝํŠธ์—์„œ shoot() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค

damage Amount๋งŒํผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ์ ์˜ health๋ฅผ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค. 

๋งŒ์•ฝ, ์ ์˜ health๊ฐ€ 0 ์ดํ•˜๋กœ ๋–จ์–ด์งˆ ์‹œ ์ ์€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋˜๊ณ , UI์— ์ ์ˆ˜๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.

 

HandGunFire ์Šคํฌ๋ฆฝํŠธ์—์„œ shoot()

 

 


 

 

 

 ์‚ฌ์šฉ์ž UI์— ํ˜„์žฌ Score ๊ฐฑ์‹ ์‹œํ‚ค๊ธฐ

 

์œ„์—์„œ ์ ์˜ health๊ฐ€ 0 ์ดํ•˜์ผ ๋•Œ " PlayerInform.instance.AddScore(1); " ์„ ๋งŒ๋‚˜ UI์— ํ”Œ๋ ˆ์ด์–ด์˜ ์ ์ˆ˜๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค๊ณ  ํ•˜์˜€๋‹ค. AddScore() ํ•จ์ˆ˜๋Š” PlayerInform ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜์ด๋‹ค. ์—ฌ๊ธฐ์„œ PlayerInform ํด๋ž˜์Šค๋ฅผ Static์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์–ด ์–ด๋””์—์„œ๋‚˜ ์ ‘๊ทผ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. ์ฆ‰, PlayerInform์— ๋Œ€ํ•œ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ์„ ๋ชจ๋‘ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

https://dlemrcnd.tistory.com/8

 

Unity - ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜, ๋ณ€์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ (๋””์ž์ธ ํŒจํ„ด ์‹ฑ๊ธ€ํ†ค)

๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜ ๋ณ€์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์„ ๋•Œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๊ทธ ์ค‘์— ์‰ฝ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐ๋‚˜๋Š”๋Œ€๋กœ ์ ์–ด๋ณด์•˜๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๋ฐ์ดํ„ฐ(Data) ์˜์—ญ (์ •์  ๋ฉ”๋ชจ๋ฆฌ) ์Šคํƒ(Stack)

dlemrcnd.tistory.com

 

๊ฒŒ์ž„ UI ์—์„œ EnemyScore ๋ชจ์Šต
EnemyScore Inspector

์œ„์—์„œ 2๊ฐœ์˜ ์‚ฌ์ง„์€ ํ”Œ๋ ˆ์ด์–ด ํ˜„์žฌ Score๋ฅผ ๊ฒŒ์ž„ UI์— ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋Š” EnemyScore์— ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ ์ •๋ณด์ด๋‹ค.

์ด์ œ ์•„๊นŒ AddScore() ํ•จ์ˆ˜์—์„œ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ์ ์ˆ˜๋ฅผ ๊ฒŒ์ž„ UI์—์„œ๋„ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๋„๋ก ์—ฐ๊ฒฐํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

PlayerInform ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์ ์ˆ˜ UI EnemyScore ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๋ชจ์Šต

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;   //UI์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ

public class PlayerInform : MonoBehaviour
{
    public static PlayerInform instance;    // statci(์ •์ )์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์–ด๋””์—์„œ๋‚˜ ์ž๊ธฐ ์ž์‹ ์„ ์ €์žฅํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค.
    public Text PlayerScore;      //UI์— ํ‘œ์‹œ๋˜๋Š” "Score : " 
    private int CurrentScore = 0;   //์ ์„ ์ฃฝ์ผ๋•Œ๋งˆ๋‹ค ์˜ฌ๋ผ๊ฐ€๋Š” ์ ์ˆ˜

    void Awake()
    {
        if (!instance) instance = this; //์ด๊ฑฐ ์ค‘์š”..
        // ์ •์ ์œผ๋กœ ์ž์‹ ์„ ์ฒดํฌํ•˜์—ฌ ์ž๊ธฐ ์ž์‹ ์„ ์ €์žฅํ•œ๋‹ค.
        // ๋„ฃ์ง€ ์•Š๋Š”๋‹ค๋ฉด nullreferenceexception ์˜ค๋ฅ˜ ๋ฐœ์ƒ

        PlayerScore.text = CurrentScore.ToString("Score : 0");  // intํ˜•์œผ๋กœ ๋ฐ›์€ ์ ์ˆ˜๋ฅผ UI Text์— ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ˜•๋ณ€ํ™˜  
    }

    public void AddScore(int getScore)
    {
        CurrentScore += getScore;
        PlayerScore.text = CurrentScore.ToString("Score : 0");  // UI์ฐฝ์— ํ˜„์žฌ ์ ์ˆ˜ ์—…๋ฐ์ดํŠธ
    }
}

PlayerInform ํด๋ž˜์Šค ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋‹ค์‹œํ”ผ PlayerInform ์ปดํฌ๋„ŒํŠธ ์ž์ฒด๋ฅผ static์œผ๋กœ ์„ ์–ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

AddScore() ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ getScore๋Š” 1์”ฉ ๋ฐ›์•„์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ int ํƒ€์ž…์˜ CurrentScore ์ฆ‰, ํ˜„์žฌ ์ ์ˆ˜๋ฅผ ๊ฐฑ์‹ ์‹œ์ผœ์ฃผ์—ˆ์œผ๋ฉฐ,  .ToString()์œผ๋กœ int ํƒ€์ž…์„ String ํƒ€์ž…์œผ๋กœ ํ˜• ๋ณ€ํ™˜ํ•˜์—ฌ ํ”Œ๋ ˆ์ด์–ด UI์—์„œ๋„ ์ ์ˆ˜๊ฐ€ ๊ฐฑ์‹ ๋˜๋„๋ก ๋งŒ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 


 

 

์ง€๊ธˆ๊นŒ์ง€ ๊ตฌํ˜„์„ ์™„๋ฃŒํ–ˆ์„ ๋•Œ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค. ์ ์ด ๋žœ๋ค์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ , ํ”Œ๋ ˆ์ด์–ด์˜ ๊ณต๊ฒฉ, ํ”ผ๊ฒฉ ์„ฑ๊ณต ์‹œ์— ํ”Œ๋ ˆ์ด์–ด UI Score๊ฐ€ ๊ฐฑ์‹ ๋˜๊ณ  ์žˆ๋Š” ๋ชจ์Šต์„ ์˜์ƒ์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://youtu.be/-WE8z6bLp80

 

 

 

https://www.youtube.com/watch?v=ydjpNNA5804&list=PLoCI09s5z0sJafXrXzFwyPLMoOlztkgPe&index=4 

์ ์˜ ๋žœ๋ค ์ƒ์„ฑ

 

 

 

https://www.youtube.com/watch?v=THnivyG0Mvo&list=PLoCI09s5z0sJafXrXzFwyPLMoOlztkgPe&index=3 

ํ”Œ๋ ˆ์ด์–ด ๊ณต๊ฒฉ

 

๋‹ค์Œ์€ ์žฌ๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ๋„์›€๋ฐ›์•˜๋˜ ์˜์ƒ์„ ์ฒจ๋ถ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ง€๊ธˆ๊นŒ์ง€์˜ ๊ณผ์ •์„ ๋ชจ๋‘ ๊ฑฐ์ณค๋‹ค๋ฉด AR FPS ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ดˆ๊ธฐ ๊ตฌํ˜„ ์ •๋„๋Š” ์™„๋ฃŒ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.  ๋‹ค์Œ์€ ์ง€๊ธˆ์˜ ๋ชจ์Šต์—์„œ ์ถ”๊ฐ€๋กœ ๊ฐœ๋ฐœํ•œ ๋ถ€๋ถ„๊ณผ ๊ฐœ๋ฐœ ์‹คํŒจํ–ˆ๋˜ ๋ถ€๋ถ„์„ ๊ณ„์†ํ•ด์„œ ์˜ฌ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 


 

728x90
๋ฐ˜์‘ํ˜•