26.06.24 TIL
김민준
BP_WraithPlayerCharacter를 가져와서 총알 발사, 히트스캔, 투사체 설정

- 우선 BP_WraithPlayerCharcter에서
LeftMouseButton 입력 -> Try Activate Abilities by Tag (Ability Tag는 Primary)
* 여기서 Ability Tags가 같은 것 중 Class Defaults의 Initial Abilities에 할당되어 있는 것만 실행 *

- (사진 ShootPrimaryAttack 블루프린트 // parent : BP_AbilityBase)
Ability Tags가 Primary인 Shoot Primary Attack 실행
Event Activate ability -> Play Montage and wait -> Shoot Hit Point NBone Projectile (투사체 버전)

- (BP_AbilityBase에 있는 Shoot Hit Poin NBone Projectile)
BP_AbilityBase에 있는 Shoot Hit Point NBone Projectile 실행 (COL Shoot Hit Scan)
->Shoot Hit Point NBone(BP_Third Person) -> Projectile Shoot(BP_Ability Shoot)

- (BP_ThirdPerson에 있는 Shoot Hit Point NBone)

- (4)에 있는 Get Bone = 총구 위치 찾는 함수

- (4)에 있는 Camera Line Trace = 카메라 에서 부터 Hit point까지 Line Trace, Hit Piont의 Location출력
다시 (4)으로 돌아와서
Shoot Hit Point NBone -> Get Bone -> Camer Line Trace
ㄴ>Camera Line Trace // (사진 6)
(start = GetActorLocation , End = Actor Location + Get Actor Forward Vector * Range)

- (3)마지막에 Projectile Shoot실행
(Ability Base에 있는 Projectile Shoot 실행) -> COL_ShootProjectile을 Spawn

- (COL_ShootProjectile에 있는 블루프린트)
시작하자마자 총구에서 한발 Shoot
이후 Set Timer By Event로 0.1초 마다 총알 궤도 업데이트
Shoot -> (COL_HitCollision에 있는) Create Multi Sphere로 sphere trace하고 충돌하는 상대에 따라 다른 이펙트 출력, 데미지 입히기 까지 저기 안에 있음

- (8) Set Timer By Event 뒤에 총알이 위 아래로 왔다 갔다 하면서 발사 되도록 중력 설정 추가

**총알 particle추가할 때 (이건 히트 스캔 방식일 때) (ShootProjectile는 ShootHitScan 복사 후 수정한거임)
Col_ Shoot Hit Scan에 viewport에 particle추가
Event Tick로 시간 지날 때 마다 ParticleLoop에 DeltaSeconds 업데이트
Custom event - Particle Loop 로 시간에 따라 Get Actor location에서 Hit Point(COL_HitCollision에 있던 변수 Replicated후 가져옴) 로 Lerp-> Set World Location -> Branch 0.6초 뒤에는 총알 사라지게
**총알 투사체로 설정할 때

COL_ShootProjectile에 Viewport에 ProjectileMovement 추가
ProjectileMovement에 Initial Speed, Max Speed 설정
Rotation Follows Velocity 체크 -> 떨어지면 Sphere도 꺾이도록
Gravity Scale 1.0 = 중력 영향 받음



