Unity/TopdownEngine

WeaponAim의 Unrestrict3DAim 옵션 선택 시 다리를 조준하는 원인

lipnus 2023. 12. 11. 00:26
반응형

y축도 고려해서 조준

 

현제 게임설정 하에서는 다리를 쏜다. 경찰도 아니고..

 

코드를 분석결과

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도 수정해줘야함

 

Root를 좀 올리고 Model를 내리면 실행 시 캐릭터 하반신이 파뭍힘. ChracterController도 고쳐줘야 함
캡슐바닥 기준

 

극단적인 설정 예시. ChracterController가 있으면 이게 충돌 기준이 되는듯함. (원래 그런건지 TopdownEngine에서만 그런건지는 확인 필요)

 

 

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;
		}

 

 

 

 

흡족..

 

반응형