Unity에서 메서드와 Transform.Rotate와 Transform.Translate 개념 이해하기: 회전을 통해 배우는 C# 프로그래밍 기초

GoGoComputer·2024년 10월 27일

unity2d game

목록 보기
5/17
post-thumbnail

part 1/2: Transform.Rotate

안녕하세요! 이번 강의에서는 메서드의 기본 개념을 배우고, Unity에서 {Transform.Rotate} 메서드를 사용하여 캡슐 오브젝트를 회전시키는 방법을 자세히 알아보겠습니다. 천천히 따라오시면 누구나 이해하실 수 있도록 설명해드리겠습니다.


1. 새로운 Unity 2D 프로젝트 생성하기

먼저, Unity에서 새로운 2D 프로젝트를 만들어보겠습니다.

  1. Unity Hub를 실행합니다.
  2. 상단의 "새 프로젝트(New)" 버튼을 클릭합니다.
  3. 템플릿에서 "2D"를 선택합니다.
  4. 프로젝트 이름을 원하는 대로 지정하세요. 저는 "배달 기사(Delivery Driver)"라고 하겠습니다.
  5. 프로젝트 저장 위치를 설정합니다.
  6. "생성(Create)" 버튼을 클릭하여 프로젝트를 만듭니다.

프로젝트가 생성될 때까지 잠시 기다립니다. 이 시간에 잠깐 휴식을 취하셔도 좋습니다.


2. 캡슐 스프라이트 추가하기

이제 게임에서 사용할 자동차로 캡슐 스프라이트를 추가해보겠습니다.

  1. Hierarchy 창에서 마우스 오른쪽 버튼을 클릭합니다.
  2. "2D Object" > "Sprites" > "Capsule"을 선택합니다.
  3. 생성된 캡슐 오브젝트의 이름을 변경해봅시다. 저는 "Cruisy McDrive"라고 지었습니다. 여러분도 마음에 드는 이름으로 변경해보세요.

참고: 재미있는 이름을 지어보는 것도 좋지만, 실제 브랜드나 저작권에 문제가 될 수 있는 이름은 피하는 것이 좋습니다.


3. C# 스크립트 생성 및 추가하기

캡슐 오브젝트에 동작을 부여하기 위해 스크립트를 만들어보겠습니다.

  1. Project 창의 Assets 폴더에서 마우스 오른쪽 버튼을 클릭합니다.
  2. "Create" > "C# Script"를 선택합니다.
  3. 스크립트의 이름을 "Driver"라고 지정합니다.

  1. 생성된 Driver 스크립트를 캡슐 오브젝트에 추가합니다:
    • 방법 1: 스크립트를 캡슐 오브젝트로 드래그 앤 드롭합니다.
    • 방법 2: 캡슐 오브젝트를 선택하고, Inspector 창에서 "Add Component" 버튼을 클릭한 후 "Driver"를 검색하여 추가합니다.

4. 메서드의 이해

이제 메서드에 대해 알아보겠습니다.

  • 메서드(Method)란 특정 작업을 수행하는 코드 블록입니다. 다른 언어에서는 함수(Function)라고도 합니다.
  • 메서드는 게임에서 오브젝트를 움직이거나, 회전시키거나, 특정 동작을 수행하게 합니다.
  • Unity와 C#에서는 이미 제공되는 메서드를 사용할 수도 있고, 직접 메서드를 만들어 사용할 수도 있습니다.

메서드의 구성

  1. 메서드 생성(Create): 메서드의 이름과 수행할 작업을 정의합니다.
  2. 메서드 호출(Call): 정의된 메서드를 실제로 실행합니다.

5. 스크립트 편집하기

실제 코드를 작성하여 캡슐 오브젝트를 회전시켜보겠습니다.

  1. Driver 스크립트를 더블 클릭하여 Visual StudioVisual Studio Code에서 엽니다.
  2. 기본 코드 구조는 다음과 같습니다:
using UnityEngine;

public class Driver : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        // 이곳에 초기화 코드를 작성합니다.
    }

    // Update is called once per frame
    void Update()
    {
        // 이곳에 매 프레임 실행될 코드를 작성합니다.
    }
}

코드 설명

  • using UnityEngine;: Unity 엔진의 기능을 사용하기 위한 선언입니다.
  • public class Driver : MonoBehaviour: Driver라는 이름의 클래스를 정의하며, MonoBehaviour를 상속받습니다.
  • Start() 메서드: 게임 시작 시 한 번 호출됩니다.
  • Update() 메서드: 매 프레임마다 호출됩니다.
  • 주석(Comment): 코드 내에서 //를 사용하여 주석을 작성할 수 있습니다. 주석은 설명을 위해 사용되며 실행되지 않습니다.

6. Transform.Rotate 메서드 사용하여 회전시키기

Start() 메서드에서 회전시키기

  1. Start() 메서드 안에 다음 코드를 추가합니다:
void Start()
{
    transform.Rotate(0, 0, 45);
}
  • transform: 현재 오브젝트의 Transform 컴포넌트를 나타냅니다.
  • Rotate(x, y, z): 오브젝트를 지정된 축으로 회전시킵니다.
  • 위 코드는 z축으로 45도 회전시킵니다.
  1. 스크립트를 저장(Ctrl + S)하고 Unity로 돌아갑니다.
  2. 플레이 버튼을 눌러 게임을 실행하면, 캡슐 오브젝트가 시작하자마자 45도 회전된 것을 볼 수 있습니다.

Update() 메서드에서 지속적으로 회전시키기

이제 오브젝트가 계속 회전하도록 만들어보겠습니다.

  1. Start() 메서드의 코드를 잘라내기(Ctrl + X) 하고, Update() 메서드에 붙여넣기(Ctrl + V) 합니다:
void Update()
{
    transform.Rotate(0, 0, 45);
}
  1. 스크립트를 저장하고 Unity로 돌아갑니다.

  1. 플레이 버튼을 눌러 게임을 실행하면, 오브젝트가 매우 빠르게 회전하는 것을 볼 수 있습니다. 이는 매 프레임마다 45도씩 회전하기 때문입니다.

회전 속도 조절하기

오브젝트가 너무 빠르게 회전하므로, 회전 속도를 조절해보겠습니다.

  1. Update() 메서드의 코드를 다음과 같이 수정합니다:
void Update()
{
    transform.Rotate(0, 0, 45 * Time.deltaTime);
}
  • Time.deltaTime: 이전 프레임에서 현재 프레임까지의 시간(초)을 나타냅니다. 이를 곱해주면 프레임 레이트에 상관없이 일정한 속도로 회전하게 됩니다.
  1. 스크립트를 저장하고 Unity로 돌아갑니다.
  2. 플레이 버튼을 눌러 게임을 실행하면, 오브젝트가 부드럽게 회전하는 것을 볼 수 있습니다.

전체 코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Driver : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        transform.Rotate(0, 0, 45 * Time.deltaTime);
    }

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(0, 0, 45 * Time.deltaTime);
    }
}

7. 추가적인 이해: Unity 에디터 활용하기

오브젝트의 Transform 이해하기

  • Position: 오브젝트의 위치를 나타냅니다.
  • Rotation: 오브젝트의 회전을 나타냅니다.
  • Scale: 오브젝트의 크기를 나타냅니다.

Scene 뷰에서 회전 조작하기

  1. Scene 뷰에서 오브젝트를 선택합니다.
  2. Rotate Tool(E)를 선택하여 오브젝트를 회전시킬 수 있습니다.
  3. GlobalLocal 좌표계를 전환하여 회전 방향을 변경할 수 있습니다.

2D와 3D 뷰 전환하기

  • Scene 뷰 상단의 2D 버튼을 클릭하면 3D 뷰로 전환됩니다.
  • 3D 뷰에서는 오브젝트의 z축 회전을 더 명확하게 확인할 수 있습니다.

8. 프레임 레이트와 성능 확인하기

  • Game 창에서 상단의 "Stats" 버튼을 클릭하면 현재 프레임 레이트와 성능 정보를 확인할 수 있습니다.
  • 프레임 레이트가 높을수록 오브젝트의 회전 속도가 빨라질 수 있으므로 Time.deltaTime을 사용하여 일정한 속도를 유지합니다.

9. 정리 및 다음 단계

이번 강의를 통해 다음을 배웠습니다:

  • 새로운 Unity 2D 프로젝트를 생성하고 캡슐 스프라이트를 추가하는 방법
  • C# 스크립트를 생성하고 오브젝트에 추가하는 방법
  • 메서드의 개념과 Start(), Update() 메서드의 역할
  • Transform.Rotate 메서드를 사용하여 오브젝트를 회전시키는 방법
  • Time.deltaTime을 사용하여 회전 속도를 일정하게 유지하는 방법
  • Unity 에디터에서 오브젝트를 조작하는 다양한 방법

이러한 기본기를 바탕으로 앞으로 더 복잡하고 흥미로운 기능들을 구현할 수 있습니다. 다음 강의에서는 메서드를 활용하여 오브젝트를 이동시키는 방법 등을 다뤄보겠습니다.

수고하셨습니다!


part 2/2 Transform.Translate

안녕하세요! 이번 강의에서는 이전에 배운 내용을 바탕으로, Transform.Translate 메서드를 사용하여 차를 앞으로 이동시키는 방법을 자세히 알아보겠습니다. 이번 강의가 끝나면 차가 회전하면서 앞으로 나아가는 모습을 볼 수 있을 것입니다.


1. 목표 설정

  • Transform.Translate 메서드를 사용하여 차를 앞으로 이동시킵니다.
  • 이전에 사용한 Transform.Rotate 메서드와 함께 사용하여 차가 회전하면서 전진하도록 만듭니다.

2. 이전 강의 복습: Transform.Rotate

지난 강의에서 우리는 Transform.Rotate 메서드를 사용하여 차를 회전시키는 방법을 배웠습니다. 코드에서는 다음과 같이 작성했습니다:

void Update()
{
    transform.Rotate(0, 0, 45 * Time.deltaTime);
}
  • transform.Rotate(x, y, z): 오브젝트를 x, y, z 축으로 회전시킵니다.
  • Time.deltaTime: 프레임 독립적인 움직임을 위해 사용됩니다.

3. Transform.Translate 메서드 소개

이번에는 Transform.Translate 메서드를 사용하여 차를 앞으로 이동시켜보겠습니다.

  • transform.Translate(x, y, z): 오브젝트를 x, y, z 방향으로 이동시킵니다.
  • 이 메서드도 마찬가지로 Time.deltaTime을 사용하여 움직임이 프레임 레이트에 영향을 받지 않도록 합니다.

4. 코드 작성 단계

4.1. Driver 스크립트 열기

  1. Project 창에서 Driver 스크립트를 더블 클릭하여 열어줍니다.

4.2. Transform.Rotate 코드 주석 처리

  • 현재 Update() 메서드에는 transform.Rotate 코드가 있을 것입니다.
  • 이 코드를 잠시 주석 처리하여 transform.Translate에 집중하겠습니다.
void Update()
{
    // transform.Rotate(0, 0, 45 * Time.deltaTime);
}
  • 주석 처리 방법: 코드 앞에 //를 추가하면 해당 줄이 주석 처리됩니다.

4.3. Transform.Translate 코드 추가

  • Update() 메서드에 transform.Translate 메서드를 추가합니다.
void Update()
{
    // transform.Rotate(0, 0, 45 * Time.deltaTime);

    transform.Translate(0, 1, 0);
}
  • 여기서 xz 값은 0으로 두고, y 값을 1로 설정했습니다.
  • 하지만 이렇게 하면 오브젝트가 너무 빠르게 움직일 수 있습니다.

4.4. 이동 속도 조절

  • 움직임을 부드럽게 만들기 위해 Time.deltaTime을 곱해줍니다.
  • 또한 속도를 조절하기 위해 값을 조정합니다.
void Update()
{
    // transform.Rotate(0, 0, 45 * Time.deltaTime);

    transform.Translate(0, 1 * Time.deltaTime, 0);
}
  • 또는 속도를 더 세밀하게 조절하고 싶다면:
void Update()
{
    // transform.Rotate(0, 0, 45 * Time.deltaTime);

    transform.Translate(0, 0.01f, 0);
}
  • 0.01f: 소수점 숫자를 사용할 때는 f를 붙여 부동 소수점임을 명시합니다.

4.5. 코드 저장

  • 모든 변경 사항을 저장합니다. (Ctrl + S)

5. Unity에서 테스트하기

5.1. Unity로 돌아가기

  • 스크립트를 저장한 후 Unity로 돌아갑니다.
  • 잠시 기다리면 Unity가 스크립트를 컴파일합니다.

5.2. 플레이 모드 실행

  • Play 버튼을 눌러 게임을 실행합니다.
  • 차가 앞으로 부드럽게 이동하는 것을 볼 수 있습니다.

5.3. 이동 속도 확인 및 조절

  • 만약 차가 너무 빠르거나 느리게 움직인다면, Driver 스크립트로 돌아가서 속도를 조절합니다.
  • 예를 들어, 0.01f 값을 늘리거나 줄여서 원하는 속도를 찾습니다.

6. Transform.Rotate 코드 다시 활성화

6.1. 주석 처리 해제

  • 이제 회전과 이동을 동시에 실행하기 위해 transform.Rotate 코드의 주석을 해제합니다.
void Update()
{
    transform.Rotate(0, 0, 45 * Time.deltaTime);

    transform.Translate(0, 0.01f, 0);
}

6.2. 코드 저장 및 테스트

  • 변경 사항을 저장합니다.
  • Unity로 돌아가 Play 버튼을 눌러 실행합니다.
  • 차가 회전하면서 앞으로 나아가는 것을 볼 수 있습니다.

7. 차의 초기 위치 조정

7.1. Scene 뷰에서 위치 변경

  • 차의 움직임을 더 잘 보기 위해 차의 초기 위치를 조정합니다.
  • Hierarchy 창에서 차 오브젝트(Cruisy McDrive)를 선택합니다.
  • Scene 뷰에서 차를 약간 오른쪽으로 이동시킵니다.

7.2. 이동 방향 확인

  • 차가 회전하면서 왼쪽으로 돌기 때문에, 오른쪽으로 시작하면 원을 그리며 움직이는 모습을 볼 수 있습니다.

7.3. 플레이 모드에서 확인

  • 다시 Play 버튼을 눌러 실행합니다.
  • 차가 회전하면서 원형으로 이동하는 것을 볼 수 있습니다.

8. 전체 코드 정리

최종적으로 Driver 스크립트의 코드는 다음과 같습니다:

using UnityEngine;

public class Driver : MonoBehaviour
{
    void Update()
    {
        transform.Rotate(0, 0, 45 * Time.deltaTime);
        transform.Translate(0, 0.01f, 0);
    }
}
  • transform.Rotate: z축으로 매 프레임마다 45도씩 회전합니다.
  • transform.Translate: y축 방향으로 매 프레임마다 0.01 단위로 이동합니다.

9. 추가 이해: 이동 방향과 축 이해하기

9.1. 월드 좌표계 vs 로컬 좌표계

  • 월드 좌표계(World Coordinates): 전체 게임 세계를 기준으로 하는 좌표계.
  • 로컬 좌표계(Local Coordinates): 오브젝트 자체를 기준으로 하는 좌표계.

9.2. Translate 메서드의 기준 설정

  • 기본적으로 Translate는 로컬 좌표계를 사용합니다.
  • 따라서 오브젝트가 회전하면 이동 방향도 함께 회전합니다.
  • 이를 통해 차가 회전하면서 그 방향으로 이동하게 됩니다.

9.3. 월드 좌표계를 사용하고 싶다면

  • 만약 월드 좌표계를 기준으로 이동하고 싶다면, 다음과 같이 코드를 수정합니다:
void Update()
{
    transform.Translate(0, 0.01f, 0, Space.World);
}
  • Space.World: 월드 좌표계를 기준으로 이동합니다.

10. 정리 및 다음 단계

이번 강의를 통해 다음을 배웠습니다:

  • Transform.Translate 메서드를 사용하여 오브젝트를 이동시키는 방법.
  • 이동 속도를 조절하기 위해 Time.deltaTime과 부동 소수점을 사용하는 방법.
  • Transform.RotateTransform.Translate를 함께 사용하여 오브젝트가 회전하면서 이동하도록 만드는 방법.
  • 로컬 좌표계와 월드 좌표계의 차이점과 이를 코드에서 적용하는 방법.

11. 다음 강의 예고

  • 사용자 입력을 받아 차를 직접 조종하는 기능을 추가해보겠습니다.
  • 이를 통해 더욱 재미있고 인터랙티브한 게임을 만들어볼 수 있습니다.

수고하셨습니다! 이번 강의를 통해 Unity에서 오브젝트를 이동시키고 회전시키는 기본적인 방법을 배웠습니다.


부록: 씬(Scene) 뷰에서 카메라가 사라졌을 때

Unity에서 씬(Scene) 뷰에서 카메라가 사라졌을 때 복구하는 방법은 다음과 같습니다:

  1. F 키 사용하기: 특정 오브젝트를 다시 중심으로 포커스하려면, Hierarchy 창에서 대상 오브젝트를 선택한 후 Scene 뷰에서 F 키를 누르세요. 이를 통해 카메라가 오브젝트에 맞춰 이동하면서 씬의 중심에 위치하게 됩니다【84†source】【85†source】.

  2. 카메라 설정 초기화: Scene Camera 설정을 초기화할 수 있습니다. Scene 뷰의 오른쪽 상단에 있는 카메라 아이콘을 클릭하여 설정 메뉴에서 "Reset"을 선택하면 카메라 뷰가 기본 위치로 돌아갑니다【84†source】【86†source】.

  3. 뷰 리셋 옵션 사용: 씬의 오른쪽 상단 Orientation overlay(축 표시)를 사용해 씬의 기본 뷰로 되돌릴 수 있습니다. 예를 들어, 가운데 큐브 아이콘을 Shift+클릭하면 Perspective 모드로 돌아가 씬을 처음 위치에서 볼 수 있게 됩니다【85†source】.

이 방법들을 활용하여 카메라 뷰를 쉽게 복구할 수 있습니다.


profile
IT를 좋아합니다.

0개의 댓글