2023. 11. 28. 21:55ㆍ스파르타코딩클럽 게임개발
오늘은 타일맵과 에임살펴보자!
타일맵
✔️ 타일맵으로 우리의 무대를 만들어봅시다.
Unity의 Tilemap 시스템을 사용하면 이러한 타일 기반의 게임 환경을 쉽게 만들 수 있습니다. 이 시스템을 사용하면 작은 스프라이트를 통해 광대한 게임 환경을 구성할 수 있으며, 복잡한 게임 레벨을 쉽게 디자인하고, 편집하고, 조작할 수 있습니다.
- Tilemap 시스템은 다음의 구성 요소
- Tilemap GameObject: Unity의 타일맵 구조를 구성하는 데 사용됩니다. Tilemap Grid의 자식으로 위치하고, 특정 타일의 배치를 관리합니다.
- Grid GameObject: 모든 타일맵이 위치하는 기본 격자를 나타냅니다.
- Tilemap Renderer: Tilemap의 모양을 실제로 그리는 역할을 합니다.
- Tilemap Collider 2D: 필요한 경우, Tilemap에 물리적인 경계를 추가하는 데 사용됩니다. 이를 통해 게임 캐릭터가 타일맵 환경과 상호작용할 수 있게 됩니다.
- Tile Assets: 개별 타일의 모양과 동작을 정의합니다. 여러 개의 타일을 묶어서 Tileset이라고 부르기도 합니다.
1. 타일맵 만들기
이제 준비는 끝났다.
그려보자
이번엔 보이지 않는 벽을 만들건데 이동하지 못하는 투명벽을 만들것이다.
이젠 메르시에게 무기를 쥐어주자!
01_ 핵심 내용
✔️ 이후 수업에서 사용될 내용의 이론을 먼저 확인해 봅시다.
- 쿼터니언(Quaternion)
- 4차원 복소수를 이용한 회전 표현 방법입니다. (x, y, z, w) 형태로 표현되며, Unity에서 주로 사용됩니다.
- 오일러 각도(Euler angles)를 사용하여 회전을 표현할 경우 발생하는 짐벌 락(Gimbal Lock) 문제를 피할 수 있습니다.
- 직관적이지 않고 복잡해 보일 수 있지만, Unity에서는 쿼터니언을 사용하기 쉽게 만들어졌습니다.
- 직접 값을 변경하거나 계산하는 대신, Unity의 내장 함수를 사용하는 것이 좋습니다 (예: Quaternion.Euler, Quaternion.LookRotation, Quaternion.Slerp 등).
- 쿼터니언은 일반적으로 "정규화(normalized)"되어야 하는데, Unity에서는 이를 자동으로 처리합니다. 하지만 직접 계산을 할 때는 정규화에 주의해야 합니다.
- 아크탄젠트 (ArcTangent)
- 아크탄젠트 함수는 삼각함수의 역함수입니다. 특정 비율에 대한 각도를 계산하는 데 사용됩니다.
- 2차원 공간에서 점 또는 벡터에 대한 각도를 찾는 데 아크탄젠트 함수가 종종 사용됩니다.
- 예를 들어, 벡터 (x, y)의 경우, Math.Atan2(y, x) 함수를 사용하여 벡터가 x축과 이루는 각도를 라디안으로 얻을 수 있습니다.
- 아크탄젠트 함수는 사인(sine)과 코사인(cosine) 함수를 이용하여 직각 삼각형에서 빗변의 각도를 계산하는 데 사용될 수 있습니다.
- 이 기능은 게임 개발에서 많이 사용되며, 특히 객체가 특정 방향을 향하도록 만들거나 두 점 사이의 각도를 계산할 때 유용합니다.
위의 내용은 강의 내용이다! 난 몰루!
TopDownAimRotation 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TopDownAimRotation : MonoBehaviour
{
[SerializeField] private SpriteRenderer armRenderer; // 팔의 SpriteRenderer
[SerializeField] private Transform armPivot; // 팔의 회전 중심 축
[SerializeField] private SpriteRenderer characterRenderer; // 캐릭터의 SpriteRenderer
private TopDownController _controller; // TopDownController 컴포넌트 참조
private void Awake()
{
_controller = GetComponent<TopDownController>(); // TopDownController 컴포넌트 가져오기
}
void Start()
{
_controller.onLookEvent += OnAim; // onLookEvent 이벤트에 OnAim 메서드 연결
}
// 조준 시 호출되는 메서드
public void OnAim(Vector2 newAimDirection)
{
RotateArm(newAimDirection); // 팔을 회전시키는 메서드 호출
}
// 팔을 주어진 방향으로 회전시키는 메서드
private void RotateArm(Vector2 direction)
{
float rotZ = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; // 주어진 방향으로 각도 계산
// 팔의 SpriteRenderer를 상하로 뒤집음
armRenderer.flipY = Mathf.Abs(rotZ) > 90f;
// 캐릭터의 SpriteRenderer를 팔의 뒤집힌 상태에 맞춰 좌우로 뒤집음
characterRenderer.flipX = armRenderer.flipY;
// 팔의 중심 축을 이용하여 주어진 각도로 회전
armPivot.rotation = Quaternion.Euler(0, 0, rotZ);
}
}
다들 커여운 메르시를 보고가세용.
'스파르타코딩클럽 게임개발' 카테고리의 다른 글
오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 24일차(팀과제 시작 그리고 고통의 깃허브) (1) | 2023.12.01 |
---|---|
오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 23일차(이름 입력받기! TMP) (0) | 2023.11.30 |
오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 21일차(유니티 강의 5주차) (0) | 2023.11.27 |
24일은 스파르타 코딩 클럽 unity 게임 개발 과정 20일차(개인과제 시작) (1) | 2023.11.27 |
어제는 스파르타 코딩 클럽 unity 게임 개발 과정 19일차(팀과제 종료 발표) (2) | 2023.11.24 |