728x90
0. 서문
복수의 투사체 발사 시 원뿔 모양 방사 로직 구현 간 이슈 경험
1. 문제 원인
기본 방향 벡터에 대해 특정 범위 (e.g. 30도)의 회전 적용에서 문제 발생
1) 회전 축 문제
2) 쿼터니언 변환 문제
2. 해결 방안
1) 회전 축 문제
현재 개발중인 게임은 2차원 게임으로 z축을 중심으로 회전이 이뤄지도록 설정함
2) 쿼터니안 변환 문제
회전 변환의 적용 방법으로 두가지를 고려하였다.
1, sin, cos 함수 구현을 통한 회전벡터 구현
2. 내장 함수 활용을 통한 회전벡터 구현
이때, 내장 함수 'Quaternion.AngleAxis'와 'Quaternion.Euler'를 활용하는 방법으로 회전벡터를 구하는 방법을 선택하였다.
3. 적용 방법
- e.g. y축 기준 -45도 회전
1. Quaternion.AngleAxis 활용
vector = Quaternion.AngleAxis(-45, Vector3.up) * vector;
2. Quaternion.Euler 활용
transform.rotation = Quaternion.Euler(new Vector(0f, 45f, 0f));
- 실제 적용 예시
Vector3 targetPos = GameManager.instance.mPlayer.mScanner.mNearestTarget.position;
Vector3 rootDir = targetPos - GameManager.instance.mPlayer.transform.position;
rootDir = rootDir.normalized;
// 방사형 공격 로직
for (int i = 0; i < GameManager.instance.mWeaponLastData[mId].Projectile; ++i)
{
Vector3 dir = rootDir;
if(GameManager.instance.mWeaponLastData[mId].Projectile != 1)
{
float rot = 30 * (i / ((float)GameManager.instance.mWeaponLastData[mId].Projectile - 1)) - 15;
// dir = Quaternion.AngleAxis(rot, Vector3.forward) * dir;
dir = Quaternion.Euler(0, 0, rot) * dir;
}
Transform bullet = mWeaponPool.Get().transform; // 부족한 것을 오브젝트 풀로 추가
bullet.parent = mWeaponPool.transform;
bullet.position = GameManager.instance.mPlayer.transform.position;
bullet.rotation = Quaternion.FromToRotation(Vector3.up, dir);
bullet.GetComponent<Range>().Init(Mathf.RoundToInt(GameManager.instance.mWeaponLastData[mId].Damage), GameManager.instance.mWeaponLastData[mId].Pierce, dir, GameManager.instance.mWeaponLastData[mId].Speed); // -1 is Infinity Per
}
4. 참고 자료
https://discussions.unity.com/t/rotate-a-vector3-direction/14722
https://docs.unity3d.com/kr/2023.2/Manual/class-Transform.html
https://docs.unity3d.com/ScriptReference/Quaternion.AngleAxis.html
https://docs.unity3d.com/ScriptReference/Quaternion.Euler.html
'--------게임만들기-------- > |unity| by C#' 카테고리의 다른 글
[Unity] localPosition, position (0) | 2024.06.05 |
---|---|
[Unity] Day4 - 싱글턴 구현 완료, 투사체 방사 로직 구현 (0) | 2024.06.05 |
[unity] Day3 - 싱글턴 구현(static function) (0) | 2024.06.04 |
[Unity] 뱀파이버 서바이벌 - Day2 싱글턴 구현 (1) | 2024.06.02 |
[Unity] 뱀파이버 서바이벌 - Day1 게임 개발 로드맵 작성 (0) | 2024.06.02 |