https://gall.dcinside.com/m/game_dev/33123
์ด๊ฒ ์ด์ ํ๋ ์ง๋ฌธ๊ธ์ด๊ณ
๊ทธ๋์ ์ค๋ ๋งค๋์ ์คํฌ๋ฆฝํธ์ ์ ๋ฐ์ดํธ ๋ง๋ค์ด๋ค๊ฐ ํ๋ฒ ๋๋ค๊ฒจ๋ดฃ๋๋
๋์ถฉ ๊ฐ๋ตํํ๋ฉด
๊ฒ ์ค๋ธ์ ํธ ์ ์ธํด์ฃผ๊ณ
private GameObject target;
์ ๋ฐ์ดํธ๋ง๋ค์ด๋ค๊ฐ
void Update()
{
if (Input.GetMouseButtonUp(1))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit2D hit = Physics2D.GetRayIntersection(ray, Mathf.Infinity);
Vector2 cameraPos = maincamera.transform.position;
target=null;
if (hit.collider != null)
{
Debug.Log(hit.collider.name);
target = hit.collider.gameObject;
GameObject.Find("target").GetComponent().Flag();
//Destroy(hit.collider.gameObject);
}
}
}
์ด๋ฌ์ผ ํด์ฃผ๊ณ ๊ทธ ํด๋ฆญ๋ ? ์ค๋ธ์ ํธ์ Basic ์ด๋ผ๋ ์คํฌ๋ฆฝํธ์
public void Flag()
{
Debug.LogFormat("์ฑ๊ณต์ด๋?");
}
ํด์คซ์ ๊ทผ๋ฐ NullReferenceException: Object reference not set to an instance of an object ๋ผ๊ณ ์ค๋ฅ๋๋๋ฐ
์ด๊ฒ ๊ฒ์์ค๋ธ์ ํธ๊ฐ ์ฐ๊ฒฐ์ด์๋์ ๊ทธ๋ ๋ค๋๋ฐ ํน์ ์ ๊ทธ๋ฐ์ง๋ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์๋ ์์ฃ ์จ์์ด? ๋ดํผ์ ๋์ ๊บผ๋ ค์๋ ์๊ธฒ์ใ ฃ๊ฐ๋ฐ..
๊ทธ๋๋ ์ด์ ๊ฒ์์ค๋ธ์ ํธ ๋ด์์ ๋น์ฉ๋ฌด์ํ๊ณ ๋ ์๋ ํ ๋ ค๋๊ฑฐ ํ ์์์๊บผ๊ฐ๊ธดํ๋ค ใ ใ ์ฌํผ hit.collider.gameObject ๊ฐ ๊ทผ๋ณธ์์ด
ใ ๊ฐ์ด ์ณ๋ ผ๊ฑด๊ฐํด์ ๊ฑ ๋์คํธ๋ก์ด๋ก ํด๋ดฃ๋๋ฐ ์์ด์ง๋๊ฑด ์ ์์ด์ง๋๋ฐ ์ ์ฐ๊ฒฐํด์ ์คํฌ๋ฆฝํธ์ ์ฝ๋๋ ๋ชป๋ถ๋ฌ์ค๋์ง ๋ชจ๋ฅด๊ฒ์ ใ ใ ใ
์ฌํผ๋ ์ด์ข ๋ ๋์์ฃผ์๋๋ฐ์ .. ๊ณ์ ์ง๋ฌธ๊ธ ์ฌ๋ ค์ ใ ใด ํํ๊ฐ๊ธดํ๋ฐ ๋๋ฆ ํ๋ฃจ๋์ ํด๋ฉ๋ค๊ฐ ์กธ๋ ค์ ์์ผ๊ฒ๋ฐ ์ถ์๋ ์ง๋ฌธ๊ธ ์ฌ๋ฆฌ๊ณ ์๋๊ฑฐ๋
๊ณฑ๊ฒ๋ด์ฃผ์๋๋ฐ์ ~
GetComponent <์คํฌ๋ฆฝํธ์ปดํฌ๋ํธ>().Flag () ์ด๋ ๊ฒ ํด์ผ์ง
GameObject.Find("target").GetComponent & iterator;Basic & GetType;().Flag(); ์ด๋ ๊ฒ์? ์ผ๋จ ๋นจ๊ฐ์ค ์ซ์ซ ๊ธ๊ธฐ๋๋ฐ ๊ฒ์ํด๋ ์ ์๋์์๊ทธ๋ฐ๋ฐ ํน์ ์ค๋ช ์กฐ๊ธ๋ง ํด์ฃผ์๋ฃป์์ผ์ธ์ ?
์ด๊ฑด ๋ฌด์จ ๋ฑ์ ๊ฐ์ ์ฝ๋์ผ; ์ํค๋๋๋ก๋ง ์ ์ผ๋ฉด ๋ ๊ฑธ ๋๋ฉ๋๋ก ์จ๋๊ณ ๋ ๋๋ ๋๊ฐ์ด ์ณค์ด ์ด์ง๋ ใ ใ ใ ใ ใ ใ .getcomponent<ํ๋๊ทธ ๋ค์ด์๋ ์คํฌ๋ฆฝํธ ์ด๋ฆ>().flag() ํ๋ผ๊ณ ๋ ์ ์ - dc App
๋ ํ๋ฐ ๊ธฐ์ด๋ถํฐ ์ข ์๋ก๋ฐฐ์๋ผ ใ ใ ์์ ์ด๋ฉ๋์๋ ๊ธฐ์ด๋ฅผ ๋ชฐ๋ผ ;์ด๊ฒ๋ ์ง๋ฉ๋๋ก ๋ถ์ด๊ณ ๋ญ์ง ์์ง๋ ๋ชจ๋ฅด๋ ๋ฉ์๋ ์จ์ฌ๋ผ๊ณ - dc App
๊ฑ ๋๋ค ์ค๋ฅ๋จ๊ณ ์ ๊ฒ ์๋์ผ๋ก ๋ฐ๋๊ธธ๋ ์ค์ฌ์ ์ด์ค .. ๊ทผ๋ฐ ๋๋ค ์ค๋ฅ๋จ๋๋ฐ ์ด์ผํจ?
๋์ ๋ณ์ ์ฌ์ดํธใ ใ ใ ๋ชจ๋ฐ์ผ์์ ์ธ๋๋ ๋ชฐ๋๋๋ฐ ๊บพ์ธ๊ดํธ๊ฐ <๋ก ๊นจ์ ธ์ ๋์ด ํ ํ๋ฆฟ ์ธ๋ ์ฐ๋ ๊บพ์ธ๊ดํธ ์์์ ๊ทธ๊ฑฐ ์จ์ฃผ๋ฉด ๋
??ใ ใ ใ ใ .. ๋ญ๊ฐ ์ด์ํ๋คํ๋๋ฐ ์ ๊ฑฐ ์ฎ๊ฒจ์ ๋๋ค๊ณ ์ธ๋ฐ์์ด ์์ํ๊ฒ ๋์ฌ๋ ผ๊ฑฐ ์ง์ด๋ค๊ณ ์ง์ฐ๋ค ์๋ชป์ง์ด๋ฏ ์๋ ์ฝ๋๊ฐ GameObject.Find("target").GetComponent<Basic>().Flag(); ์์ด์ค ์ธ๋ฏธ์ฝ๋ก ์ง์ฐ๋ฉด ์ธ๋ฏธ์ฝ๋ก ํ์ํ๋ค ๋จ๊ณ ๋ถ์ด๊ณ ์คํํด์ ์ค๋ฅธ์ชฝ๋ฒํผ ๋๋ฅด๋ฉด NullReferenceException: Object reference not set to an instance of an object ๋จ๋๋ฐ ํน ํด๊ฒฐ์ฑ ์์ธ์ ใ ?..
๋ฐ์ฟ // ๋์ ๋ญ๋ณด๊ณ ์ง์ ํ๋๊ฑฐ์์ฌ ใ ?..
์์ ๋๊ฐ ๊ธ ์ผ๋ค ์ ๊ฑฐ ๋ณด๊ณ ๋ฐ๋ผํด ๋์๊ฐ ๋ณ์ ์ด๋ผ ๊ธ ๋ฐ๋๊ฒ ๋ ๋๊ฐ ๊ธ ์ง์ ์ด์ค;; ์๋ฆฌ์๋ฆฌ
์ ๋ ๊ฒ ์ฝ๋ ์ง๋ฉด ๋น์ฐํ ๋ ํผ๋ฐ์ค ์ค๋ฅ ๋จ์ง Find ๋ผ๋ ํจ์๋ ํด๋น ์ฌ์ ์กด์ฌํ๋ ์ด๋ฆ์ ๊ฐ์ง ์ค๋ธ์ ํธ๋ฅผ ์์นํ๋ ํจ์๋ค. ๋๊ฐ ์ ์ธํ target์ new GameObject()๋ก ์ค์ ์ฌ์ ์ฌ๋ฆฌ์ง ์์๊ธฐ ๋๋ฌธ์ Find๊ฐ ์ฐพ์ง๋ฅผ ๋ชปํ๋ ๊ฑฐ์ raycast๋ก ํ ๊ฑฐ๋ฉด ์ ๋ ๊ฒ ํ๋๊ฒ๋ณด๋ค๋ ๊ทธ๋ฅ Find๋ถ๋ถ ๋นผ๊ณ target.Getcomponent~ ์ด๋ฐ์์ ๋ฌธ๋ฒ์ผ๋ก ํ๋๊ฒ ๋์๊ฑฐ์ ์๋๋ฉด target์ GameObject๋ผ๋ ํด๋์ค๋ก ์ ์ธ๋ ๋ ํผ๋ฐ์ค๊ธฐ๋๋ฌธ์ hit.gameobject๋ผ๋ ๋๊ฐ ํด๋ฆญ์ฒ๋ฆฌ๋ฅผ ํ ์ค๋ธ์ ํธ๋ฅผ ๋ด๋ ๋ ํผ๋ฐ์ค๊ฐ ๋๋๊ฑฐ์ Find๋ ํด๋น ๊ฒ์์ค๋ธ์ ํธ์ ๋ ํผ๋ฐ์ค๋ฅผ ์ฐพ๊ธด ํ์ง๋ง ์ฌ์ ์ค์ ์กด์ฌํ๋ ์ค๋ธ์ ํธ์ฌ์ผํ๋ ์ ์ ์กฐ๊ฑด์ด ์์