triggerstay ์์ ์ธ์ํ๋ ์๊ฐ๋๊ฐ ์ฝ 1์ด์ ๋์ธ๋ฐ 1์ด ์ดํ์๋ fํค๋ฅผ ์๋ง ๋๋ฌ๋ debug.log ์ฒ๋ฆฌ๊ฐ ์๋ผ์ ์กฐ๊ธ์ฉ ์์ง์ฌ์ค์ผ ํธ๋ฆฌ๊ฑฐ ์ฒ๋ฆฌ๊ฐ ๋๋๋ผ๊ณ
ํน์ ํ๋ ์ด์ด๊ฐ ๊ฐ๋งํ ์์ด๋ ํด๋น ํธ๋ฆฌ๊ฑฐ ๋ด์ ์์ผ๋ฉด ์ง์์ ์ผ๋ก ํธ๋ฆฌ๊ฑฐ์ฒ๋ฆฌ๋ฅผ ๊ณ์ ํ ์ ์๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ์์๊น?
์๋๋ ํ์ฌ ์ฝ๋
void OnTriggerStay2D(Collider2D collision)
{
if (Input.GetKey(KeyCode.F) && collision.gameObject.CompareTag("Player"))
{
Debug.Log("๋จ์๋ฅผ ์ ์ํ์ต๋๋ค");
}
Invoke(nameof(OnTriggerStay2D), 1f);
}
์คํ ์ค๋ฒํ๋ก์ฐ์์ ๊ฒ์ํด๋ณด๋๊น ์ธ๋ณดํฌ ์ด์ฉํ๋ฉด ๋๋ค๊ธธ๋ ์ธ๋ณดํฌ๋ฅผ ํตํด์ ๋ฐ๋ณตํด๋ดค๋๋ฐ ํธ๋ฆฌ๊ฑฐ ์ฒดํฌ ์์ฒด๋ฅผ ๋ฐ๋ณตํ๋๊ฒ ์๋๋๋ผ๊ณ ..
ํ๋ ์ด์ด๊ฐ ํธ๋ฆฌ๊ฑฐ ์ฒดํฌ๋ฐ์ค ์์์ ์ฅ์๊ฐ ๊ฐ๋งํ์๋๋ผ๋ fํค๋ฅผ ๋๋ฅด๋ฉด ์ธ์ ๋ ์ง ์ debug.log๊ฐ ๋ฐ์์๊ฒ ๋ง๋ค๊ณ ์ถ์๋ฐ ์ด๋ป๊ฒ ํด์ผํ ์ง ๊ฐ์ด ์์กํ๋ค..
--์์
ํ์ฌ ๋ฌธ์ ๊ฐ ๋๋ ๋ถ๋ถ
10ํ ์ดํ๋ก๋ ๋์ด์ ์ฒดํฌ ๋ก๊ทธ๊ฐ ๋จ์ง ์์
์ํ๋๊ฒ : ์ ์์์ ๊ฐ๋งํ ์๋๋ผ๋ ๊พธ์คํ ์ฒดํฌ๊ฐ ๋จ๋๊ฒ
private void OnTriggerEnter2D(Collider2D collision)
{
if (Input.GetKey(KeyCode.F) && collision.gameObject.CompareTag("Player"))
{
Debug.Log("๋จ์๋ฅผ ์ ์ํ์ต๋๋ค");
}
}
void OnTriggerStay2D(Collider2D collision)
{
Debug.Log("์ฒดํฌ");
//if (Input.GetKey(KeyCode.F) && collision.gameObject.CompareTag("Player"))
//{
// Debug.Log("๋จ์๋ฅผ ์ ์ํ์ต๋๋ค");
//}
////Invoke(nameof(OnTriggerStay2D), 1f);
}
void OnTriggerExit2D(Collider2D collision)
{
if (Input.GetKey(KeyCode.F) && collision.gameObject.CompareTag("Player"))
{
Debug.Log("๋จ์๋ฅผ ์ ์ํ์ต๋๋ค");
}
//Invoke(nameof(OnTriggerStay2D), 1f);
}
์ด๋ฅผ ์ํ ์ฝ๋
stay2d๋ถ๋ถ์ ๋จ์๋ฅผ ์ ์ ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌํ๊ณ ์ฒดํฌ๊ฐ ๋ช๋ฒ ๋จ๋์ง ํ์ธํ์.
๋ง๊ธ์์ ์ ๋ณด๋ฐ์ ๋ฐฉ๋ฒ = bool ์ ์ธํ enter์ true exit์ false
๊ทธ ํ ์ ๋ฐ์ดํธ์์ true ๋์ ์ฒ๋ฆฌํ๊ธฐ
์์ 2
public class Hint1 : MonoBehaviour
{
bool checksum;
Collider2D col;
void Start()
{
col = GetComponent<Collider2D>();
}
void Update()
{
if(checksum)
{
Debug.Log("์ฒดํฌ");
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
checksum = true;
Debug.Log(checksum);
//if (Input.GetKey(KeyCode.F) && collision.gameObject.CompareTag("Player"))
//{
// Debug.Log("๋จ์๋ฅผ ์ ์ํ์ต๋๋ค");
//}
}
void OnTriggerStay2D(Collider2D collision)
{
//Debug.Log("์ฒดํฌ");
//if (Input.GetKey(KeyCode.F) && collision.gameObject.CompareTag("Player"))
//{
// Debug.Log("๋จ์๋ฅผ ์ ์ํ์ต๋๋ค");
//}
////Invoke(nameof(OnTriggerStay2D), 1f);
}
void OnTriggerExit2D(Collider2D collision)
{
checksum = false;
Debug.Log(checksum);
//if (Input.GetKey(KeyCode.F) && collision.gameObject.CompareTag("Player"))
//{
// Debug.Log("๋จ์๋ฅผ ์ ์ํ์ต๋๋ค");
//}
//Invoke(nameof(OnTriggerStay2D), 1f);
}
ํ์ฌ ์ ๋ฐ์ดํธ์์ ์ฒดํฌ๊ฐ ๋๊ฒ ์์ฒด๋ ํ์ธํจ
์ด์ ์ ์ํ์์ ๋ฟ์ธ ๋์์ด ํ๋ ์ด์ด ํ๊ทธ๋ฅผ ๋ฌ๊ณ ์๋ ๋ฌผ์ฒด๊ณ fํค๋ฅผ ๋๋ ์๋ ์ํธ์์ฉ์ด ๋์ด์ผํ๋๋ฐ
๊ตฌ์ํ ๋ฐฉ๋ฒ์
bool checksum;
Collider2D col;
void Start()
{
col = GetComponent<Collider2D>();
}
void Update()
{
if(checksum)
{
if(Input.GetKey(KeyCode.F))
{
Debug.Log("์ฒดํฌ");
}
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
checksum = true;
Debug.Log(checksum);
//if (Input.GetKey(KeyCode.F) && collision.gameObject.CompareTag("Player"))
//{
// Debug.Log("๋จ์๋ฅผ ์ ์ํ์ต๋๋ค");
//}
}
void OnTriggerStay2D(Collider2D collision)
{
//Debug.Log("์ฒดํฌ");
//if (Input.GetKey(KeyCode.F) && collision.gameObject.CompareTag("Player"))
//{
// Debug.Log("๋จ์๋ฅผ ์ ์ํ์ต๋๋ค");
//}
////Invoke(nameof(OnTriggerStay2D), 1f);
}
void OnTriggerExit2D(Collider2D collision)
{
checksum = false;
Debug.Log(checksum);
//if (Input.GetKey(KeyCode.F) && collision.gameObject.CompareTag("Player"))
//{
// Debug.Log("๋จ์๋ฅผ ์ ์ํ์ต๋๋ค");
//}
//Invoke(nameof(OnTriggerStay2D), 1f);
}
--ํด๊ฒฐ
์์ ์ฒจ๋ถํจ.ย ํด๋น ์์ญ์์ ์ค๋ ๊ฐ๋งํ ์์ด๋ ์ธ์ ๋ ์ํธ์์ฉ ํ ์ ์๊ธธ ๋ฐ๋ฌ์
๊ทผ๋ฐ ๋ด๊ฐ ์ ๊ทผ ์์ฒด๋ฅผ ์๋ชปํจ. ์ํธ์์ฉ์ ํ๊ธฐ ์ํด์๋ ํธ๋ฆฌ๊ฑฐ ์ฒดํฌ๊ฐ ํ์๋๊น stay๋ฌธ์ ๋ฃจํ์ํค๋ฉด๋๊ฒ ์ง? ํ๋ ์๊ฐ์ ์ฐพ์๋ดค์ผ๋ย
invoke๊ฐ์๊ฑธ๋ก ๋ฐฑ๋ ํด๋ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ์๋์ด
์ด๋ ๋ง๊ธ๋ก ํ๋ถ์ด enter๊ณผ exit์ bool๋ก ์ฒดํฌ๋ฐ๊ณ update๋ก ๋๋ ค๋ผ๋ ๋ง์ ๋ณด๊ณ ํด๋ดค๋๋ฐ ์ ํํ ์ํ๋๋์์ด ์คํ๋จ
triggerenter, stay, exit์์ ๋ง์ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ๋ณด๋ค๋ ๊ฐ๋จํ ์ฒดํฌ๋ง ๋ฐ๊ณ ๋ณธ ๊ธฐ๋ฅ์ ์ ํจ์๋ฅผ ์ง์ ์ํํ๋ฉด๋๋จ๊ฑธ ๊นจ๋ฌ์์
๋ด๊ฐ ๋๋ฌด ๋ก์ง์ ์๋ชป์๊ฐํ๋จ ์๊ฐ์ด๋ค์๊ณ ๋์์ ์ข์ ๋ก์ง ํ๋ ๋ฐฐ์๊ฐ
์ง์ง ์๋ ค์ค ์ ๋๋ถ ๋๋ฌด ๊ณ ๋ง๊ณ ๋ง์๋ฌด๊ฐํ๊ธธ ๋ฐ๋๋ค. ๋ค์๊ฐ๊ฐ๋ ๋๋ ์๊ธฐ๋ง ํ๊ณ ํด๊ฒฐ ๋ชปํ๊ณ ์์๋๋ฐ ๋๋ถ์ ํ๋ฐฉ์ ํด๊ฒฐํ๋ค.
์ง์ง ๊ณ ๋ง๋ค.ย
enter exit ์ boolean ๊ฐ ์ค์ ๊ทธ๊ฑธ update ์ ๋ฐ์๋ฃ์ผ์
์กฐ๊ธ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช ํด์ค์ ์์๊น? ๊ฐ์ด ์ ์์์ ์ดํดํ๊ฑธ๋ก bool checksum; ํ๋ ์ ์ธํด์ ontriggernenter2d์ checksumํ๋๋ฅผ true๋ก, exit์ false๋ก ๋ฃ์ผ๋ผ๋ ๋ง ๊ฐ์๋ฐ ์ ๋ฐ์ดํธ์๋ ๋ญ ์ง์ด๋ฃ์ผ๋ผ๋๊ฑด์ง ์ดํด๋ฅผ ๋ชปํด์ ใ ใ
์ ์ดํดํ๋ค ์ด์ update์ if(checksum) ํ๋ฉด ๋ผ
๊ทผ๋ฐ stay๊ฐ์ด ๋ณํ๋๊ฑฐ๋ ์ํฅ์ด ์์ด? ์ผ๋จ ๋ณธ๋ฌธ๋ด์ฉ ์์ ํ๊ฑฐ ํ๋ฒ ๋ด์ค์ ์์?
enter์ exit์ ํ๋ ์ด์ด์ธ์ง ํ์ธํ ํ bool๊ฐ๋ง ์ค, ์ ๊ธฐ์ input ๋ฐ๋๊ฑฐ ์๋
Update๋ฌธ ํ๋ ์ด์ด ๋ฒ์์์ ๋ค์ด์จ์ง ํ์ธํ๊ธฐ ์ํด bool๊ฐ์ ์ฃผ๊ณ ๊ฑฐ๊ธฐ์ if(keycode.F) ํ๋ฉด ๋ ๊ฑฐ์ผ
๋ค์ ํ๋ฒ๋ง ๋ ์ฒดํฌํด์ฃผ๋ผ ๊ตฌ๋ํ์ ๊ฒฐ๊ณผ ๋งํ ๊ฒ
๊ณ ๋ง๋ค! ์ง์ง ๊ณ ๋ง๋ค ๋๋๋ถ์ ๋๋ ์๋ ๋ฌธ์ ํด๊ฒฐํ๋ค ์ง์ง ๋๋ฌด ๊ณ ๋ง๋ค ๋๊ฐ์ ์ฐฉํ ์ฌ๋๋ค ๋์ ๋ง์๊ฑฐ ๋ฐฐ์ ๋ค ๋ด๊ฐ ๋๋ฌด ์ด๋ ต๊ฒ ์๊ฐํ๋๋ณด๋ค ์ง์ง ๊ณ ๋ง๋ค
์ ๋์ ๋คํ์ด๋ค ์์ใ ฃ
๊ธ๋ด์ฉ ์์ ํ๊ณ ์ด์ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ์ง๋ง์ ์ง๊ธ ๋น์ฅ์ ๊ณ ๋ฏผํ๋๊ฑฐ ํด๊ฒฐํด์ ๋๋ฌด ๊ธฐ๋ถ์ข๋ค ใ ใ ์ด์ฐธ์ ์กฐ๊ธ ๋ ์์ ํ๋ค๊ฐ ์๋ ค๊ณ ใ ใ ๋๋ ๋จธ๋ฆฌ์ ๋ ๊ฒ ์ข ์๊ธฐ๋ฉด ๋์ฒ๋ผ ๋ค๋ฅธ ์ง๋ฌธํ๋ ์ฌ๋๋ค ๋ต๋ณ ์ด์ฌํ ํด์ค์ ์๋๋ก ๋ ธ๋ ฅํ ๊ฒ