-
Electric Attack 구현하기 ( +Overlap)Unity/제로부터 구현 2023. 12. 11. 18:01728x90
오늘의 구현
1. n명에게 전이되는 번개 공격 구현하기
순서
- VFX로 번개 이펙트 만들기
- 공격시작 이펙트 : 공격시 전류를 모아주는 이펙트
- 전류 이펙트 : 전류 생성
- 적을 탐색해 n명에게 번개 공격하기(Overlap)
1. VFX로 번개 이펙트 만들기
기존에 만들어 놓은 번개 이펙트를 응용해 하나는 캐스팅 이펙트, 하나는 공격 이펙트 두가지 이펙트를 만들어 줍니다.
두 이펙트를 프리팹으로 만들어주고 스킬을 시전했을때 캐스팅 이펙트를 instantiate 해주고, 정해진 카운트 만큼 번개가 전이 되면서 전이가 다 끝나면 캐스팅 이펙트가 페이트 아웃되게 만들 것 입니다.
공격 이펙트의 경우 4가지 위치값을 이용해 베지어 곡선을 설정하고 noise를 더해 전류처럼 보이게 만들 것 입니다.
2. 적을 탐색해 n명에게 번개 공격하기
번개 전이는 Physics.OverlapSphere()를 사용해 플레이어 주변에 구형태의 overlap을 만들어 적의 레이아웃을 감지해 콜라이더에 담아 해결할 것 입니다.
- Physics.OverlapSphere() 설정 , 물리 시뮬레이션에 기반한 작업을 수행하기 때문에 FixedUpadate 에 사용
private void FixedUpdate() { colliderArr = Physics.OverlapSphere(transform.position, 5f,lay) ; } scene에서 범위 확인 하기 위해 기즈모를 그려 확인 가능 private void OnDrawGizmos() { Gizmos.DrawSphere(transform.position, 5f); }
- enemy를 감지했을 경우에만 공격할 것이며, 가장 가까운 적부터 시작해 정해진 카운트만큼 번개 공격을 해줍니다.
IEnumerator ElectricArcActiveCo() { if(colliderArr.Length > 0) { //전류 시작 GameObject enemy = colliderArr[0].gameObject; GameObject electricSTRPrefeb = Instantiate(electricSTR, electricHolder.position, Quaternion.identity); electricSTRPrefeb.transform.parent = electricHolder; yield return new WaitForSeconds(1.5f); GameObject electricArc = Instantiate(electricArcFrepeb); //ElectricArcActiv 클래스 SetEnemy(시작지점,끝나는 지점) 설정. electricArc.GetComponent<ElectricArcActive>().SetEnemy(electricHolder.transform, enemy.transform); yield return new WaitForSeconds(electricSpeed); //elcAttackMaxCount(공격횟수)를 초과할 수 있으니 클램핑 해줍니다. int colliderClamp = Mathf.Clamp(colliderArr.Length, 0, elcAttackMaxCount); for (int i = 1; i < colliderClamp; i++) { GameObject newElc = Instantiate(electricArcFrepeb); newElc.GetComponent<ElectricArcActive>().SetEnemy(colliderArr[i - 1].transform, colliderArr[i].transform); yield return new WaitForSeconds(electricSpeed); } StartCoroutine(FadeOutScale(electricSTRPrefeb)); Destroy(electricSTRPrefeb,3f); } }
페이드 아웃
IEnumerator FadeOutScale(GameObject obj) { while( obj.transform.localScale.x > 0) { obj.transform.localScale -= new Vector3(fadeOutELectricSTRSpeed, fadeOutELectricSTRSpeed, fadeOutELectricSTRSpeed); yield return new WaitForSeconds(.1f); } obj.transform.localScale = Vector3.zero; }
완성
728x90'Unity > 제로부터 구현' 카테고리의 다른 글
(2D)Enemy 정해진 영역에서 반복 이동 시키기(+Blend Tree) (0) 2023.12.14 플레이어를 기준으로 n크기의 반지름을 가진 원의 접선 그리기. (0) 2023.12.13 A* 알고리즘을 사용한 길찾기 구현 (0) 2023.12.07 Editor 구현하기 (1) 2023.12.05 같은 맵 계속 반복 시키기(3D). (0) 2023.12.01 - VFX로 번개 이펙트 만들기