using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class bandit_prac : MonoBehaviour
{
ย ย public Animator animator;
ย ย public Transform attackPoint;
ย ย public LayerMask enemyLayers;
ย ย public float attackRange= 0.5f;
ย ย public int attackDamage= 40;
ย ย void Update()
ย ย {
ย ย ย ย if (Input.GetKeyDown(KeyCode.Space))
ย ย ย ย {
ย ย ย ย ย ย Attack();
ย ย ย ย }
ย ย }
ย ย void Attack()
ย ย {
ย ย ย ย //play an attack animation
ย ย ย ย animator.SetTrigger("Attack");
ย ย ย ย Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPoint.position, attackRange, enemyLayers);
ย ย ย ย foreach(Collider2D enemy in hitEnemies)
ย ย ย ย {
ย ย ย ย ย ย enemy.GetComponent<Enemy>().TakeDamage(attackDamage);
ย ย ย ย }
ย ย }
ย ย void OnDrawGizmosSelected()
ย ย {
ย ย ย ย if (attackPoint== null)
ย ย ย ย ย ย return;
ย ย ย ย Gizmos.DrawWireSphere(attackPoint.position, attackRange);
ย ย }
}
์ฝ์ ์ฐฝ์๋
NullReferenceException: Object reference not set to an instance of an object
bandit_prac.Attack () (at Assets/bandit_prac.cs:34)
bandit_prac.Update () (at Assets/bandit_prac.cs:21)
์ด๋ ๊ฒ ๋์ค๋๋ฐ ๋ญ๊ฐ ๋ฌธ์ ์ธ๊ฐ์?? ์ด์ ๋ฐค๋ถํฐ ๊ณ์ ์ฐพ์๋๋ฐ๋ ๋ต์ด ์๋์ค๋ค์
Attack() ๋ฉ์๋์ 34๋ฒ์งธ ์ค ์ฝ๋ ๋ณ์์ค ํ๋๊ฐ ํ ๋น์ด ์๋๊ฑฐ์
enemy.GetComponent().TakeDamage(attackDamage); // enemy ๊ฒ์ ์ค๋ธ์ ํธํํ Enemy ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋๊ฑฐ ๊ฐ์
ํผ๋ธ๋ฆญ ํด๋์ค Enemy์๋๋ฐ ์ ์ด๋ฌ์ฃ ใ ใ
์ ์ค ์์๋ค๊ฐ Debug.Log(enemy.GetComponent() == null ); ์ฐ์ด๋ด
Assets\bandit_prac.cs(34,29): error CS0411: The type arguments for method 'Component.GetComponent()' cannot be inferred from the usage. Try specifying the type arguments explicitly ์ด๋ ๊ฒ ๋์์
์๋๋ฏธ ์์ ์ปดํฌ๋ํธ ์๋ฃ์๊ฑฐ ์๋?
์ง๊ธ enemy์์ ์๋ฌด๊ฒ๋ ์์์ ๋ฐ์์จ enemy์ ์ปดํฌ๋ํธ๊ฐ ์๊ฑฐ๋ ๋ฒ์๋ฅผ ์๋ชป ์ง์ ํ๊ฑฐ์
enemy.GetComponent() ์ฌ๊ธฐ ์๊ฒ๋ ์์ด์ ๊ทธ๋ฐ๊ฐ์??
foreach๊ฐ ์๋ํ์ผ๋ ๋ด์๊ฐ์๋ Enemy๋ฅผ ์ถ๊ฐ ์ํ๊ฑฐ์
์ ์ด๊ฑฐ.. if(enemyGetComponent()) ์ด๊ฑฐ ์ถ๊ฐํ๋ฉด ์๋ํ ๊ฑฐ์ ํ์์๋ ๋์๊น์ง ๊ฐ์ ธ์์ ๋๋๋ฏ
"์ ํํ if(enemy.GetComponent()) enemy.GetComponent().TakeDamage(attackDamage);"
์ด๊ฑฐ ๋ถํธ๊ฐ ์๋๋ค ๊ดํธ ์ด๊ณ ์์ Enemyํด๋์ค ๋ฃ์ด์ผ ํ๋๊ฑด ์์์
foreach(Collider2D enemy in hitEnemies) { if (enemyGetComponent()) enemy.GetComponent().TakeDamage(attackDamage); } ์ด๋ ๊ฒ ํ๋ฉด ๋๋์..? ๋ฌธ์กํฉ๋๋ค
enemy์ค์ Enemy ์ปดํฌ๋ํธ ์๋ถ์ ์ ๊ฐ ์๋๋ฏ ๋๊ฒ์ฌ ํ๊ณ TakeDamage ํธ์ถํ์