일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 후기
- 연습
- 스파르타내일배움캠프
- 게임분석
- 공부
- 나만의 견해
- 게임
- 뭐드라
- spritelibrary
- 게임 회사
- 게임용어
- 일상
- materialpropertyblock
- LookAt
- 컴포넌트
- 취업
- 스파르타내일배움캠프TIL
- 코딩
- 붕괴 스타레일
- 프로그래밍
- 내일배움캠프
- 원신
- spritemask2d
- 까먹기전에메모
- 점프
- 유니티
- 취미
- 붕괴스타레일
- 블렌더
- ag 내일배움캠프
- Today
- Total
덴바의 노트
내일배움캠프 19일차 TIL 본문
오늘의 키워드
- 다중 발사체 발사 구현
오늘은 다중 화살 발사 기능에 대해서 포스팅하고자 합니다.
이번 캠프 때, 가장 많이 보고 머리를 쥐어짜면서
이해하려고 노력했던 코드 또한 같이 해설해보고자 합니다.
다중 발사체 발사
다중 발사체 발사를 생각하면 뱀서류 게임에서 쉽게 볼 수 있습니다.
그 외에도 다양한 게임에서 다중 발사체 발사가 사용되지만
오늘은 일단 리그오브레전드의 애쉬 캐릭의 W 스킬을 예시로 설명해보겠습니다.
위 사진과 같이 애쉬는 총 11발의 다중 화살을 동시에 발사합니다.
다양한 방식이 있겠지만
제가 배운 방식은 아래와 같습니다.
먼저 마우스 클릭커의 위치를 중심으로 잡습니다.
그 후 해당 발사체 개수를 고려한 후 제일 아래의 각도를 MinAngle로 가정하고 계산해냅니다.
그 후 For문을 활용하여 아래부터 발사 후 발사체 공간 값 만큼 올려주면서 총 11발의 발사체를 발사하는 방식입니다.
코드는 아래와 같습니다.
// 최소 각도
float minAngle = -(numberOfProjectilesPerShot / 2f) * projectilesAngleSpace + 0.5f * rangedAttackSO.multipleProjectilesAngle;
for (int i = 0; i < numberOfProjectilesPerShot; i++)
{
float angle = minAngle + projectilesAngleSpace * i;
float randomSpread = Random.Range(-rangedAttackSO.spread, rangedAttackSO.spread);
angle += randomSpread;
CreateProjectile(rangedAttackSO, angle);
}
float minAngle = -(numberOfProjectilesPerShot / 2f) * projectilesAngleSpace + 0.5f *
rangedAttackSO.multipleProjectilesAngle;
최소의 각도를 구해주기 위해서는 먼저 총 발사체의 개수를 알아야 합니다.
그 후 해당 발사체의 절반의 값을 구해줘야 합니다.
그 이유는
다중 발사체를 발사할 때 애쉬의 궁처럼 마우스를 중심으로
위에 2개 아래 2개 이렇게 발사하기 때문에
최소 각도를 구할 때는 맨 아래의 값만 알면 되기 때문에
-(총 발사체 / 2) 를 해줍니다.
그 후 projectilesAngleSpace(발사체 사이 공간값)을 곱해주면
우리가 바라는 최저 각도가 구해지게 됩니다.
하지만 문제는 그 부분이 아닙니다.
제가 도저히 이해가 안갔던 부분이 있습니다.
그 부분이 바로 이 부분입니다.
+ 0.5f * rangedAttackSO.multipleProjectilesAngle;
rangedAttackSO.multipleProjectilesAngle은 projectilesAngleSpace와 동일합니다.
문제는 어찌하여 projectilesAngleSpace의 값에 *0.5f, 절반값을 더해줄 필요가 있는 것이냐 입니다.
이는 아직 시원하게 이해하지 못했지만, 어느 정도 이해한 바로는 아래와 같습니다.
저희가 Mathf.Atan 등을 사용하여 구한 각도는 위와 같은 각도이며
해당 각도를 토대로 발사하게 되면
위 삼각형 안에서 발사체가 발생하게 됩니다.
이를 방지하기 위해서 마우스 위치를 중심으로 위아래로 대칭되게 하기 위해서
0.5f * 공간 각도 값을 더해준다고 합니다.
나머지 코드는 MinAngle을 가지고
개수만큼 i * 공간 각도를 추가로 더해주면서 발사체를 생성하고 발사합니다.
오늘의 회고
이번 캠프 때 아크 탄젠트, Mathf.Atan, Mathf.Dot 등
수학적인 부분을 제법 많이 배웠습니다.
하지만 아직 어려운 점이 많은 것 같습니다.
왜 이 공식을 사용하면 저렇게 되는거지?
와 같은 의문이 자주 생깁니다.
앞으로 남은 시간이 있으면 다양한 수학 공식을 사용하여 무언가를 구현하는 등의
연습이 필요할 것으로 보입니다.
'프로그래밍 노트 > TIL' 카테고리의 다른 글
내일배움캠프 21일차 TIL : 기존 시야각 구하기 문제점 해결 (0) | 2024.05.17 |
---|---|
내일배움캠프 20일차 TIL : 수학을 이용한 시야각 구하기 (0) | 2024.05.16 |
내일배움캠프 18일차 TIL (0) | 2024.05.13 |
내일배움캠프 17일차 WIL - 라디안 (0) | 2024.05.10 |
내일배움캠프 16일차 TIL - NEW INPUT SYSTEM(2) (0) | 2024.05.09 |