오늘은 새로운 주차가 시작 되는 주이다. 이번 주는 다시 유니티 기초로 돌아와서 기초 게임을 만들어 보는 시간이었다.
그 중 새롭게 배우거나 신기하거나 중요하다고 생각하는 내용을 몇가지 주절주절 써내려 보겠다.
가장 먼저 라이프사이클
Unity에서 라이프사이클(Lifecycle)은 게임 오브젝트와 스크립트가 실행되는 순서를 정의합니다.
- 주요 단계
- Awake: 스크립트가 활성화될 때 호출. 초기화 작업에 사용
- Start: 오브젝트가 활성화되고 첫 프레임 전에 한 번 호출
- Update: 매 프레임마다 호출. 주로 입력 처리와 게임 로직에 사용
- FixedUpdate: 물리 연산이 필요할 때 일정한 간격으로 호출
- LateUpdate: Update가 완료된 후 호출. 카메라 추적 등에 사용
- 중요성
- 각 단계가 명확히 구분되어 있어, 적절한 함수에 코드를 배치하면 효율적인 게임 로직을 구현 가능
그 다음은 충돌처리 함수
충돌 처리 함수
Unity에서 충돌 처리는 Collider와 Rigidbody를 통해 구현됩니다.
- 주요 함수
- OnCollisionEnter: 충돌 시작 시 호출
- OnCollisionStay: 충돌이 유지되는 동안 호출
- OnCollisionExit: 충돌이 끝났을 때 호출
- OnTriggerEnter/Stay/Exit: Trigger Collider와의 상호작용을 처리
충돌에 가장 중요한 3요소는 충돌할 물체 콜라이더, 리지드바디 그리고 충돌당할 물체의 콜라이더라고 생각한다.
그 뒤로는 어느정도 아는 내용이라 쭉쭉 넘어 갔는데, 장애물을 생성하는 부분과 반복 생성하는 로직이 되게 신기하고 깔끔하게 잘 짜져있던 것 같아서 다시 한 번 볼려고 한다.
public class BgLooper : MonoBehaviour
{
public int numBgCount = 5;
public int obstacleCount = 0;
public Vector3 obstacleLastPosition = Vector3.zero;
void Start()
{
Obstacle[] obstacles = GameObject.FindObjectsOfType<Obstacle>();
obstacleLastPosition = obstacles[0].transform.position;
obstacleCount = obstacles.Length;
for(int i = 0; i < obstacleCount; i++)
{
obstacleLastPosition = obstacles[i].SetRandomPlace(obstacleLastPosition, obstacleCount);
}
}
public void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log("Triggered: " + collision.name);
if (collision.CompareTag("BackGround"))
{
float widthOfBgObject = ((BoxCollider2D)collision).size.x;
Vector3 pos = collision.transform.position;
pos.x += widthOfBgObject * numBgCount;
collision.transform.position = pos;
return;
}
Obstacle obstacle = collision.GetComponent<Obstacle>();
if (obstacle)
{
obstacleLastPosition = obstacle.SetRandomPlace(obstacleLastPosition, obstacleCount);
}
}
}
대충 처음 생성된 10개의 장애물을 SetRandomPlace를 통해 통과할 수 있는 범위를 조절해서 가져와서 for문을 돌려 각 각의 위치를 정해준다. 그 뒤 카메라 뒤에 따라오는 지우개(?)에 장애물이 부딪히면 마지막에 생성된 장애물 뒤에 다시 생성되는 로직이다.
한번씩 무한정 그려지는 맵의 로직을 사용하는 게임들을 봤을 때 어떻게 구현하는 건지 생각해본적이있었는데
아마 이렇게 위치를 다시 재조정해주는 로직을 사용하는 것이 정답일 것 같은 생각이 든다.
찾아보니 한 때 재밌게 했던 뱀파이어 서바이벌이라는 게임도 이런식으로 맵을 구현한 것이라고 한다.
그리고 마지막으로 빌드하는 법을 전혀 모르고있었는데 이번 기회에 한 번 간단하게 라도 배워보았다.
빌드 과정
- File > Build Settings 클릭
- PC, Mac & Linux Standalone 선택 후 Switch Platform 클릭
- 설정 완료 후 Build 버튼 클릭 → .exe 파일 생성
Player Settings (기초 설정)
- Resolution and Presentation
- Default Is Fullscreen: 창 모드/전체 화면 설정
- Default Screen Width/Height: 기본 해상도 설정 (예: 1920x1080)
- Other Settings
- Product Name: 게임 이름 입력
- Company Name: 제작자 이름 입력
- Icon
- 게임 실행 파일의 아이콘 이미지 추가 가능
생각보다 그리 어렵진 않아서 이걸 못했다고? 라고 생각이 들 정도였다. 고려해야 될 정은 플랫폼 마다 쪼금식 다른 설정들을 만져주는 것이었다. 피씨 버전, 안드로이드 버전, 웹 버전 각 각 조금 씩 다른 설정 방법이 있어 빌드 할 때 각 각의 플랫폼 빌드 법을 찾아보면 할 수 있을 것 같다.
'내일배움캠프 - TIL > 내일배움캠프 - TIL' 카테고리의 다른 글
| 내일배움캠프 16일차 - 백준 9093 (0) | 2025.05.01 |
|---|---|
| 내일배움캠프 15일차 - 백준 10828 팀 스크럼 (0) | 2025.04.30 |
| 내일배움캠프 13일차 - 팀 프로젝트 Text RPG 구현 완료 (0) | 2025.04.28 |
| 내일배움캠프 11일차 - Text RPG 구현 거의(?) 완료 (0) | 2025.04.24 |
| 내일배움캠프 - TIL/내일배움캠프 - TIL내일배움캠프 10일차 (0) | 2025.04.23 |