최종 프로젝트 7/18 작업노트

2025. 7. 18. 23:37·스파르타코딩클럽_Unity개발과정

1. 탄환 개선 > 기본 무기의 탄이 잘 맞지 않아 탄속 증가, 탄환 크기 증가로 플레이 중 더 적극적인 교전이 발생하도록 개선하려 함
1) 탄속 빠르게, 탄환 라이프타임 감소
Gun 탄환 스케일 증가

 

 

2. 무기 추가
1) 샷건 (아마도 분무기)
> 히트스캔 방식으로 공격 범위 내 적 모두 타격 + 색칠 가능한 오브젝트 색칠 
> 이렇게 하면 샷건같이 범위에 전체 색칠하는 느낌이 들지 않을까?

    // 샷건의 탄환은 근거리에서 퍼지는 이펙트만 보여주지 실제 물리 충돌로 대미지를 주지 않음
    // 물리적인 탄을 여러발 발사하는 것의 부하가 큼 + 여러발 맞거나 맞지 않는 등 무기 성능의 밸런싱이 어려움
    // > 대미지는 발사할 때 샷건 무기에서 공격 범위 히트 스캔으로 처리
    // 그럼 샷건 탄환 이펙트는 약간... 3D에서 메탈슬러그 샷건처럼 나가게 파티클 이펙트로 처리하면 되지 않을까?
    // 머즐 플래시가 곧 탄환 이펙트

히트 스캔 구현
// 공격 범위 내 타겟들만 히트 스캔
Collider[] colliders = Physics.OverlapBox(firePos.position, hitBoxHalfSize, Quaternion.LookRotation(firePos.forward), targetLayer);
일반 레이캐스트와 다르게 박스 형태(캡슐, 구도 있음) 영역 내 targetLayer인 대상만 탐색
그런데, 오버랩이어서 범위 내 여럿에 대해 감지해서 그런지 충돌 지점에 대한 정보를 가지고 있지 않음

해결책 : 해당 콜라이더가 총구로부터 가장 가까운 위치를 찾으면, 직선상으로 가장 가까운 점. 즉, 탄환의 접점으로 취급할 수 있음
Vector3 hitPoint = colliders[i].ClosestPoint(firePos.position); 

 

샷건 에러!
(1) 공격 시 색칠 로그 호출되나 색칠이 안되는 현상 > 아주 가까이 붙으면 색칠이 되기 시작.. > 거리 문제?
공격 범위 내 색칠 가능 오브젝트는 인식한다는 뜻
접점 산출 구문을 아래와 같이 변경하여 해결
Vector3 hitPoint = colliders[i].ClosestPointOnBounds(firePosition);  // 색칠 타겟이 메시 콜라이더가 아니라면 해당 구문 사용
> 추가 문제 : 구형, 고리 오브젝트들에 대해서는 제대로 표면을 찾아내지 못함.
> 아무래도 박스캐스트로는 안되겠음.. 적어도 충돌 지점 정보는 있어야 하는데 산출하는 것만으로는 오차 발생 및 예외가 많음
> 방사형으로 쏘게끔 바꿔보자
> 발사 포인트로부터 최대 방사각 내 랜덤한 각도로 샷건 탄환 수만큼 발사(레이캐스트)
> 이펙트와 사정거리를 맞춰서 자연스럽게 흘러가게끔 조치
> 잘 동작

(2) 2p가 색칠 불가 + 플레이어에 대미지 주기 불가
> 느낌 상... isMine 조건문에서 걸리는 듯. 사실 무기는 총알과는 다르게 해당 플레이어 클라이언트 로컬에서 1번만 실행하는데 isMine을 따질 필요가 없음 > 제거한다! > 정상 동작 확인

 

 

// 에러 노트

1. 탄이 충돌 시 사라지지 않고 트레일만 바운스?
1) 관찰
2인 플레이 도중 2p의 화면에서 탄이 맞은 자리에서 한번 더 튀는 현상 발생
2p 클라이언트에서는 도탄에 맞은 것처럼 보이나 실제 대미지는 없음
2p 화면에서 1,2P 모두의 탄에서 해당 현상 발생

2) 원인
탄 충돌 시 색칠/대미지 처리 전 if (targetPv.Owner != PhotonNetwork.LocalPlayer) return;
리턴 때문에 충돌 이후 풀로 돌아가지 못하는 게 문제가 아닐까?

3) 해결
if (targetPv.Owner != PhotonNetwork.LocalPlayer) 이 부분이 if(!targetPv.isMine)과 동일한 기능 수행해서 변경

리턴 구문을 없애고 if(targetPv.isMine) 일 때, 색칠/대미지 주기 가능
>> 바운스 현상 없이 정상 동작 확인

저작자표시 비영리 동일조건 (새창열림)

'스파르타코딩클럽_Unity개발과정' 카테고리의 다른 글

7/23 최종 프로젝트 작업 일지  (0) 2025.07.23
최종 프로젝트 7/21 작업일지  (0) 2025.07.21
최종 프로젝트 7/17 작업노트  (1) 2025.07.17
최종 프로젝트 7/16 작업노트  (1) 2025.07.16
최종 프로젝트 7/15 작업 노트  (0) 2025.07.15
'스파르타코딩클럽_Unity개발과정' 카테고리의 다른 글
  • 7/23 최종 프로젝트 작업 일지
  • 최종 프로젝트 7/21 작업일지
  • 최종 프로젝트 7/17 작업노트
  • 최종 프로젝트 7/16 작업노트
ybbro
ybbro
대부분의 포스팅은 pc에서 작성되었습니다. 모바일에서 볼 때 설명이 잘리면 데스크탑 모드를 사용해보길 바랍니다.
  • ybbro
    어떻게든 굴리는 게임 공방
    ybbro
  • 전체
    오늘
    어제
    • 전체 N
      • 스파르타코딩클럽_Unity개발과정 N
      • Unity 2D
        • 카드게임
        • 플랫포머 게임
        • 뱀서라이크
      • Unity 3D
        • 닷지
        • 유니티 짱
        • 디펜스 게임
      • Unity 에러 노트
      • 기능 구현 방법 정리
      • 셰이더 그래프
        • 2D
        • 3D
      • 프로그래머스
      • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    직렬화
    hello
    유니티
    유니티 애니메이터 파라미터 초기화
    룰렛
    UI
    텍스트매시프로
    다크모드
    삭제
    대시
    sprite mask
    갤럭시 S24
    세이브
    무료스킨
    unity
    64비트
    잔상
    스파인
    앱이 휴대전화와 호환되지 않아 설치되지 않았습니다
    마스크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ybbro
최종 프로젝트 7/18 작업노트
상단으로

티스토리툴바