[서론]
AI를 쓰는 방법을 조금은 알 것 같다. 생각하는 과정부터 도울 수 있게끔 부탁을 해야한다.
절 대... 까지는 아니지만, 이제 어느정도 코드 활용이 되므로
활용해야하는 코드(함수)를 주고 스스로 생각할 수 있게끔 도와달라고 하는 게 좋은 것 같다.
[본론]
무기 구현을 위해 너무 많은 역할을 지고 있던 PlayerAttack.cs를 수정하기로 했다.
그 과정에서 생긴 질문들과 다양한 오류를 기록해볼 예정이다.
이전까지는 PlayerAttack에 그냥 몰아넣고 일단 구현해보자 라는 느낌으로 갔는데,
새 무기를 넣으려고하니 새 스크립트를 만들어야하는건지, 기존 껄 수정해야하는 건지 헷갈려서 AI에게 질문했더니
그렇다... 일단 분리를 해야한다.
" PlayerAttack.cs는 더 이상 특정 무기를 구현하는 스크립트가 아니라, **'어떤 무기를 현재 사용할지 관리하는 매니저'**가 되어야 합니다."
[1번째 질문: enum이란?]
enum은 통역사 역할이다. 컴퓨터는 숫자파이지만 우리는 글자파이기 때문이다.
예를 들어서 나는 뿅망치, 씨앗, 에너지파를 무기로 정해뒀는데
이걸 구현하려고 든다면 각각을 0,1,2 라는 번호로 지정해서 코딩해야할 것이다
그럼 나중에 보면 0은 뭐고 1은 뭔지 가독성이 매우 떨어지게 된다
int currentWeapon = 1; // 1이 뭐였지? 씨앗인가? 뿅망치인가?
if (currentWeapon == 0)
{
// 뿅망치 로직... (근데 0이 뿅망치 맞나? 기억이 안 나네...)
}
else if (currentWeapon == 1)
{
// 씨앗 로직...일까?
}
AI의 도움을 받아보자면, enum은 딱 3단계로 정리할 수 있다.
- 목록 만들기
- 담을 변수 만들기
- 비교하기 (switch문이 효과적임)
1. 목록은 다음과 같이 만든다
public enum 목록이름
2. 변수는 다음과 같이 만든다
public 목록이름 변수이름;
3. 비교 (Switch)는 다음과 같이 사용한다
이어서 switch문에 대해 더 설명하겠다.
// Enum과 찰떡궁합! 추천 ⭐)
switch (myWeapon)
{
case WeaponType.BBOYANGMANGCHI:
// 뿅망치 코드
break;
case WeaponType.SEED:
// 씨앗 코드
break;
case WeaponType.ENERGY:
// 에너지 코드
break;
}
[2번째 질문: Switch문의 사용법은?]
여러분들도 이미 아는 내용일 것 같다.
하지만 특징과 사용법을 다시 정리해보자
<Switch문의 특징>
- 가독성 끝판왕: 조건이 3개 이상일 때 if-else보다 훨씬 코드가 깔끔하고 읽기 쉽습니다.
- 딱 떨어지는 값: 범위(> 10)보다는 딱 떨어지는 값(0, 1, "Apple", Enum)을 비교할 때 씁니다.
- 점프!: 조건을 하나하나 검사하는 게 아니라, 해당하는 case로 바로 점프해서 실행합니다. (그래서 조건이 많아질수록 if보다 빠를 수 있습니다.)
switch (검사할_변수)
{
case 값1:
// 값1일 때 실행할 코드
break; // "여기서 끝! 나가!" (필수)
case 값2:
// 값2일 때 실행할 코드
break;
default:
// 위의 어떤 case도 아닐 때 실행할 코드 (else와 같은 역할)
break;
}
[3번째 질문: OnTriggerEnter2D의 사용법은?]
비슷한 종류로는 OnCollisionEnter2D가 있겠다, OnCollisionEnter2D은 충돌 감지이지만
OnTriggerEnter2D는 닿았나?를 검사한다
private void OnTriggerEnter2D(Collider2D collision)
주로 Collider2D형의 변수 정보를 받아온다.
이 형태는 공식처럼 정해져 있어서 토씨 하나라도 틀리면 작동하지 않는다...
(물론 collision까지는 other이라고 써도 된다)
[3번째 질문: linearVelocity 란?]
linearVelocity는 선형 속도...라고 불리지만 중요하지는 않으며
물체의 속도를 결정한다. (AddForce와는 다름, 이건 물체에 힘을 주는 거다)
Rigidbody와 함께 사용해야 하며 X축 속도와 Y축 속도를 정해줘야한다
Rigidbody2D rb = GetComponent<Rigidbody2D>();
rb.linearVelocity = new Vector2(x_value, y_value);
[후기]
[구현 과정에서의 어려움]
오늘 정말 많은 걸 고쳤는데,
머리 속에 있는 게 정리가 안되어서 코드를 마구 짜게된다. 아무것도 모르는 상태에서도 더러운 코드라는 걸 알 수 있었다!
과정을 잘 정리하는 게 중요할 것 같다...
기획이 중요하다는 말을 다시금 상기하게 된다
많은 걸 했어도 많은 말을 담지 못했지만, 아는 만큼 쓸 수 있도록 더욱 노력하겠다.
'기타 > 24주 게임 프로그래밍 챌린지' 카테고리의 다른 글
| [1~4주: 구현력 확보] 1주차 - 4일, 스테이지 흐름 기본 구축 (0) | 2025.12.14 |
|---|---|
| [1~4주: 구현력 확보] 1주차 - 2일, Player Combat 안정화 (0) | 2025.12.11 |
| [1~4주: 구현력 확보] 1주차 - 1일, Enemy 마무리 (0) | 2025.12.09 |
| 🚀 24주 기술 성장 로드맵 (0) | 2025.12.09 |