-
Notifications
You must be signed in to change notification settings - Fork 2
develop SkillFiringSystem
Seong Hyeok OH edited this page Jan 15, 2023
·
28 revisions
이론: 무기에 관한 세세한 내용을 구현 후 "Weapon"에 넣고, 캐릭터에 세세한 내용을 구현 후 "Character"에 구현 후 (여러 무기 캐릭터의 스크립트를 적용을 가져오기 위해 상위 스크립트로 묶기) -> "Weapon"과 "Character"에서 각각의 스탯을 가져와 "SkillFiringSystem"에 적용
private void Attack()
{
AttackCalculation(); //공격 관련 계산
for (int i = 0; i <= numberOfProjectiles; i++) //투사체 수만큼 발사하기
{
FireWeapon();
}
}
private void FireWeapon()
{
float timer = 0; //시간
float timediff = cooldown; //쿨타임
timer += Time.deltaTime; //시간 갱신
if (timer > timediff) //쿨타임 넘을 시
{
GameObject newobs = Instantiate(weapon.GetComponent().weaponType); //무기 로드
newobs.transform.position = new Vector2(character.GetComponent().Movement.x, character.GetComponent().Movement.y); //캐릭터 위치에 생성
transform.position = Vector2.right * projectileSpeed * Time.deltaTime; //오른쪽 벡터로 날아감
timer = 0; //시간 초기화
Destroy(newobs, duration); //지속 시간 지나면 삭제
}
if (OnTriggerEnter2D(weapon.GetComponent())) //무기가 몬스터와 부딪힘 감지
{
monster.GetComponent().Health -= damage;
if (monster.GetComponent().Health <= 0) //몬스터가 죽는다면
{
GameObject obj = Resources.Load("Object/Capsule"); //임펙트 등장
Destroy(obj, 1); //임펙트 등장 시간
}
}
}
bool OnTriggerEnter2D(Collider2D other)
//rigidBody가 무언가와 충돌할때 호출되는 함수로 Collider2D other로 부딪힌 객체를 받아옵니다.
{
if (other.gameObject.tag.Equals("Monster")) //부딪힌 객체의 태그를 비교해서 적인지 판단합니다.
{
//딜 계산 후 삭제
return false;
}
else { return true; }
}
//아래 계산을 한번에 하기
private void AttackCalculation()
{
DamageCalculation();
ProjectileSpeedCalculation();
DurationCalculation();
AttackRangeCalculation();
CooldownCalculation();
CalculateNumberOfProjectiles();
}
//데미지 계산
private void DamageCalculation()
{
damage = weapon.GetComponent().Damage * (1 + character.GetComponent().Damage / 100);
}
//투사체 수 계산
private void CalculateNumberOfProjectiles()
{
numberOfProjectiles = weapon.GetComponent().NumberOfProjectiles + character.GetComponent().NumberOfProjectiles;
}