반응형
코드를 분석결과
Weapon과 같은 GameObject에 있는 WeaponAutoAim에서 목표지점의 방향벡터를 구하는 부분
WeaponAutoAim.cs
protected override void SetAim()
{
_aimDirection = (Target.transform.position - _raycastOrigin).normalized;
_weaponAim.SetCurrentAim(_aimDirection, ApplyAutoAimAsLastDirection);
}
Target.transform.position 에서 타겟의 포지션을 받아오는데,
현제 게임의 Character들은 Root Transform의 y좌표가 0이고, 그로부터 위로 쌓아져 있다.
Solution 1
Chracter의 Root Transform을 타격지점으로 변경.
CharacterController도 수정해줘야함
Solution 2
위의 방법은 모든 캐릭터를 다 바꿔줘야 함
그리고 모든 캐릭터는 y가 0임.
캐릭터의 경우면 코드로 타격지점을 수정해주도록 변경하도록 코드 수정.
임의로 y좌표를 더해버릴 경우, 캐릭터가 아닌 경우에 중심부를 조준해야 하는 경우에 상단을 조준하게 되므로 타겟에 CharacterController가 있는 경우만 CharactoerController의 중심부를 조준하도록 변경
WeaponAutoAIm.cs (GetTargetShootingPoint 함수 추가)
protected override void SetAim()
{
var targetPos = GetTargetShootingPoint(Target.transform);
_aimDirection = (targetPos - _raycastOrigin).normalized;
_weaponAim.SetCurrentAim(_aimDirection, ApplyAutoAimAsLastDirection);
}
// 현제 게임의 Character의 Root Transform의 y좌표가 0이라 발을 조준하게 되는 문제해결
// 타겟에 CharacterController가 있으면 CharacterController의 중심을 쏜다
private Vector3 GetTargetShootingPoint(Transform target)
{
var characterController = target.GetComponent<CharacterController>();
if (characterController == null) return target.position;
return target.position + characterController.center;
}
반응형
'Unity > TopdownEngine' 카테고리의 다른 글
Chracter가 덜걱거리면서 움직일 때 (0) | 2024.01.05 |
---|---|
Weapon Life cycle Debug (1) | 2023.12.18 |
근접한 적 앞에서 부들부들 거림 방지 (0) | 2023.12.09 |
Enemy Weapon 조준 시 Y축 포함 (0) | 2023.12.09 |
Inspector에서 변수 타입을 동적으로 설정 (MMEnumCondition) (0) | 2023.08.15 |