์ฝ๋๋ ์ธ๊ฐ์
[Player.cs]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField]
IEnemy target;
private void Start()
{
target = GameObject.Find("Enemy").GetComponent<IEnemy>();
Debug.Log("target = " + target);
}
private void Update()
{
if(target != null)
{
target.GetDamage(3);
}
}
}
=============
[IEnemy.cs]
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public interface IEnemy
{
public void GetDamage(int dmg);
public GameObject GetGO();
}
============
[EnemyMy.cs]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyMy : MonoBehaviour, IEnemy
{
[SerializeField]
int hp = 10;
public void GetDamage(int dmg)
{
hp -= dmg;
if (hp <= 0)
Destroy(this.gameObject);
}
public GameObject GetGO()
{
return this.gameObject;
}
}
==========
๋น ์ค๋ธ์ ํธ 2๊ฐ ์์ฑํด์ Player ๋ EnemyMy ๊ฐ๊ฐ ๋ถ์ฌ์ฃผ๊ณ
์ ์ค๋ธ์ ํธ๋ช
์ Find()์ ๋ค์ด๊ฐ Enemy๋ก ํด์ฃผ๊ณ ์คํํจ
์์๊ฐ์ ์๋๋ฏธ ์ฃฝ๊ณ ์๋ฌ ํํ๋ฐ ๋จ๋๋ฐ VS์์ ์๋์ค์ท์ฒ๋ผ ๋ธ๋ ์ดํฌ ๊ฑธ๊ณ ๊ฐ ์ฐ์ด๋ณด๋ฉด
null ์ธ๋ฐ๋ if(target != null) ํต๊ณผํ๋ ์ฅ๋ฉด์ด ์ฌํ๋จ
์์์ผ๋ก ํด๊ฒฐํ๊ธด ํ์ง๋ง ์ ๊ธฐํด์ ๋จ๊ฒจ๋ด
GameObject.Destroy๋ฌ์ง๋ง ์ target๋ณ์๋ ์์ง ์ฃผ์๋ฅผ ๋ฌผ๊ณ ์๋๊ฑฐ์๋? ๋ง์ฝ ๋ณ์ํ์ ์ด GameObject์๋ค๋ฉด Destroy๋ ์ฃผ์๋ผ๋ null์ ์ฒดํฌํด์ฃผ๊ฒ ์ง๋ง ์ ๊ฑด ์ธํฐํ์ด์ค ๋ณ์์์. ๊ทธ๋ผ ์ ๊ฒ ๋์ด ์๋๊ฑฐ์ง.. ๋๋ฒ๊ฑฐ๋ฅผ ๋๋ฌด ๋ฏฟ์ง๋ง.
ใ ใ ์ ๋ฐ๊ฑฐ์ฒ์๋ด์ ์ ๊ธฐํ์
์ ๊ธฐํ๊ฒ ์๋๋ผ Destroyํ๋ฉด ํด๋น ์ฐธ์กฐ ์ฃผ์๋ ๋๊ฐ null์์ผ์ฃผ๋๊ฒ ๊ตญ๋ฃฐ์ด์ฌ. ์ ์ด๋ถํฐ ๋ณธ์ธ์ด ์ฝ๋๋ฅผ ๊ทธ๋ ๊ฒ ์งฐ์ผ๋ฉด์... ์ ๋ํฐ ๋ด์ฅ Null์ฒดํฌ ๊ธฐ๋ฅ์ ์ ๋ ์์กดํ์ง๋ง. ์ค๋๋์๊ฐ ์๋ค
์ด๊ฑด ์ ๋ํฐ Fake null ๋๋ฌธ์ ์ผ์ด๋๋ ํ์์. ์ ์ด์ UnityEngine.Object๊ฐ ์๋๋ผ ์ฌ์ฉ์ ์ ์ํ interface๋ฅผ ๋ฐ์ธ๋ฉํ๊ฒ ๋ฌธ์ ์ ๊ทผ์์
์ข ๋ค๋ฅธ ์๊ธด๋ฐ ์ค๋ธ์ ํธ ํ๊ดด ๊ฐ์ง๋ฅผ ์ฐธ์กฐ๋ฅผ ๋ค๊ณ ์๋ค๊ฐ null์ธ์ง ์ฒดํฌํด์ ์์๋ณด๋ ๋ฐฉ์์ ๋ก์ง ํ๋ฆ ์ธก๋ฉด์์ ๋ณ๋ก ์ ์ข๋ค๊ณ ์๊ฐํจ..
bool๋ก์ฒดํฌํ๋? ๋ณ์๋ฅผ ๋๊ฐ ๊ฐ์ง๊ณ ์์ด์ผ๋ผ?
๋ ์ ๋ํฐ ๋ด์ฅ Update()๊ฐ ์๋๋ผ ์ค๋ธ์ ํธ ๊ด๋ฆฌ์๊ฐ ์์ด์ ๊ฑ๋ค์ด ๊ด๋ฆฌํ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ํ์ํ ๋๋ง๋ค ๋ฆฌ์คํธ์ ๊ฐ๊ฐ ์ปค์คํ ์ ๋ฐ์ดํธ๋ฅผ ๋ถ๋ฌ์ฃผ๋ฉด์ ํ๊ดด๋๋ฉด ๊ทธ ๋ฆฌ์คํธ์์ ์ญ์ ํ๊ณ .. ๋ญ ๊ทธ๋ฐ ๋ฐฉ์์ ์ ํธํจ
๋๋ฒ๊ฑฐ ์์ผ๋ก ๋ฌธ์ ๊ฐ ์๋๋ฐ ์๊พธ ์ด์ํ๊ฐ์ด ์ฐํ๋ฉด printf ๋ ๋ญ๋ ๊ฐ์ ์ง์ ํ์ธํด ๋ณด๋๊ฒ๋ ใฑใ
.equal(null) ์ด๋ null !=(UnityEngine.Object)target ์ผ๋ก ๋น๊ตํ๋ฉด ์๋๋ค์ฌ ๊ทธ๋ผ ํ์ดํฌ ๋์ธ๊ฑด๊ฐ?
์ด๊ฑฐ ์ข์๋ฐฉ๋ฒ๊ฐ๋ค ์ ๋ํฐ object๋ก ํ๋ณํ ๋๋๊ฑฐ