일단 플레이어가 몬스터를 공격하는 것에 관한 질문이구용
공격 방법은 OverlapCircleAll로 범위 안에 든 적 몬스터를 인식하고, 마우스를 클릭하면 걔네들이 체력이 1씩 닳도록 했어요
(사실은 유투브 보고 따라한거임)
여기서 보시면 공격과 공격 사이에 timeBtwAttack이라는 변수를 둬서 딜레이를 계산하는데요
이 딜레이 변수가 처음 공격을 할 때도 계산이 되고 있다는게 문제예요
처음 공격을 시작할 때는 클릭하자마자 공격이 되게끔 딱 하고싶은데
지금 만약 timeBtwAttack이 1초라고 치면 마우스를 1초동안 누르고있어야 애들이 체력이 따른답니다.
그래서 저 if문에 bool 변수를 줘서 공격을 시작할 때랑 공격하는 도중을 구분하고싶은데 어떻게 해야할지 도저히 안떠올라요..ㅠ
그니깐, 처음 공격을 시작할 때는 바로 공격을 하게 하고 공격을 하는 도중에는 마우스를 꾹 누르고 있을테니깐 그때는 공격과 공격 사이에 딜레이를 주고 싶단거죠.
참고로 원래는 GetMouseButtonDown으로 하고싶었는데, 걔도 역시나 timeBtwAttack이라는 저 변수때문에 잘 안되더라고요. 혹시나
GetMouseButtonDown으로 할 수 있는 방법을 알려주신다면 너무나도 감사할 것 같아요.
----------------------------------------------------------------------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMeleeAttack : MonoBehaviour {
private float timeBtwAttack;
public float startTimeBtwAttack;
public Transform attackPos;
public LayerMask whatIsEnemies;
public float attackRange;
public int damage;
void Start () {
}
void Update()
{
Debug.Log(timeBtwAttack);
}
void FixedUpdate () {
if (timeBtwAttack <= 0)
{
if(Input.GetMouseButton(0))
{
Collider2D[] enemiesToDamage = Physics2D.OverlapCircleAll(attackPos.position, attackRange, whatIsEnemies);
for (int i = 0; i
{
if (enemiesToDamage[i].GetComponent())
enemiesToDamage[i].GetComponent().TakeDamage(damage);
else if (enemiesToDamage[i].GetComponent())
enemiesToDamage[i].GetComponent().TakeDamage(damage);
}
}
timeBtwAttack = startTimeBtwAttack;
}else
{
timeBtwAttack -= Time.deltaTime;
}
}
void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(attackPos.position, attackRange);
}
}
----------------------------------------------------------------------------------
사실 이런 bool변수나 if문에 관한 생각은 엄청 기본적인 요소인 것 같은데, 프로그래밍을 이론으로만 공부하고, 실제로 코딩을 많이 안해봤어서
정작 코드를 짜려고 하면 어떻게 짜야 할지 생각이 하나도 안나요ㅠㅠ
앞으로 계속 하다보면 좀 괜찮아지겠지만.. 자꾸 이렇게 물어보고 해결하면 안 늘것같아서 그것도 그것대로 걱정이네요..
GetMouseButtonUp으로 작동하는 기능을 넣어서, 마우스를 떼면 timeBtwAttack을 -1로 주던가 하면 되지 않을까? 그러면 처음 1번 공격한 뒤에 startTimeBtwAttack으로 초기화될 테니까.
GetMouseButtonDown에 넣어야 하지 않을까.