[Amazon Lumberyard Tutorial in Korean] 럼버야드 튜토리얼 한국어 자료


https://docs.aws.amazon.com/ko_kr/lumberyard/latest/gettingstartedguide/intro.html

Amazon Lumberyard Tutorial 2 - Editor Overview

  • 새로운 레벨 생성
  • 럼버야드 오브젝트
  • 에디터 레이아웃
  • 필수 도구
  • 3D 네비게이션
  • 에디터
  • 디스플레이 옵션 및 설정
  • 레이어
  • 자동 백업


Step 1 : 새로운 레벨 생성


1. File -> New Nevel (Ctrl + N) -> 레벨 이름 입력후 생성

2. 텍스처 해상도로 레벨 지형을 생성

Step 2 : 럼버야드 오브젝트


럼버야드 오브젝트 타입

1. 엔티티 - 동작 속성이 있는 개체

동작 속성은 게임 스크립트나 코드를 통해 객체가 게임 이벤트에 응답할 수 있도록 한다.

엔티티는 다음 4가지 유형으로 세분한다.

  a. 엔티티 - 게임 재생 조건 또는 시각적 설정(예: 조명, 볼륨, 카메라, 물리 객체)을 설정하고 만드는 데 사용되는 일반 개체

  b. 지오메트리 (기하학적) 엔티티 - 지오메트리 메쉬가 부착된 엔티티

  c. 파티클 엔티티 - 한 레벨 내에서 생성 및 배치되는 파티클 시스템

  d. 아치형 엔티티 - 기존 엔티티 속성에 따라 사용자가 정의한 사용자 정의 엔티티

2. 브러쉬 - 3D 메쉬 데이터로만 구성된 객체. 브러쉬는 엔티티의 동작 요소는 포함하지 않는다.

3. 화이트박스 디자이너 객체 - 러버야드 화이트 박스 디자이너 모델링 도구로 만들어진 객체 (브러쉬와 유사함)

Step 3 : 에디터 레이아웃


에디터 레이아웃

1. 메인 메뉴 - 모든 기능 및 설정

2. 에디터 툴바 - 가장 일반적으로 사용되는 툴 및 에디터

3. 뷰포트 헤더 - 원근 뷰포트에 대한 검색바 및 디스플레이 옵션

4. 원근 뷰포트 - 레벨의 3D 환경 뷰

5. 뷰포트 컨트롤 - 선택된 객체의 컨트롤, 네비게이션 속도 옵션 등의 뷰포트 기능

6. 콘솔 - 에디터 및 게임 데이터의 입력과 출력

7. 롤업바 - 원근 뷰포트의 컨텐츠를 구축하고 관리하기 위한 객체 및 엔티티 접근

  - 룰업바에 포함되는 탭

Step 4 : 필수 도구


럼버야드 에디터의 필수 도구

1. 선택, 이동, 회전, 스케일

  a. 선택

선택할 객체 위에 마우스를 올리면 노란색으로 표시되고 커서가 +로 바뀔때 마우스 왼쪽 클릭

  b. 이동

객체를 선택한 후 원하는 X,Y,Z축 방향의 선을 클릭 후 드래그

  c. 회전

객체를 선택한 후 원하는 X,Y,Z축 방향의 원을 클릭 후 드래그

  d. 스케일

객체를 선택한 후 원하는 X,Y,Z축 방향의 선을 클릭 후 드래그

  e. 선택 단축키

객체를 선택한 후 키보드 입력 단축키로 작업

선택 - 1

이동 - 2

회전 - 3

스케일 - 4


2. 스냅 그리드

스냅 그리드는 객체를 움직일 때 그리드를 사용하여 스냅이 가능하다.

스냅 그리드는 기본적으로 켜져 있으며, 에디트 툴바에서 클릭하여 끄고 켤 수 있으며 사이즈 또한 조정 가능하다.

객체 선택 후 2(이동)를 입력하면 스냅 그리드의 사이즈를 확인 가능하다.

3. 스냅 엔글

스냅 엔글은 물체를 회전할 때 엔글을 이용하여 설정한 스냅 엔글(회전각) 단위로 회전이 가능하다.

객체 선택 후 3(회전)을 입력하면 스냅 엔글의 설정각을 확인할 수 있다.

4. 지형 팔로우 및 오브젝트 스냅

지형 팔로우와 오브젝트 스냅 옵션을 사용하면 X,Y,Z축 또는 평면을 따라 이동하는 대신 지형 피쳐를 따라 이동할 수 있다.

다음 온션을 선택하면 지형을 따라 어느 방향으로든 객체가 자유롭게 이동할 수 있으며 객체는 지형에 따라서 자동으로 조정된다.

Step 5 : 3D 레벨 네비게이션


럼버야드의 뷰포인트 컨트롤은 FPS 게임과 유사하게 되어 있다.

WASD : 앞뒤좌우 방향 이동

마우스 휠 클릭 후 드래그 : 위아래좌우 방향 이동

마우스 휠 : 화면 확대 / 축소

마우스 우측 클릭 후 드래그 : 시야 각도 이동

Step 6 : 에디터


View -> Open View Pane

Step 7 : 디스플레이 옵션 및 설정


1. 원근 뷰포트 옵션

뷰포터 헤더를 마우스 오른쪽 클릭하여 설정

2. 도움말 보이기 전환

우측 상단의 도움말 아이콘을 클릭

3. 디스플레이 정보 전환

우측 상단의 디스플레이 정보 아이콘을 클릭

4. 네비게이션 속도 설정

하단의 속도를 조정

.1 : Slow

1 : Normal

10 : Fast

5. AI/물리엔진 전환

하단의 AI/Physics 버튼 클릭

Step 8 : 레이어


룰업바의 레이어 탭은 레벨을 구축할 때 만들어지는 대량의 컨텐츠들을 관리하는데 도움을 준다.

레이어 리스트에서 레이어의 생성, 이름 변경, 저장, 추출이 가능하다.

또한 Ctrl + Drag를 사용하여 원하는 위치에 정확하게 배치하여 레이어를 중첩된 그룹으로 구성할 수 있다.



Step 9 : 자동 백업


Edit -> Editor Settings -> Global Perferences -> Files -> Auto Backup -> Enable 선택



Refernce


[럼버야드 튜토리얼] https://gamedev.amazon.com/forums/tutorials

[개체와 객체의 차이] https://m.blog.naver.com/PostView.nhn?blogId=zzu0e&logNo=220689973139&proxyReferer=https%3A%2F%2Fwww.google.com%2F

Amazon Lumberyard

아마존에서 개발한 무료 크로스 플랫폼 게임엔진으로 렌더러, 게임 시스템과 빌드 툴을 포함한다.

설치는 다음과 같은 순으로 진행한다.

  • 럼버야드 다운로드
  • 럼버야드 설치
  • 럼버야드 환경 설정 및 실행


Step 1 : 럼버야드 다운로드


1. 다운로드 홈페이지 이동

https://aws.amazon.com/ko/lumberyard/downloads/

2. 럼버야드 최신 버전 다운로드 (현 1.17)


Step 2 : 럼버야드 설치


1. 다운로드 한 럼버야드 설치

2. 설치 후 럼버야드 설치 도우미 실행


Step 3 : 럼버야드 환경 설정 및 실행


1. Launch 실행

2. AWS (Amazon Web Services) 로그인



Reference



[Unity Tutorial Slime World 03] Player Attacking and Apply Animations


1. 애니메이션 타입을 레거시에서 메카님으로 변경 (Converting Legacy to Mecanim)

cha_data -> character -> cha_knight -> Motions

-> Mot_Knight@Attack, Mot_Knight@Damage, Mot_Knight@Dead, Mot_Knight@Wait, Mot_Knight@Walk

-> Inspector -> Rig -> Animation Type -> Legacy 에서 Generic 으로 변경 후 Apply


2. 플레이어에 Animator 추가

Player -> Add Component -> Animator 생성

Player -> Animator -> Controller -> Knight Controller 추가


3. Animator 스테이트 생성

Animator -> Create State -> Empty -> Wait, Walk, Attack, Damage, Dead 5개의 스테이트 생성


4. Animator 트랜지션 생성

Make Transition 로 5개의 스테이트 연결

5. Animator 파라미터 변수 생성

Animator -> Parameters -> isRunning, isAttacking, isDamaging, isDead 생성



6. Animator 조건 추가

Transition (화살표) -> Conditions -> Parameter와 Value 추가

 State

Parameter 

Value 

 Wait -> Walk

isRunning 

true 

Walk -> Wait 

isRunning 

false 

Any State -> Attack 

isAttacking 

true 

Any State -> Damage 

isDamaging 

true 

Any State -> Dead 

isDead 

true 



7. PlayerController 스크립트 수정


- Reference

[레거시 애니메이션 시스템] https://docs.unity3d.com/kr/current/Manual/Animations.html

[애니메이션 및 메카님 용어] https://docs.unity3d.com/kr/current/Manual/AnimationGlossary.html



[Unity Tutorial Slime World 02] Player Moving And Rotating


1. Player Controller 스크립트 생성

Player -> Add Component -> New Script -> PlayerController 생성


2. Player Controller 스크립트 수정


3. 플레이어 이동 속도와 회전 속도 지정

Player -> Player Controller (Script) -> Run Speed : 2, Rotation Speed : 100 으로 변경

[Unity Tutorial Roll-a-ball 08] Building the Game

1. 씬 저장하기

File -> Save Scenes (단축키 : Ctrl + S)

2. 게임 빌드하기

File -> Build Settings -> PC 선택 -> Add Open Scenes

3. 윈도우용 게임 실행 파일 생성

Builds 폴더 생성 -> Roll a Ball(Win) 이름으로 저장

4. 게임 실행

Roll a Ball(Win) 게임 파일 실행하기

Screen 에서 원하는 해상도 선택 -> Play!

게임 종료 : Alt + F4

 

-Reference

[Building the Game] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/building-game?playlist=17141

[Unity Tutorial Roll-a-ball 07] Displaying the Score and Text

1. 점수 카운트 변수 생성 및 계산

PlayerController 스크립트 수정

}

    // 에디터 안 Inspector에서 편집 가능한 속도 조정 변수 생성
    public float speed;
    // Rigidbody 형태의 변수 생성
    private Rigidbody rb;
    // 점수 카운트 변수
    private int count;

    // 스크립트가 활성화된 첫 프레임에 호출
    void Start()
    {
        // 현재 오브젝트의 Rigidbody를 참조
        rb = GetComponent<Rigidbody>();
        // 점수 초기화
        count = 0;
    }

    // 프레임을 렌더링 하기 전에 호출
    void Update()
    {

    }

    // 물리효과 계산을 수행하기 전에 호출
    void FixedUpdate()
    {
        // 키보드의 키로 컨트롤하는 수평 축의 입력 (left, right)
        float moveHorizontal = Input.GetAxis("Horizontal");
        // 키보드의 키로 컨트롤하는 수직 축의 입력 (up, down)
        float moveVertical = Input.GetAxis("Vertical");

        // 플레이어의 이동량을 선언 (x축, y축, z축)
        Vector3 movemnet = new Vector3(moveHorizontal, 0, moveVertical);
        // 플레이어의 Rigidbody에서 movement 값만큼 힘을 가해서 이동시킴
        rb.AddForce(movemnet * speed);
    }

    // 트리거 콜라이더를 처음 접촉할 때 호출
    void OnTriggerEnter(Collider other)
    {
        // 오브젝트의 태그 값 비교
        if ( other.gameObject.CompareTag("PickUp"))
        {
            // 오브젝트 비활성화
            other.gameObject.SetActive(false);
            // 점수 카운트 업
            count = count + 1;
        }       
    }

2. UI 점수 텍스트 생성

Hierarchy -> Create -> UI -> Text -> CountText로 이름 변경

CountText -> Color -> 흰색으로 색상 변경

CountText -> Rect Transform -> 설정 (톱니 바퀴) -> Reset

CountText -> Rect Transform -> custom 박스를 Shift + Alt + 마우스 우클릭 -> left, top 선택 

CountText -> Rect Transform -> Pos X : 10, Pos Y : -10 으로 변경

3. UI 승리 텍스트 생성

Hierarchy -> Create -> UI -> Text -> WinText로 이름 변경

WinText-> Color -> 흰색으로 색상 변경

WinText-> Rect Transform -> 설정 (톱니 바퀴) -> Reset ->Pos Y : 75 로 변경

WinText-> Character -> Font Size : 24 로 변경

WinText-> Paragraph -> Alignment 가운데 정렬로 변경

4. UI 점수, 승리 텍스트 초기화 및 표시

PlayerController 스크립트 수정

 // UI 엔진
using UnityEngine.UI;

public class PlayerController : MonoBehaviour {

    // 에디터 안 Inspector에서 편집 가능한 속도 조정 변수 생성
    public float speed;
    // 에디터의 UI 점수 텍스트
    public Text CountText;
    // 에디터의 UI 승리 텍스트
    public Text WinText;

    // Rigidbody 형태의 변수 생성
    private Rigidbody rb;
    // 점수 카운트 변수
    private int count;

    // 스크립트가 활성화된 첫 프레임에 호출
    void Start()
    {
        // 현재 오브젝트의 Rigidbody를 참조
        rb = GetComponent<Rigidbody>();
        // 점수 초기화
        count = 0;
        // 점수 텍스트 표시
        SetCountText();
        // 승리 텍스트 초기화
        WinText.text = "";
    }

    // 프레임을 렌더링 하기 전에 호출
    void Update()
    {

    }

    // 물리효과 계산을 수행하기 전에 호출
    void FixedUpdate()
    {
        // 키보드의 키로 컨트롤하는 수평 축의 입력 (left, right)
        float moveHorizontal = Input.GetAxis("Horizontal");
        // 키보드의 키로 컨트롤하는 수직 축의 입력 (up, down)
        float moveVertical = Input.GetAxis("Vertical");

        // 플레이어의 이동량을 선언 (x축, y축, z축)
        Vector3 movemnet = new Vector3(moveHorizontal, 0, moveVertical);
        // 플레이어의 Rigidbody에서 movement 값만큼 힘을 가해서 이동시킴
        rb.AddForce(movemnet * speed);
    }

    // 트리거 콜라이더를 처음 접촉할 때 호출
    void OnTriggerEnter(Collider other)
    {
        // 오브젝트의 태그 값 비교
        if ( other.gameObject.CompareTag("PickUp"))
        {
            // 오브젝트 비활성화
            other.gameObject.SetActive(false);
            // 점수 카운트 업
            count = count + 1;
            // 점수 텍스트 표시
            SetCountText();
        }
    }

    // 점수 텍스트 표시
    void SetCountText()
    {
        CountText.text = "Count: " + count.ToString();
        // 12개 오브젝트 전부 수집시에 승리 텍스트 표시
        if (count >= 12)
        {
            WinText.text = "You Win!";
        }
    }
}

Player -> Inspector -> Player Controller(Script) -> Count Text, Win Text에 UI Text 설정

 

-Reference

[Displaying the Score and Text] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/displaying-score-and-text?playlist=17141

 

[Unity Tutorial Roll-a-ball 06] Collecting the Pick Up Objects

1. 플레이어 컨트롤러 스크립트에 충돌 트리거 추가

 public class PlayerController : MonoBehaviour {

    // 에디터 안 Inspector에서 편집 가능한 속도 조정 변수 생성
    public float speed;
    // Rigidbody 형태의 변수 생성
    private Rigidbody rb;

    // 스크립트가 활성화된 첫 프레임에 호출
    void Start()
    {
        // 현재 오브젝트의 Rigidbody를 참조
        rb = GetComponent<Rigidbody>();
    }

    // 프레임을 렌더링 하기 전에 호출
    void Update()
    {

    }

    // 물리효과 계산을 수행하기 전에 호출
    void FixedUpdate()
    {
        // 키보드의 키로 컨트롤하는 수평 축의 입력 (left, right)
        float moveHorizontal = Input.GetAxis("Horizontal");
        // 키보드의 키로 컨트롤하는 수직 축의 입력 (up, down)
        float moveVertical = Input.GetAxis("Vertical");

        // 플레이어의 이동량을 선언 (x축, y축, z축)
        Vector3 movemnet = new Vector3(moveHorizontal, 0, moveVertical);
        // 플레이어의 Rigidbody에서 movement 값만큼 힘을 가해서 이동시킴
        rb.AddForce(movemnet * speed);
    }

    // 트리거 콜라이더를 처음 접촉할 때 호출
    void OnTriggerEnter(Collider other)
    {
        // 오브젝트의 태그 값 비교
        if ( other.gameObject.CompareTag("PickUp"))
        {
            // 오브젝트 비활성화
            other.gameObject.SetActive(false);
        }       
    }
}

2. PickUp 오브젝트에 PickUp 태그 달기

Prefabs PickUp -> Inspector -> Tag -> AddTag

Tags -> PickUp 태그 추가

PickUp -> Tag -> PickUp 선택

3. PickUp 오브젝트에 충돌 트리거 활성화

Prefabs PickUp -> Box Collider -> Is Trigger 체크 박스 활성화

4. PickUp 오브젝트에 물리 엔진 추가 (PickUp 오브젝트 애니메이션 최적화)

Prefabs PickUp -> Add Component -> Physics -> Rigidbody -> Is Kinematic 체크 박스 활성화

 

 

-Reference

[Collecting the Pick Up Objects] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/collecting-pick-objects?playlist=17141

[유니티 튜토리얼 예제 Roll-a-ball 05] Creating Collectable Objects

1. 수집 오브젝트 큐브 생성

Hierarchy -> Create -> 3D Object -> Cube -> PickUp으로 이름 변경

PickUp -> Inspector -> Transform -> Reset

2. 플레이어 오브젝트 Active 해제

 Player -> Inspector -> 체크박스 해제

3. PickUp 오브젝트의 모양과 크기 변경

PickUp -> Transofrom -> Position (0, 0.5, 0), Rotation (45, 45, 45), Scale (0.5, 0.5, 0.5) 로 수정

4. PickUp 오브젝트에 실시간 움직임 추가

PickUp -> Add Component -> New Script -> Rotator 스크립트 생성

PickUp -> Rotator 스크립트 수정 -> Scripts 폴더에 드로우 하여 넣기

public class Rotator : MonoBehaviour {
    // Update is called once per frame
    void Update ()
    {
        // transform의 Rotate 값을 시간에 비례하여 변경
     transform.Rotate (new Vector3 (15, 30, 45) * Time.deltaTime);
    }
}

5. PickUp 오브젝트를 Prefabs 로 생성

Project -> Create -> Folder 생성 -> Prefabs 으로 이름 변경

PickUp 오브젝트를 Prefabs 폴더로 드로우하여 넣기

6. PickUp 오브젝트 12개 생성

Hierarchy -> Create Empty -> PickUps 로 이름 변경 -> PickUp 오브젝트를 PickUps로 드로우해서 넣기

PickUp 선택 -> ctrl + D -> 12개 생성해서 Scene에 배치

7. 12개의 PickUp 오브젝트 색상 변경

Project->Materials 폴더 -> Create -> Materials -> PickUp으로 이름 변경 -> Inspector -> Albedo 색상 -> RGB (255, 255, 0)으로 수정

PickUp Material을 Prefabs PickUp에 드로우해서 색상 적용

 

 

 

- Reference

[Creating Collectable Objects] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/creating-collectable-objects?playlist=17141

[Unity Tutorial Roll-a-ball 04] Setting up the Play Area

1. 벽의 부모 게임 오브젝트 생성

GameObject -> Create Empty -> 오브젝트 이름 Walls 로 변경 -> Inspector -> 설정 (톱니 바퀴) -> Reset

2. 벽 큐브 생성

GameObject -> 3D Object -> Cube -> 오브젝트 이름 WestWall 로 변경 -> Inspector -> 설정 (톱니 바퀴) -> Reset -> Walls 오브젝트로 드래그 하여 넣기

3. 벽 큐브 3개 복사하기

WestWall 선택 -> Edit -> Duplicate (단축키 : ctrl + D) -> 각 오브젝트 이름 EastWall, NorthWall, SouthWall 로 변경

4. 벽 큐브 크기와 위치 변경하기

 

 WestWall

EastWall 

NorthWall 

SouthWall 

Position 

 -10, 0, 0

 10, 0, 0

 0, 0, 10

 0, 0, -10

Scale 

 0.5, 2, 20.5

 0.5, 2, 20.5

 20.5, 2, 0.5

 20.5, 2, 0.5

 

 

 

- Reference

[Setting up the Play Area] https://unity3d.com/kr/learn/tutorials/projects/roll-ball-tutorial/setting-play-area?playlist=17141

+ Recent posts