Unity로 게임 프로그래밍: 초보자 가이드

Unity로 게임 프로그래밍: 초보자 가이드
이 가이드는 무료 PDF로 다운로드할 수 있습니다. 지금 이 파일을 다운로드하십시오 . 이것을 복사하여 친구 및 가족과 자유롭게 공유하십시오.

인터넷 경제의 놀라운 특징은 인디 비디오 게임의 부상입니다. 수천 명의 수백만 달러에 달하는 트리플 A 스튜디오의 독점적인 영역이 된 후, 현대 게임 개발 리소스를 개인 또는 소규모 임시 프로그래머 및 디자이너의 손에 제공하는 여러 도구 세트가 개발되었습니다. 우리는 이전에 최고의 인디 게임에 대해 논의한 적이 있으므로 Unity와 같은 도구로 달성할 수 있는 것에 대한 영감을 얻으려면 해당 게임을 확인하십시오.





이러한 인디 게임 개발 팀은 민첩성과 위험 감수성을 입증하여 많은 경우에 대규모 예산을 지원하는 팀보다 더 빠르게 게임 플레이 혁신을 추진할 수 있습니다. 다음을 포함하여 최근 몇 년 동안 놀라울 정도로 성공적인 인디 타이틀이 많이 출시되었습니다. 마인크래프트 , 림보 , 그리고 슈퍼 미트 보이 , 그리고 이런 게임을 만들 기술이 없어도 Buildbox를 사용하여 게임을 만들 수 있습니다.





빠르게 진화하는 인디 게임 개발 환경에서, 단일성 저렴한 비용, 사용 용이성 및 광범위한 기능 세트로 인해 신속한 게임 개발에 이상적입니다. Unity는 매우 유연하여 다음을 수행할 수 있습니다. 나만의 맞춤형 게임 컨트롤러 만들기 약간의 DIY 노하우로!





CCP(Developers of 이브 온라인 ) 게임 개념을 빠르게 프로토타이핑하는 데 사용합니다. Unity는 거의 모든 장르의 비디오 게임에 적용할 수 있는 여러 스크립팅 언어에 대한 후크가 있는 물리 및 렌더링 엔진인 '박스에 들어 있는 게임 엔진'을 제공합니다.

Unity는 게임 환경을 조작하기 위한 시각적 편집기를 제공하지만 Unity는 '제로 프로그래밍' 게임 제작자 도구가 아닙니다. 결과를 생성하도록 프로그래밍해야 하지만 '게임 제작자' 프로그램이 할 수 있는 것보다 훨씬 더 유연하고 강력한 도구를 제공합니다.



Unity가 당신을 위해 일하지는 않지만 진입 장벽을 상당히 낮춥니다. C++ 및 OpenGL을 사용하여 완전히 처음부터 시작하면 실제로 화면에 렌더링되는 지점에 도달하는 데 며칠이 걸릴 수 있습니다. Unity를 사용하면 약 10초가 걸립니다. Unity는 빠르고 직관적인 방식으로 초보 프로그래머에게 게임 제작의 기본 요소를 제공합니다.

오늘은 Unity에서 게임을 만들기 위해 알아야 할 모든 것을 안내해 드리겠습니다. 이 내용은 10개의 주요 챕터로 나뉩니다.





§1– Unity 버전

§2– Unity 설치





§3–객체 지향 패러다임에 대한 간략한 소개

§4–Unity 기본 사항

§5–예: 게임의 기본 요소

§6– Unity의 스크립팅

§7–예: 스크립팅 퐁

§8–문서 탐색/자세히 알아보기

§9 – 게임 빌드/독립 실행형 애플리케이션으로 컴파일

§10-마무리 메모

1. Unity 버전

Unity는 프로 버전과 무료 버전의 두 가지 기본 버전으로 제공됩니다. 있다 차이의 수 , 그러나 일반적으로 프로 버전은 여러 가지 시각적 개선 사항(예: 실시간 부드러운 그림자 및 후처리)과 더 복잡한 게임에 매우 유용한 비교적 사소한 기능을 다수 지원합니다.

즉, 빌드하려는 비교적 간단한 게임의 경우 Unity의 무료 버전이 완벽하게 적합합니다. 관심 있는 분들을 위해 아래에서 주요 차이점을 자세히 설명하겠습니다.

1.1 가격

Unity의 무료 버전은 물론 무료입니다. 그러나 몇 가지 제한 사항이 있습니다. Unity의 무료 버전은 연간 소득이 $ 100,000 . 이러한 조직은 이 가이드의 범위를 벗어나지만, 그러한 조직이 될 수 있다고 의심되는 경우 Pro 버전을 선택하는 것이 현명할 것입니다.

Unity의 Pro 버전은 $ 75 한 달, 또는 $ 1500 영구 라이센스를 위해 생성된 게임으로 수행할 수 있는 작업에는 제한이 없습니다. 사용 가능한 기능에 대한 완전한 개요를 제공하기 위해 이 가이드에서 사용할 30일 무료 평가판도 있습니다. 1년 학생 라이선스도 제공됩니다. 공부하다 ~을위한 $ 129 .

1.2 특징

Unity 무료 버전에는 많은 기능이 없습니다. 그러나 가장 중요한 차이점은 다음과 같습니다. Unity의 무료 버전에는 더 보기 좋고 빠르게 실행되는 게임(LOD 지원, 화면 공간 후처리, 고급 셰이더, 실시간 소프트 그림자 및 지연된 렌더링). 또한 전체가 부족합니다. 메카님 애니메이션 시스템 , 일부 AI 도구.

일반적으로 복잡한 대규모 프로젝트 또는 그래픽 성능이 중요한 프로젝트의 경우 프로 버전이 적합합니다. 저는 Oculus Rift용 가상 현실 게임을 개발하기 때문에 Pro 버전을 사용하고 헤드셋과 올바르게 상호 작용하려면 화면 공간 후처리 지원이 필요합니다.

2. 유니티 설치

Unity는 설치가 간단합니다. 다음에서 실행 파일을 다운로드할 수 있습니다. unity3d.com/get-unity/download .

다운로드가 완료되면 실행한 다음 설치 프로그램 지침을 따르십시오. 설치가 완료되면 'Unity 라이선스 활성화' 창이 나타납니다. 'Unity Pro 30일 무료 평가판 활성화' 확인란을 선택한 다음 '확인'을 선택합니다.

축하합니다! 이제 Unity Pro 30일 평가판을 사용할 수 있습니다. 평가판 만료 후 프로 버전을 구매하지 않으려면 무료 버전으로 전환하고 기존 콘텐츠를 유지할 수 있습니다.

아이폰 12 대 아이폰 12 프로 맥스

3. 객체 지향 패러다임에 대한 간략한 소개

Unity를 시작하기 전에 기본 사항을 조금 살펴보는 것이 중요합니다. Unity는 두 가지를 모두 지원합니다. 씨 # 그리고 자바스크립트 ~을위한 게임 프로그래밍 ; 이 자습서에서는 C#으로 작업합니다.

먼저, 이전에 프로그래밍한 적이 없다면 이 자습서를 제쳐두고 며칠 동안 Microsoft의 C # 언어 입문서 간단한 작업에 언어를 사용하는 것이 편안할 때까지.

C#과 조금 다른 것을 원하면(단, Unity에서 사용할 수 있는 언어는 아닐 수 있음) 초보자를 위한 가장 쉬운 6가지 프로그래밍 언어 가이드를 살펴보세요.

이전에 C 또는 Java와 같은 명령형 또는 객체 지향 언어로 프로그래밍한 적이 있다면 입문서를 훑어보고 C#이 과거에 사용한 다른 언어와 어떻게 다른지 숙지하십시오. 어느 쪽이든, C#으로 간단한 문제를 해결하는 데 익숙해질 때까지 튜토리얼을 진행하지 마십시오. Google에 문의).

여기서 이해해야 할 가장 중요한 개념은 객체지향 패러다임(약칭: 열려있는 ). 객체 지향 언어에서 프로그램은 기능 단위로 나뉩니다. 사물 . 각 개체에는 고유한 개인 변수와 기능이 있습니다. 개체별 함수가 호출됩니다. 행동 양식 .

여기에서 아이디어는 모듈화입니다. 각 개체를 격리하고 다른 개체가 해당 메서드를 통해 해당 개체와 상호 작용하도록 함으로써 가능한 의도하지 않은 상호 작용의 수를 줄일 수 있습니다. 더 나아가 버그도 줄일 수 있습니다. 나중에 수정 없이 재사용할 수 있는 개체를 만들 수도 있습니다. Unity에서는 이러한 개체를 빌드하고 게임 개체 (누구의 행동을 지배할 것인가).

개체는 다음에서 인스턴스화됩니다. 클래스 : 클래스는 객체의 정의를 배치하는 파일일 뿐입니다. 따라서 원하는 경우 무크 게임에서 적에 대한 AI를 처리하는 개체가 있는 경우 'Mook' 클래스를 작성한 다음 해당 파일을 모든 적 엔티티에 첨부합니다. 게임을 실행하면 각 적에게 'Mook' 개체 사본이 장착됩니다.

새 스크립트를 개체에 연결하는 것은 다음과 같습니다.

첫 번째, 개체를 선택 그리고 로 이동 조사관 . 클릭 구성 요소 추가 단추.

이동 새 스크립트 , 원하는 이름을 입력하고 생성 및 추가 .

이제 두 번 클릭하여 편집할 수 있는 새 스크립트가 생겼습니다!

클래스 파일은 다음과 같습니다.

using UnityEngine;
public class Mook : MonoBehaviour {
private float health;
void Start () {
health = 100;
}
void Update(){
if (health > 0) {
/* Search for player
if you encounter the player on the road, kill him
if you get shot, remove a random amount of health */
}
}
}

이것을 분해해보자:

  • UnityEngine 사용: 이 줄은 Unity 게임 엔진에 연결할 수 있는 Unity 라이브러리를 사용하고 싶다고 C#에 알려줍니다.
  • 공개 클래스 Mook : MonoBehaviour: 이 줄은 클래스와 이름을 선언합니다. 무크 .
  • 개인 부유물 건강: 이것은 개인 클래스 변수를 선언합니다(클래스 내부에서만 변경할 수 있음). 변수에 값이 지정됩니다. 시작 .
  • 무효 시작(): 이것은 다음과 같은 메소드를 선언합니다. 시작 . 시작은 게임이 처음 시작될 때 한 번만 실행되는 특별한 방법입니다.
  • 무효 업데이트(): 업데이트는 모든 프레임에서 실행되는 또 다른 특별한 방법입니다. 대부분의 게임 논리가 여기에 표시됩니다.
  • // 길에서 플레이어를 만나면 그를 죽입니다: 이 줄은 주석입니다(이중 슬래시로 시작하는 줄은 C#에서 무시됩니다). 주석은 코드의 특정 비트가 하는 일을 상기시키는 데 사용됩니다. 이 경우 이 주석은 주석이 설명하는 것을 실제로 수행하는 더 복잡한 코드 블록을 대신하는 데 사용됩니다.

와 함께 시작 그리고 업데이트 , 거의 모든 이름으로 고유한 메서드를 인스턴스화할 수 있습니다. 그러나 생성한 메서드는 호출되지 않는 한 실행되지 않습니다. 라는 가상의 클래스에 대한 메서드를 선언해 보겠습니다. 두 개의 숫자를 추가 두 개의 숫자를 더합니다.

public float addTwoNumbers(float a, float b) {
return a+b;
}

이것은 float를 반환하는 public(다른 객체에 접근 가능) 메소드를 선언합니다. 두 개의 숫자를 추가 , 두 개의 부동 소수점을 입력으로 사용합니다( 에게 그리고 NS ). 그런 다음 두 값의 합계를 출력으로 반환합니다.

동일한 클래스 내에서 이 메서드를 호출합니다(예: 내부에서 업데이트 ) 다음과 같이 보입니다.

float result = addTwoNumbers(1, 2);

다른 클래스에서 메서드를 호출하는 것은 비슷합니다.

addTwoNumbers instance;
float result = instance.addTwoNumbers(1, 2);

다시 말하지만, 이것은 우리 클래스의 인스턴스를 생성하고 적절한 메소드에 액세스하여 추가하려는 숫자를 제공한 다음 결과를 다음 위치에 저장합니다. 결과 . 단순한.

스크립트가 일반 GameObject 매개변수 집합에서 액세스할 수 없는 특수 속성(예: 파티클 이미터)이 있는 개체에 연결된 경우 다음을 사용하여 다른 종류의 게임 개체로 처리하도록 선택할 수 있습니다. 구성 요소 가져오기 방법.

이에 대한 구문은 다음과 같습니다.

GetComponent().Play();

이 중 하나라도 익숙하지 않은 경우 돌아가서 C# 입문서를 살펴보십시오. 진행하면서 많은 좌절감을 덜어줄 것입니다.

4. Unity 기초

이 섹션에서는 Unity 엔진의 기본 메커니즘을 살펴보겠습니다. Unity의 워크플로는 다음과 같습니다.

  1. 게임에서 역할을 수행할 엔터티를 만듭니다(공백 게임오브젝트 추상적인 논리적 작업에 사용할 수 있음).
  2. 클래스 파일을 작성하거나 찾아서 엔터티에 스크립트로 추가합니다( 구성 요소 추가 버튼 조사관 보다.
  3. 운영 > 시험 > 디버그 > 반복하다 작동하고 게임의 다음 요소로 넘어갈 때까지.

Unity는 사용자의 취향에 따라 다양한 방식으로 배치할 수 있는 여러 기본 보기 탭과 함께 제공됩니다. 빅 5는 다음과 같습니다.

  1. 게임: 상호 작용하고 테스트할 수 있는 게임의 실행 중인 인스턴스를 표시합니다.
  2. 장면: 수정 가능한 정적 버전을 제공합니다. 게임 세계 .
  3. 조사관: 게임 세계에서 개별 엔티티를 선택하여 수정할 수 있습니다. 편집자 탭.
  4. 프로젝트: 프로젝트의 파일을 탐색하고 모델, 재료 및 기타 리소스를 편집자 탭을 클릭하여 게임 세계에 배치합니다.
  5. 계층: 이 탭은 세계의 모든 개체를 표시하므로 장면에서 멀리 있는 개체를 찾을 수 있으며 클릭하고 끌어서 서로에 대한 상위 개체를 찾을 수 있습니다.

이 모든 것의 위치는 아래 다이어그램을 참조하십시오.

4.1 유니티 엔티티

4.1.1 메쉬

메쉬가 방법입니다 3D 기하학 유니티로 표현됩니다. Unity의 내장 기능을 사용할 수 있습니다. 원어 개체(큐브, 구, 원통 등) 또는 다음과 같은 모델링 패키지에서 고유한 3D 모델 가져오기 블렌더 또는 마야 . Unity는 다음을 포함한 다양한 3D 형식을 지원합니다. .fbx , 그리고 .3ds .

메쉬를 조작하기 위한 기본 도구는 인터페이스의 왼쪽 상단 모서리에 있는 크기 조정, 회전 및 변환 버튼입니다. 이 버튼은 편집기 보기의 모델에 제어 아이콘을 추가한 다음 공간에서 모델을 조작하는 데 사용할 수 있습니다. 개체의 질감 또는 물리적 속성을 변경하려면 해당 속성을 선택하고 조사관 분석하는 보기 재료 그리고 강체 집단.

4.1.2 GUI 요소

기존 GUI 스프라이트 및 텍스트는 다음을 사용하여 표시할 수 있습니다. GUI 텍스트 그리고 GUI 텍스처 에디터의 게임오브젝트. 그러나 UI 요소를 처리하는 보다 강력하고 현실적인 방법은 3D 텍스트 그리고 쿼드 HUD 요소를 게임 세계에 개체로 배치하기 위한 GameObjects(투명 텍스처 및 조명이 없는 투명 셰이더 포함).

에서 계층 보기에서 이러한 게임 플레이 요소를 기본 카메라로 드래그하여 어린이로 만들고 카메라와 함께 움직이고 회전하도록 할 수 있습니다.

GUI 요소(텍스트 및 텍스처)는 인스펙터 탭의 관련 필드를 사용하여 크기와 배율을 조정할 수 있습니다.

4.1.3 재료

머티리얼은 텍스처와 셰이더의 조합이며 프로젝트 탭에서 게임 개체로 직접 드래그할 수 있습니다. 많은 수의 셰이더가 Unity Pro와 함께 제공되며 해당 셰이더가 적용된 개체의 인스펙터 탭을 사용하여 셰이더에 연결된 텍스처를 조정할 수 있습니다.

텍스처를 가져오려면 다음으로 변환하십시오. .jpg , .png , 또는 .bmp , 그리고 그것을 자산 Unity 프로젝트 디렉토리 아래의 폴더( 내 문서 기본적으로). 몇 초 후 편집기에 로딩 바가 나타납니다. 완료되면 아래의 텍스처로 이미지를 찾을 수 있습니다. 프로젝트 탭.

4.1.5 조명

조명은 게임오브젝트 세상에 빛을 비추는 것. 장면에 조명이 없으면 모든 다각형이 동일한 밝기 수준으로 그려져 세계에 평평하고 바랜 모양을 제공합니다.

조명은 위치를 지정하고 회전할 수 있으며 사용자 정의할 수 있는 몇 가지 내부 특성이 있습니다. NS 강함 슬라이더는 빛의 밝기를 제어하고 범위 얼마나 빨리 페이드 아웃하는지 제어합니다.

가이드라인 장면보기 조명의 최대 범위를 보여줍니다. 원하는 효과를 얻으려면 두 설정을 모두 사용하십시오. 조명의 색상, 패턴( 쿠키 빛이 향하는 표면에 표시되며 빛을 직접 볼 때 화면에 나타나는 플레어의 종류. 쿠키는 보다 사실적인 조명 패턴을 가짜로 만들고 극적인 거짓 그림자를 만들고 프로젝터를 시뮬레이션하는 데 사용할 수 있습니다.

빛의 세 가지 주요 종류는 다음과 같습니다. , 가리키다 , 그리고 방향성 .

스포트 라이트 3D 공간에 위치를 가지며 가변 각도의 원뿔에서 한 방향으로만 빛을 투사합니다. 이들은 손전등, 탐조등에 적합하며 일반적으로 조명을 보다 정밀하게 제어할 수 있습니다. 스포트라이트는 그림자를 드리울 수 있습니다.

포인트 라이트 3D 공간에 위치를 가지며 모든 방향으로 균일하게 빛을 투사합니다. 포인트 라이트는 그림자를 드리우지 않습니다.

방향등 , 마지막으로 태양광을 시뮬레이션하는 데 사용됩니다. 마치 무한히 멀리 떨어진 방향으로 빛을 투사합니다. 방향 조명은 장면의 모든 개체에 영향을 미치며 그림자를 생성할 수 있습니다.

4.1.6 입자 시스템

에게 입자 시스템 이다 게임오브젝트 수백 또는 수천 개의 입자를 동시에 생성하고 제어합니다. 입자는 3D 공간에 표시되는 작고 최적화된 2D 개체입니다. 입자 시스템은 단순화된 렌더링 및 물리학을 사용하지만 말더듬 없이 실시간으로 수천 개의 개체를 표시할 수 있으므로 연기, 불, 비, 불꽃, 마법 효과 등에 이상적입니다.

이러한 효과를 얻기 위해 조정할 수 있는 많은 매개변수가 있으며 아래에 파티클 시스템을 생성하여 액세스할 수 있습니다. 구성 요소 편집기 > 입자 시스템 선택 > 인스펙터 탭 열기 . 각 입자의 크기, 속도, 방향, 회전, 색상 및 질감을 변경할 수 있으며 대부분의 매개변수도 시간이 지남에 따라 변경되도록 설정할 수 있습니다.

아래의 충돌 속성을 활성화하고 시뮬레이션 공간을 다음으로 설정하면 세계 비, 움직이는 물, 스파크를 비롯한 여러 사실적인 입자 효과에 사용할 수 있는 세계의 개체와 충돌하는 입자를 얻을 수 있습니다.

5. 예: 게임의 기본 요소

이 튜토리얼에서는 간단한 게임을 만들 것입니다. -- 이전에 DIY에서 여러 번 다룬 내용:

  • 아두이노 클래식 탁구
  • 아두이노 OLED 퐁

이 섹션에서는 핵심 요소를 정렬하는 방법을 살펴보겠습니다. 스크립팅 자습서는 나중에 나옵니다.

먼저 Pong 게임을 기본 구성 요소로 분해해 보겠습니다. 먼저 두 개의 노와 공이 필요합니다. 공이 화면 밖으로 날아가므로 이를 재설정하는 메커니즘이 필요합니다. 또한 텍스트에 현재 점수가 표시되기를 원하며 Unity의 모든 핵심 요소를 보여주기 위해 공을 칠 때 멋진 입자 효과를 원합니다. 게임 전체를 극적으로 조명해야 합니다.

로 분해됩니다. 공 개체 (구), 생성기 , 두 개의 패들 소품 포함 입자 방사체 첨부, 3D 텍스트 엔터티 , 그리고 스포트 라이트 . 이 튜토리얼에서는 기본 물리적 재질을 사용합니다. 되튐 , 와 함께 바운스 콤바인 로 설정 곱하다 . 10개의 스크린샷에서 설정은 다음과 같습니다.

먼저, 생성 큐브 소품 패들용.

적절하게 확장하고, 복제 , 그리고 넣어 구체 공의 패들 사이.

그런 다음 생성 3D텍스트 객체 그리고 규모 그리고 위치 올바르게 변경 글꼴 크기 덜 픽셀화된 이미지를 얻기 위한 속성입니다.

다음으로 2개 생성 입자 시스템 , 원하는 특성을 선택하고 패들에 부착합니다.

다음으로 다음을 원할 것입니다. 카메라 위치 지정 및 회전 장면을 올바르게 구성합니다. 카메라가 선택되어 있는 동안 오른쪽 하단 모서리에서 카메라 보기의 작은 미리보기를 볼 수 있습니다.

완료하기 전에 볼이 게임 영역에서 튀어 나오지 않도록 범퍼로 사용할 두 개의 추가 큐브를 만들어야 합니다. 체크를 해제하여 보이지 않게 할 수 있습니다. 메쉬 렌더러 에서 인스펙터 탭 .

플레이를 누르면 게임의 기본 요소가 배치된 것을 볼 수 있습니다. 그들은 아직 아무것도 하지 않을 것이지만 우리는 그것에 도달할 것입니다!

이제 설정이 완료되었으므로 게임을 만들기 위해 이러한 요소를 스크립팅하는 것과 관련된 사항에 대해 이야기하겠습니다.

6. Unity의 스크립팅

개체에 스크립트가 첨부되어 있으면 해당 개체를 두 번 클릭하여 수정할 수 있습니다. 조사관 . 이 열립니다 모노디벨롭 , Unity의 기본 개발 환경입니다. 본질적으로 Monodevelop은 특히 프로그래밍에 최적화된 기능을 갖춘 텍스트 편집기입니다.

키워드 및 주석은 에서 강조 표시됩니다. 파란색 그리고 초록 , 숫자 값과 문자열이 나타납니다. 그물 . 사용했다면 또는 다른 IDE의 MonoDevelop은 매우 유사합니다. 당신은 할 수 있습니다 짓다 다음과 같이 구문 오류를 확인하기 위해 편집기 내부에서 스크립트를

일반적으로 스크립트가 Unity와 상호작용하도록 하려면 스크립트를 보유하고 있는 객체가 소유한 요소를 참조해야 합니다(아래에서 이러한 요소 목록을 볼 수 있습니다). 조사관 해당 개체 선택 시 탭). 그런 다음 메서드를 호출하거나 이러한 각 요소에 대한 변수를 설정하여 원하는 변경 사항을 적용할 수 있습니다.

개체의 스크립트가 다른 개체의 속성에 영향을 미치도록 하려면 빈 개체를 만들 수 있습니다. 게임오브젝트 스크립트에서 변수를 사용하고 조사관 장면의 다른 개체에 할당합니다.

객체가 가질 수 있는 요소 목록은 다음과 같습니다(위의 예에서 패들 중 하나의 인스펙터 보기에서 가져옴).

  1. 변환
  2. 큐브(메쉬 필터)
  3. 박스 콜라이더
  4. 메쉬 렌더러

개체의 이러한 각 측면은 스크립트 내에서 영향을 받을 수 있습니다. 다음으로 정확히 어떻게 되는지 살펴보겠습니다.

6.1 변환

Unity의 게임 오브젝트에 대한 변환 기능은 해당 오브젝트의 물리적 매개변수를 제어합니다. 규모 , 그것의 위치 , 그리고 그것의 정위 . 다음과 같이 스크립트 내에서 액세스할 수 있습니다.

transform.position = newPositionVector3;
transform.rotation = newRotationQuaternion;
transform.localScale = newScaleVector3;

위의 예에서 명명된 변수는 이름에 지정된 유형입니다. 여기에 몇 가지 주요 세부 정보가 있습니다. 위치와 스케일은 예상대로 다음과 같이 저장됩니다. 벡터3 . 액세스할 수 있습니다. NS , 그리고 , 그리고 와 함께 각 구성 요소(예: 변환.위치.y 제로 평면 위의 물체까지의 거리를 알려줍니다).

그러나 피하기 위해 짐벌 잠금 , 회전은 다음과 같이 처리됩니다. 쿼터니언 (4성분 벡터). 쿼터니언을 수동으로 조작하는 것은 직관적이지 않기 때문에 다음을 사용하여 오일러 각도를 사용하여 회전을 조작할 수 있습니다. 쿼터니언.오일러 다음과 같은 방법:

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

한 장소에서 다른 장소로 물건을 부드럽게 옮기고 싶다면 다음을 찾을 수 있습니다. 슬러프 쿼터니언 및 vector3에 대한 방법이 도움이 됩니다. Slerp는 현재 상태, 최종 상태, 변경 속도의 세 가지 인수를 받아 주어진 속도로 매끄럽게 보간합니다. 구문은 다음과 같습니다.

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2 렌더러

Unity의 렌더러 기능을 사용하면 소품의 표면이 화면에 렌더링되는 방식을 제어할 수 있습니다. 텍스처를 재할당하고, 색상을 변경하고, 개체의 셰이더 및 가시성을 변경할 수 있습니다. 구문은 다음과 같습니다.

renderer.enabled = false;
renderer.material.color = new Color(0, 255, 0);
renderer.material.mainTexture = myTexture;
renderer.material.shader = newShader;

이들 대부분은 꽤 명확한 기능을 가지고 있습니다. 첫 번째 예는 문제의 개체를 보이지 않게 합니다. 여러 상황에서 유용한 트릭입니다. 두 번째 예는 새로운 RGB 색상 (즉, 녹색) 해당 개체에. 세 번째는 기본 확산 텍스처를 새 텍스처 변수에 할당합니다. 마지막 예제는 오브젝트 재질의 셰이더를 새로 정의된 셰이더 변수로 변경합니다.

6.3 물리학

Unity는 물리 샌드박스 게임에서 모두 사용하는 통합 물리 엔진과 함께 제공됩니다. 이를 통해 개체의 물리적 속성을 할당하고 시뮬레이션의 세부 정보를 처리할 수 있습니다. 일반적으로 교과서와 변환 시스템을 사용하여 자신의 물리학을 구현하려고 하는 것보다 Unity의 물리 엔진을 최대한 사용하는 것이 더 간단하고 강력합니다.

모든 물리 소품이 필요합니다 충돌기 . 그러나 실제 시뮬레이션 자체는 강체 에 추가할 수 있습니다. 조사관 보다. 리지드바디 수 운동학적 또는 비운동학적 .

Kinematic physical props는 주변의 nonkinematic physical props와 충돌(및 영향)하지만 충돌 자체의 영향을 받지 않습니다. Static Kinematic props는 움직일 수 없는 물체이고 움직이는 Kinematic 물체는 멈출 수 없는 힘입니다.

그 외에도 물체의 각 끌림(회전하는 데 필요한 에너지 양)을 조정하고, 질량을 변경하고, 중력의 영향을 받는지 여부를 지정하고, 힘을 가할 수 있습니다.

예:

rigidbody.angularDrag = 0.1f;
rigidbody.mass = 100;
rigidbody.isKinematic = false;
rigidbody.useGravity = true;
rigidbody.AddForce(transform.forward * 100);

이것들은 모두 꽤 자명합니다. 여기서 주의할 점은 변형 포워드 . Vector3에는 모두 세 가지 구성 요소가 있습니다( .앞으로 , .위로 , 그리고 .오른쪽 ) 액세스할 수 있고 함께 회전할 수 있습니다( 앞으로 편집기에서 파란색 화살표의 방향입니다). NS 변형 포워드 키워드는 단순히 크기가 1인 현재 개체에 대한 순방향 벡터입니다. 개체에 더 많은 힘을 가하기 위해 부동 소수점을 곱할 수 있습니다. 당신은 또한 참조할 수 있습니다 변형.업 그리고 변형.right , 그리고 그것들을 부정하여 반대를 얻습니다.

6.4 충돌

종종 게임을 빌드할 때 충돌로 인해 단순한 물리 시뮬레이션 이상으로 코드의 상태가 변경되기를 원합니다. 이를 위해서는 다음이 필요합니다. 충돌 감지 방법 .

Unity에서 충돌을 감지하려면 어느 정도의 준비 작업이 필요합니다. 첫째, 충돌의 객체 중 적어도 하나는 다음이 필요합니다. 비운동학적 강체 그것에 붙어 있습니다. 두 개체 모두 비 트리거로 설정된 올바른 충돌기가 있어야 합니다. 두 개체의 총 속도는 단순히 서로를 건너뛰는 대신 실제로 충돌할 만큼 충분히 낮아야 합니다.

모든 것을 처리했다면 충돌을 확인하려는 개체에 첨부된 스크립트에 특별한 충돌 감지 방법을 배치하여 충돌을 확인할 수 있습니다. 방법은 다음과 같습니다.

void OnCollisionEnter(Collision other) {
//do things here
}

이 메서드는 다른 개체가 개체에 닿는 첫 번째 프레임 동안 자동으로 실행됩니다. 충돌 개체 다른 치는 물체에 대한 참조입니다. 예를 들어 다음을 참조할 수 있습니다. 게임오브젝트 , 강체 , 그리고 변환 다양한 방법으로 조작하는 특성. 하는 동안 충돌시 엔터 아마도 가장 많이 사용하게 될 기능일 것입니다. 충돌 종료 시 그리고 온콜리전스테이 (그렇지 않으면 동일한 구문 및 사용법으로), 개체와 충돌을 중지하는 첫 번째 프레임 동안 및 개체와 충돌하는 모든 프레임 동안 각각 활성화됩니다.

때로는 레이캐스팅 . 레이캐스팅에서 무한히 가는 선(a 레이 )는 어떤 벡터를 따라 어떤 원점에서 세계를 통해 캐스트되며, 무언가에 부딪힐 때 첫 번째 충돌의 위치 및 기타 세부 사항이 반환됩니다. 레이캐스트의 코드는 다음과 같습니다.

RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) {
float distanceToGround = hit.distance;
}

이것은 -Vector3.up(직선)을 따라 현재 객체의 위치에서 광선을 던지고 변수를 연결합니다. 때리다 충돌하는 첫 번째 객체로 이동합니다. 광선이 무언가에 부딪히면 액세스할 수 있습니다. hit.distance 얼마나 멀리 떨어져 있는지 확인하거나 hit.GameObject 부딪힌 물체를 조작합니다.

이와 같은 레이캐스트는 저격수가 총이 가리키는 대상을 결정하거나 카메라가 물체를 볼 때 물체를 선택하거나 특정 스타일의 움직임 메커니즘에 사용할 수 있습니다.

6.5 시간 수정

이러한 방식으로 개체를 조작할 때 염두에 두어야 할 한 가지 중요한 요소는 프레임 속도 . 아무리 신중하게 최적화하더라도 프레임 속도는 항상 달라지며 그에 따라 게임 속도가 달라지는 것을 원하지 않습니다. 다른 사람이 당신이 개발한 것보다 더 빠른 컴퓨터에서 당신의 게임을 실행한다면, 당신은 게임이 두 배 속도로 실행되는 것을 원하지 않을 것입니다.

이를 수정하는 방법은 사용 중인 값에 마지막 프레임을 렌더링하는 데 걸린 시간을 곱하는 것입니다. 이것은 다음을 사용하여 수행됩니다. 시간.델타시간 . 이것은 모든 프레임을 증가시키는 모든 변수의 속도를 효과적으로 변경합니다. 프레임당 변경 에게 초당 변경 , 매 프레임마다 증가 또는 감소하는 값으로 변경해야 합니다.

6.6 오디오 소스 및 청취자

이제 객체를 생성, 렌더링 및 제어하는 ​​방법을 다루었으므로 컴퓨터 게임이 제공할 수 있는 다른 의미에 대해 이야기해 보겠습니다. 소리 . Unity는 두 가지 종류의 사운드를 지원합니다. 2D 그리고 3D 소리. 3D 사운드는 거리에 따라 볼륨이 달라지며 카메라를 기준으로 움직일 때 왜곡됩니다. 2D 사운드는 그렇지 않습니다.

2D 사운드는 음성 해설 및 배경 음악에 적합하고 3D 사운드는 세계의 이벤트에 의해 생성되는 사운드에 적용됩니다. 사운드가 3D인지 여부를 변경하려면 프로젝트 보기로 전환 조사관 드롭다운 메뉴에서 적절한 옵션을 보고 선택한 다음 재수입 단추.

실제로 사운드를 재생하려면 다음을 연결해야 합니다. 오디오 소스 소품으로(3D 사운드의 경우 사운드를 발생시키려는 소품). 그런 다음 열어야합니다. 오디오 클립 필드를 클릭하고 사운드 파일을 선택합니다.

Windows 10용 안드로이드 태블릿 에뮬레이터

당신이 사용할 수있는 myAudioSource.Pause() 그리고 myAudioSource.Play() 해당 사운드 파일을 제어합니다. 아래에 있는 사운드의 폴오프 동작, 볼륨 및 도플러 이동을 조정할 수 있습니다. 조사관 오디오 소스에 대한 탭입니다.

6.7 입력

사용자의 입력을 받지 않는 게임은 게임이 아닙니다. 읽을 수 있는 다양한 종류의 입력이 있으며 거의 ​​모든 입력은 다음을 통해 액세스할 수 있습니다. 입력 그리고 키 코드 사물. 다음은 프레임마다 평가된 값이 있는 일부 샘플 입력 문입니다.

Vector3 mousePos = Input.mousePosition;
bool isLeftClicking = Input.GetMouseButton(0);
bool isPressingSpace = Input.GetKey(KeyCode.Space);

이 라인의 기능은 대부분 자명합니다. 이 세 종류의 입력 참조를 사용하여 대부분의 최신 3D 컴퓨터 게임의 제어 체계를 재구성할 수 있습니다.

6.8 스크립트 디버깅

스크립트가 작동하지 않는다고 가정해 보겠습니다. 좋은 의사가 말했듯이 bangups와 hangups는 당신에게 일어날 수 있습니다. C#에 명백한 구문 오류가 있는 경우 일반적으로 플레이를 눌렀을 때 게임 실행이 거부되며 다음과 같은 경우 꽤 유용한 오류 메시지가 제공됩니다. 짓다 편집기 내에서 스크립트. 아래 참조:

이러한 버그는 일반적으로 수정하기가 가장 어렵지 않습니다. 더 문제가 될 수 있는 것은 미묘한 의미론적 오류로, 유효한 C#으로 가득 찬 파일을 성공적으로 작성했습니다. 이러한 오류 중 하나가 있고 이를 추적하는 데 문제가 있는 경우 상황을 개선하기 위해 시도할 수 있는 몇 가지 방법이 있습니다.

첫 번째는 게임 실행을 일시 중지하고 콘솔을 확인하는 것입니다. 클릭하면 게임을 일시 중지할 수 있습니다. 정지시키다 편집기의 중간 상단 부분에 있는 아이콘을 선택한 다음 콘솔 바닥에서 창문 메뉴(또는 Ctrl 키 > 옮기다 > ). 오류가 없더라도 경고는 문제가 발생할 수 있는 몇 가지 단서를 제공하는 데 여전히 도움이 될 수 있습니다.

이것이 작동하지 않으면 내부 변수의 상태를 인쇄하여 프로그램이 생각한 대로 수행되고 있는지 확인하여 스크립트 상태에 대한 아이디어를 얻을 수도 있습니다. 당신이 사용할 수있는 디버그 로그(문자열) 프로그램 실행이 해당 행에 도달할 때 문자열의 내용을 콘솔에 인쇄합니다. 일반적으로, 일어나야 한다고 생각하는 것에서 역으로 작업하면, 결국에는 디버그 인쇄가 예상한 대로 되지 않는 지점에 도달하게 됩니다. 그것이 당신의 오류가있는 곳입니다.

7. 예제: Pong 스크립팅

Pong을 구축하려면 게임을 핵심 요소로 분류해 보겠습니다. 더 빠른 속도로 패들 사이에서 앞뒤로 튕기는 공이 필요하고, 공이 패들을 통과할 때를 아는 스코어보드가 필요하며, 이에 대한 메커니즘이 필요합니다. 그런 일이 발생하면 볼을 다시 시작합니다. 좋은 첫 번째 단계는 공에 비운동학적 강체를 추가하고 패들에 두 개의 운동학적 강체를 추가하고 모든 것에 대해 중력을 비활성화하고 표준 자산( 되튐 ~와 함께 바운스 콤바인 로 설정 곱하다 ).

아래에서 설명 주석과 함께 공에 대한 스크립트를 볼 수 있습니다. 공은 몇 가지 기본 목표를 달성해야 합니다. 공은 복잡한 패턴으로 튀고 항상 두 축의 움직임을 유지해야 하며 수평 방향으로 도전적이지만 불가능한 속도로 가속해야 합니다.

볼핸들러.cs

다음으로 아래에서 볼 수 있는 패들을 스크립팅해야 합니다. 패들은 키 누름에 대한 응답으로 위아래로 움직여야 합니다(그러나 특정 범위를 벗어나서는 안 됨). 또한 파티클 시스템이 무언가와 충돌할 때 트리거해야 합니다.

패들 핸들러.cs

다음으로 적 AI가 필요합니다. 적의 패들이 고정된 속도로 공을 향해 추적하도록 하는 것입니다. 이를 위해 최대 단순성을 위해 Vector3.Slerp를 사용할 것입니다. 우리는 또한 우리 자신의 패들에서 볼 수 있는 것과 동일한 입자 동작을 원합니다.

EnemyAI.cs

마지막으로 점수판을 업데이트하고 공이 범위를 벗어날 때 다시 설정하는 스크립트가 필요합니다.

ScoreboardUpdater.cs

해당 스크립트가 첨부되고 참조가 채워지면 Pong 게임을 실행할 때 게임 플레이를 경험하게 됩니다!

당신은 할 수 있습니다 내 Pong 데모 다운로드 , 내가 설명한 모든 것을 실제로 보고 싶다면. Windows, Mac 및 Linux 시스템에서 실행됩니다.

8. 문서 탐색 / 자세히 알아보기

Unity는 이 스타일의 가이드에서 다룰 수 있는 것보다 훨씬 더 많은 기능을 포함하는 복잡한 엔진이며 인터넷에서 사용할 수 있는 광범위한(무료 및 상업용) Unity 확장을 포함하기 전입니다. 이 가이드는 게임 개발을 위한 강력한 출발점을 제공하지만 자기 교육은 모든 노력에서 중요한 기술이며 여기에서도 두 배로 중요합니다.

여기서 중요한 리소스는 Unity 스크립트 참조 . ScriptReference는 C# 및 Javascript 모두에서 사용할 수 있는 검색 가능한 데이터베이스로, 모든 Unity 명령 및 기능 목록과 기능 설명 및 간단한 구문 예제가 있습니다.

Unity의 편집기 및 인터페이스에 문제가 있거나 선호하는 비디오 자습서와 같은 경우 고품질의 긴 목록이 있습니다. Unity 비디오 튜토리얼 사용 가능. 더 광범위함(그러나 덜 광범위함) Unity용 텍스트 튜토리얼 CatLikeCoding에서도 사용할 수 있습니다.

마지막으로 설명서 또는 자습서의 범위를 벗어나는 질문이 있는 경우 다음에서 특정 질문을 할 수 있습니다. 답변.Unity3d.com . 답변은 자원 봉사자가 제공하므로 시간을 존중하고 먼저 데이터베이스를 검색하여 질문에 대한 답변이 없는지 확인하십시오.

9. 게임 빌드 / 독립 실행형 애플리케이션으로 컴파일

자랑스럽게 생각하는 것을 구축했다면(또는 연습을 위해 약간 엉뚱한 Pong 예제 복제를 완료한 경우), 이제 게임을 편집기에서 옮겨 인터넷에 게시할 수 있는 것으로 변환하고 강제로 당신의 친구와 가족이 재생합니다. 그렇게 하려면 독립 실행형 애플리케이션을 빌드해야 합니다. 좋은 소식은 Unity에서 이 작업이 매우, 매우 쉽다는 것입니다. 그러나 주의해야 할 몇 가지 잠재적인 딸꾹질이 있습니다.

우선, 오류가 없는 프로젝트만 빌드할 수 있다는 것을 알아두십시오. 이를 위해 빌드할 때 콘솔이 열려 있는지 확인하십시오. 게임이 편집기에서 무시하지만 시도한 빌드를 계속 중단할 몇 가지 오류 조건이 있습니다. 이것은 화면에 결과가 표시되지 않고 콘솔에 오류 메시지만 덤프하므로 확인하는 것을 잊어버리면 답답할 수 있습니다. 게임이 오류 없이 컴파일되면 다음을 선택할 수 있습니다. 빌드 설정 아래의 파일 메뉴를 누르거나 Ctrl 키 > 옮기다

> NS . 그러면 여러 플랫폼용 게임을 빌드할 수 있는 간단한 대화 상자가 나타납니다.

거기의 과정은 자명합니다. 옵션을 선택하고 짓다 ; 게임은 설치할 디렉토리를 묻는 메시지를 표시하고 거기에 실행 파일과 데이터 디렉토리를 둘 것입니다. 이 두 파일은 함께 압축하여 배포할 수 있습니다(서비스 약관을 위반하므로 Unity 데모에서 빌드한 게임에 대해 요금을 부과하지 않는지 확인하십시오).

10. 마무리 노트

모든 게임 개발 도구와 마찬가지로 Unity를 통한 성공의 열쇠는 반복적인 개발입니다. 관리할 수 있는 증분으로 구축해야 합니다. 반드시 야심차게 하되, 작은 덩어리로 야심차게 하고, 궁극적인 야망에 미치지 못하더라도 최소한 일관된 목표를 달성할 수 있도록 이러한 덩어리를 배열해야 합니다. 제품.

가장 중요한 요소를 먼저 파악하십시오. 최소 실행 가능한 제품 , 만들 수 있는 가장 단순하고 가장 기본적인 것인데도 여전히 가치 있는 것을 성취한 것처럼 느낄 수 있습니다. 더 큰 야망으로 넘어가기 전에 최소한의 실행 가능한 프로젝트에 도달하십시오.

이 튜토리얼은 강력한 출발점을 제공하지만 Unity를 배우는 가장 좋은 방법은 게임을 빌드하는 것입니다. 게임 구축을 시작하고 지식의 공백을 채우면 지식의 점진적인 흐름이 모르는 것을 놀라울 정도로 빠르게 침식할 것입니다.

이 모든 내용을 읽고 Unity에 필요한 코딩이 다소 부담스럽다면 다음을 확인하세요. Unity Learn으로 게임 개발 배우기 또한 프로그래밍 없이 비디오 게임을 만드는 방법에 대한 가이드도 읽어보세요.

Unity는 강력한 도구이며 약간의 탐색을 통해 예상보다 빠르게 인상적인 프로젝트를 구축할 수 있습니다. 아래 의견에 무엇을 구축했는지 알려주십시오. 보고 싶습니다!

공유하다 공유하다 트위터 이메일 이메일이 진짜인지 가짜인지 확인하는 3가지 방법

다소 의심스러운 이메일을 받았다면 항상 해당 이메일의 진위 여부를 확인하는 것이 가장 좋습니다. 이메일이 진짜인지 확인하는 세 가지 방법이 있습니다.

다음 읽기
관련 항목
  • 프로그램 작성
  • 프로그램 작성
  • 장형
  • 롱폼 가이드
저자 소개 안드레 인판테(131건의 기사 게재)

남서부에 거주하는 작가이자 저널리스트인 Andre는 섭씨 50도까지 기능을 유지하고 12피트 깊이까지 방수가 됩니다.

안드레 인판테가 참여한 작품 더보기

뉴스레터 구독

뉴스레터에 가입하여 기술 팁, 리뷰, 무료 전자책 및 독점 거래를 확인하십시오!

구독하려면 여기를 클릭하세요.