์ ๊ฐ Enemy ์ธ tag๋ฅผ ๋ฌ๊ณ ์๋ ์ ๋ค ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ ์ผ์ ๊ฑฐ๋ฆฌ ์์ ๋ค์ด์ฌ์ ๊ณต๊ฒฉ๋ชจ์ ์ ์ทจํ๋ผ๊ณ ํ๋๋ฐ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ ๋ ์๊พธ ์์ ์์๋ ์ ๋ค ๋ค๋ก ๋ณด๋ด๋ ๊ทธ์ ๋ง ์ธ์์ ํ๋ค์ ใ ใ
๊ทธ์ ๋ฅผ ์ญ์ ์ํค๋ฉด ์ ์์ ์ผ๋ก ๋ฐ๋ก ๋ค์์๋ ์ ๋ฅผ ๊ณต๊ฒฉํ๊ธฐ๋ ํ๋๋ฐย ๋ ์์ Enemy ์ธ tag๋ฅผ ๋ฌ๊ณ ์๋ ์ ๊ฐ ์์ด๋ ๊ทธ๋ ๊ฒ ๋๋@@ ใ ใ ใ ใ
์ธ๋ ๊ฒ์๊ฐค๋ฌ๋ฆฌ ๊ณ ์๋๋ค์ ๋์์ด ํ์ํฉ๋๋ค ์ด๋ป๊ฒ ํด์ผ์ง ์ ๋๋ก ์ธ์์ ํ ๊น์?????
(์ฝ๋๊ฐ ์ข ์ง์ ๋ถํฉ๋๋ค ์ํด๋ถํ)
์ฐธ๊ณ ๋ก ์ ๊ธฐ ํ์๋ Enemy tag๋ฅผ ๋ถ์์ต๋๋ค ์ ์๋
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Dragon : MonoBehaviour
{
ย ย public GameObject Enemy;
ย ย public float Dis;
ย ย public float dspeed = 0.1f;
ย ย private Animator animator;
ย ย public GameObject U_dragon;
ย ย private Rigidbody2D zx;
ย ย public List FoundObjects;
ย ย public GameObject fireball_01;
ย ย public float shortDis;
ย ย public float H = 25.0f;
ย ย ย
ย ย // Start is called before the first frame update
ย ย void Start()
ย ย {
ย ย ย ย zx = GetComponent();
ย ย ย ย animator = GetComponent();
ย ย ย ย
ย ย }
ย ย // Update is called once per frame
ย ย void Update()
ย ย {
ย ย ย ย FoundObjects = new List(GameObject.FindGameObjectsWithTag("Enemy"));
ย ย ย ย shortDis = Vector2.Distance(U_dragon.transform.position, FoundObjects[0].transform.position);
ย ย ย ย
ย ย ย ย
ย ย ย ย if (shortDis > 7)
ย ย ย ย {
ย ย ย ย ย ย zx.transform.Translate(transform.right * dspeed);
ย ย ย ย ย ย animator.SetBool("Walk", true);
ย ย ย ย ย ย animator.SetBool("Attack", false);
ย ย ย ย ย ย animator.SetBool("Die", false);
ย ย ย ย }
ย ย ย ย if (shortDis<=7)
ย ย ย ย {
ย ย ย ย ย ย Fireball();
ย ย ย ย ย ย animator.SetBool("Walk", false);
ย ย ย ย ย ย animator.SetBool("Attack", true);
ย ย ย ย }
ย ย ย ย
ย ย }
ย ย void Fireball()
ย ย {
ย ย ย ย StartCoroutine(CreatFireball());
ย ย }
ย ย IEnumerator CreatFireball()
ย ย {
ย ย ย ย if (H== 25.0f)
ย ย ย ย {
ย ย ย ย ย ย Instantiate(fireball_01, U_dragon.transform.position, fireball_01.transform.rotation);
ย ย ย ย ย ย H = 0;
ย ย ย ย }
ย ย ย ย H++;
ย ย ย ย yield return null;
ย ย }
}
์ ๊ธฐ์๋์ H์์ >๋ก ๋์๋๊ฑด ์๋ชป ๋ถ์ฌ๋ฃ๊ธฐ๋์ ๊ทธ๋ฐ๊ฒ๋๋น
์ ๋ฐ ๋ฐฉ์์ด๋ฉด ๋ชฌ์คํฐ๊ฐ์ฒด๊ฐ u dragon์ด ์๋๋ผ ๋ค๋ฅธ๊ฐ์ฒด๋ฉด ์ธ์์ ๋ชปํ ํ ๋ฐ์.. - dc App
๊ตฌ๊ธ์ physics2d ์น์๊ณ ๊ทธ๊ฑธ๋ก ๊ตฌํํด๋ณด์ฌ์ด ์ด๋จ๊น์ - dc App
overlapcircle ๋งค์๋๋ฅผ ์ด์ฉํ๋ฉด ๋ ๋ฏ - dc App
๋ด์๊ฐ์ u dragon์ ์ ์ ์บ๋ฆญํฐ์
๊ตฌ๊ธ๋ง ํด๋ณด๋๊น
๋๋ต Collider2D dragon = Physics2D.OverlapCircle(U_dragon.transform.position, 1f, 7 << LayerMask.NameToLayer("AttackTarget")); ์ด๋ฐ์์ผ๋ก ์จ์ผํ ๊ฑฐ ๊ฐ์๋ฐ ์ ํํ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์๋ชจ๋ฅด๊ฒ ์ด ใ ใ ์ข๋ ๋์์ค์ฉ
์ฌ๊ธฐ์ ์ผ์ ๊ฑฐ๋ฆฌ์ ๋ค์ด์ฌ๋ ๊ณต๊ฒฉ๋ชจ์ ์ ๋ฐ๋์์ผ์ผ๋๋๋ฐ ํ์์์๋ ๊ฑท๋ค๊ฐ ๊ทธ๊ฒ ์๋์ฌ ใ ใ ใ ใ ใ ใ ใ ใ ใ ์ ๋ ๊ฒ ์ฝ๋ ์์ ์ฐ๋๊ฑด ๋ง์์??
์ ๋ค ์ ์ฒด ๋ค ๊ฒ์ฌํ๋๊ฒ ์๋๋ผ [0]๋ง ๊ฒ์ฌํ๊ณ ์์๋
๊ทผ๋ฐ [0]์๋๋ผ ๋น์๋๊ฑฐ๋ + ์ด๋ ๊ฒ ํค์๋์ผ๋ฉด ์ด๋ ๊ฒ: ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
์ค๋ฅ๋ ใ ใ ใ ใ ใ
Collider2D dragon = Physics2D.OverlapCircleAll(this.transform.position,1f); if(dragon.Length>0){for(int i=0;i<dragon.Lenght;i++){Collider2D temp = dragon[i]; if(temp.tag == "AttackTarget")}} ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด๋ ๋ฏ.. ์ ๊ธฐ ๋์์๋๊ฒ์ค ๊ตฌ๊ธ๋ง ์๋๋๊ฑด .Lengthํ๋๋ฟ์ธ๊ฒ๊ฐ์๋ฐ ๊ทธ๋ฅ ๋ฐฐ์ด์ ๊ฐฏ์๋ผ๊ณ ์๊ฐํ์ฌ ๋ ๋ฏ
๋ฑ ์ด๊ฑฐํ๋๋ง ์กฐ๊ธ ๋ ๋์์ค์ฌ ์ฌ๊ธฐ์ if(dragon>0์ด ์ ํ์ด ๋ญ๋งํ๋๊ฑฐ์ฃ ? for(int i=0;i<์ฌ๊ธฐ๋ ๋ ๊ฑธ๋ ค์ &๋ฌธ์๋ก ๋ฌ๊ฑฐ๊ฐ์๋ฐ ์๋๋ ๋ญ๋ผ๊ณ ํด์ผ๋์?
์ ์ฝ๋๊ฐ "AttackTarget"ํ ๊ทธ๋ฅผ ๊ฐ์ง ์ ์ ๋ฐ๊ฒฌํ๊ธฐ๊น์ง ์ฝ๋๊ณ , ๋ฐ๊ฒฌ ํ๋ ์ดํ๋ฌธ ๋ฐ์ผ๋ก ์ ์ผ์ฌ ๋จ.
์ฌ๋ํด ใ ใ ใ ใ ใ ๊ณ ๋ง์!!!!!!
๋ฑ ์ด๊ฑฐํ๋๋ง ์กฐ๊ธ ๋ ๋์์ค์ฌ ์ฌ๊ธฐ์ if(dragon>0์ด ์ ํ์ด ๋ญ๋งํ๋๊ฑฐ์ฃ ? for(int i=0;i<์ฌ๊ธฐ๋ ๋ ๊ฑธ๋ ค์ &๋ฌธ์๋ก ๋ฌ๊ฑฐ๊ฐ์๋ฐ ์๋๋ ๋ญ๋ผ๊ณ ํด์ผ๋์?
๋ฒ์๋ด์ ๋ค์ด์ค๋ ๋๋ค์ ๋ฆฌ์คํธ์ ์ ์ฅํด๋๋ค๊ฐ ๋น ์ ธ๋๊ฐ๋ฉด ๋ฆฌ์คํธ์์ ๋นผ๋๊ฒ๋ถํฐ ๋ง๋ค์ด๋ด๋ผ. ์ง๊ธ ์๋ฏธ์๋์ฝ๋๋ shortDis ๊ฑฐ๋ฆฌ๊ตฌํ๋ ์ฝ๋ํ์ค์ด ๋์ธ๊ฑฐ๊ฐ์๋ฐ - dc App
์์๋ ์ ์ด๋จ๋ฏ์ด if(dragon.Length) ์ด๊ฑฐ๊ณ dragon๋ฐฐ์ด์ ๊ฐฏ์๋ผ๊ณ ์๊ฐํ์ฌ ๋ ๋ฏ.. ์ดํด์๊ฐ๋ฉด ์ธ์ด ๊ธฐ์ด๋ฅผ ํ์ ์ผํ๊ณ , ์ดํดํ๊ธฐ์ซ์ผ์๋ฉด ๊ทธ๋ฅ ์๊ณ ๋ง๊ณ์ผ - dc App
for(i=0;i<dragon.Lenght - dc App