๊ฐ์๋ฅผ ๋ณด๋์ค์ static์ ์ฌ์ฉํด์ ํ๋ ์ด์ด์ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด์ ์ผ์ ๊ฑฐ๋ฆฌ ์์ ๋ค์ด์ฌ์ ๋ฐ๋ผ๊ฐ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค๋๊ตฐ์
์ ๊ฐ ์๊ธฐ๋ก๋ static์ ์ด์ฉํ๋ฉด ์ ์ ์ผ๋ก ๋์ ๋ชจ๋ ์คํฌ๋ฆฝํธ์์ ์ด static์ผ๋ก ์ ์ธ๋๊ฑด ๊ทธ ํด๋์ค์ ์์๋๋๋ก ์ง์ ํ๋ ํ์ ์๋ผ๊ณ ํ๋๊ตฐ์
๊ทธ๋ฐ๋ฐ ์ ๊ฐ ๋ฑ ๊ทธ์ ๋๋ฐ์ ๋ชฐ๋ผ์ ๊ทธ๋ฐ๋ฐ ์์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์งฐ๋์ง ์ข ์์ธํ ์๋ ค์ฃผ์ค๋ถ์์ผ์ ๊ฐ์?
์ ๊ฐ ๊ถ๊ธํ๋ถ๋ถ์ ์ฝ๋๋ง ๋ฝ์์ต๋๋ค
ํ๋ ์ด์ด ์คํฌ๋ฆฝํธ์์
ย public static PlayerController instance;
์ ์คํฌ๋ฆฝํธ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyController : MonoBehaviour
{
ย ย public Rigidbody2D theRD;
ย ย public float movespeed;
ย ย public float rangeToChasePlayer;
ย ย private Vector3 moveDirection;
ย ย // Start is called before the first frame update
ย ย void Start()
ย ย {
ย ย ย ย ย
ย ย }
ย ย // Update is called once per frame
ย ย void Update()
ย ย {
ย ย ย ย if (Vector3.Distance(transform.position, PlayerController.instance.transform.position)
ย ย ย ย {
ย ย ย ย ย ย moveDirection = PlayerController.instance.transform.position - transform.position;
ย ย ย ย }
ย ย ย ย else
ย ย ย ย {
ย ย ย ย ย ย moveDirection = Vector3.zero;
ย ย ย ย }
ย ย ย ย moveDirection.Normalize();
ย ย ย ย theRD.velocity = moveDirection * movespeed;
ย ย }
}
๋จผ์ public static PlayerController instance; ์์ ์ ์ ์ธ PlayerController ํด๋์ค๋ฅผ instance ๋ผ๊ณ ์ด๋ฆ์ ํ ๋นํจ. ๊ทผ๋ฐ ์์ง instance๊ฐ ์ด๋ค PlayerController ํด๋์ค๋ ํ ๋น๋ฐ์ง ์์ ์ํ์ฌ์ ๋น์ด์์. ๊ทธ๋์ ์ฌ๊ธฐ์ ๊ตฌ์ฒด์ ์ธ PlayerController ํด๋์ค๋ฅผ ๋ฃ์ด์ฃผ๊ธฐ ์ํด Awake ์์ instance = this ๋ผ๊ณ ํด์ค. ์ฌ๊ธฐ์ this ๋ ์ง๊ธ ํธ์งํ๊ณ ์๋ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํด. ์ด๋ ๊ฒ ํ๋ฉด PlayerController์ instance ์ ๊ตฌ์ฒด์ ์ธ PlayerController ํด๋์ค๊ฐ ๋ค์ด๊ฐ
ใณํด์ ๋ง์ ๋์๋ฌ์ต๋๋ค
์ ๊ฑฐ ๊ทธ๋ฅ ์ฑ๊ธํคํจํด ๊ฐ๋จํ๊ฒ์ด๊ฑฐ์. ์๋ ๋ณดํต์ private๋ก instanceํ๋ ๋ง๋ค๊ณ ํธ์ถ์ public Instance{return instance}๋ก ํ๋๋ฐ(์ ๊ธฐ์ ์์ผ๋ฉด ์์ฑํด์ ๋ณด๋ด์ฃผ๊ณ ์ค๋ณต๋๋ฉด ์ญ์ ํ๋๊ตฌ๋ฌธ ๋ฃ์ด์ค) ๋ณ ๋ฌธ์ ์์๊ธฐ๋ฉด ์ ๋ ๊ฒ๋ ์ฐ๋๊ฑฐ ๋ณธ๋ฏ
ใณํด์ ๋ง์ ๋์๋ฌ์ต๋๋ค
new๊ฐ ๋ญ์ง๋ ์๊ณ ?