Unity 5 레슨 3D 안드로이드 게임. 안드로이드용 애플리케이션 제작. 파일 가져오기 및 게임 개체 만들기

Unity는 오늘날 플랫폼 전반에 걸쳐 대부분의 게임을 지원하는 엔진입니다. 엔진을 사용하면 컴퓨터(Windows, Linux, MacOS), 휴대전화, 태블릿(Android, iOS) 및 PlayStation, Xbox, Nintendo 게임 콘솔에서 실행하는 것을 목표로 하는 게임을 만들 수 있습니다.

Unity에서 게임을 만들려면 어떻게 해야 하나요?

Unity는 구성 요소 지향 개념을 기반으로 합니다. 실제로 모든 게임은 추가 구성 요소로 희석된 대량의 개체로 구성됩니다. 예를 들어, 플랫포머를 생성하는 동안 게임 오브젝트를 생성하고 캐릭터 표시를 담당하는 그래픽 구성 요소와 마우스, 키보드, 조이스틱을 사용하여 캐릭터의 제어를 제공하는 제어 구성 요소를 추가로 첨부합니다. 또는 터치스크린. 엔진은 이러한 모듈의 수에 제한을 두지 않습니다. 필요한 만큼 GameObject에 구성 요소를 추가할 수 있습니다. 엔진에 대한 모든 작업은 GameObject의 생성과 그에 적합한 구성 요소의 적용을 기반으로 합니다.

초보자는 프로세스의 명백한 단순성으로 인해 혼동될 수 있지만 이는 사실이 아닙니다. 독특하고 인기 있는 게임을 만들려면 처음부터 많은 구성 요소를 작성해야 합니다. 보다 정확하게는 Unity 환경에서는 이를 스크립트라고 합니다. 기본 스크립팅 언어는 C #이지만 JavaScript와 Boo(Python의 잘린 버전)도 부분적으로 사용됩니다. 자신의 구성 요소를 만드는 것은 쉬운 일이 아닙니다. 고전 프로그래밍과 직접적으로 연결된 복잡한 절차라고 할 수도 있습니다. 프로그래밍에 대한 충분한 수준의 지식 없이는 어려울 것입니다.

지원 플랫폼

많은 대규모 프로젝트는 엔진과 호환되는 수많은 플랫폼으로 인해 Unity를 선호합니다. 완성된 애플리케이션은 실제로 모든 컴퓨터 운영 체제, 인기 있는 모바일 플랫폼 및 SmartTV에서 실행할 수 있습니다. 특정 플랫폼용 브라우저 게임 및 애플리케이션( 타이젠 OS처럼)은 주로 Unity에서 개발되었습니다.

그러나 모든 것이 여기에서 그렇게 순조롭지는 않습니다. 필요한 경우 저수준 코드를 기반으로 특정 알고리즘을 작성할 수 있습니다. 동일한 Android의 경우 Java에 대한 철저한 지식이 필요합니다.

iOS도 마찬가지입니다. iOS의 또 다른 기능은 Apple의 컴퓨터 또는 태블릿에서만 개발할 수 있다는 것입니다. Macbook 또는 이와 유사한 장치가 없으면 게임 출시가 빠르게 중단되고 Unity는 이와 관련이 없으며 Apple 자체도 유사한 제한을 부과합니다. 결론은 간단합니다. iOS 개발 계획이 있다면 사전에 조립에 적합한 장치를 선택해야 합니다.

엔진에서 게임을 개발하는 방법과 위치는 무엇입니까?

우리는 Windows와 Mac OS X 모두에서 긴 게임 개발 프로세스를 수행할 수 있습니다. 이미 Linux용 편집기 버전이 있지만 지금까지 안정적인 작업을 기대할 수는 없습니다. 개발자는 Unity 에디터 내에서 게임을 만드는 데 대부분의 시간을 보냅니다. 스크립트 코드를 작성하는 데 여전히 많은 시간이 걸리므로 표준 MonoDevelop 또는 타사 편집기에서 작성할 수 있습니다. 이제 그들은 Visual Studio와 Sublime Text를 적극적으로 사용하지만 적절한 구성에서만 사용합니다.

Unity에서 Android 게임을 빠르게 작성하는 방법

요즘은 누구나 큰 노력 없이 성공적인 모바일 게임이나 애플리케이션 개발자가 될 수 있습니다. Flappy Bird를 개발한 Dong Nguyen이 그러한 사례입니다. 이 게임에는 복잡한 역학이나 그래픽이 없었지만 이것이 인기를 얻고 제작자가 하루에 5만 달러를 벌어들이는 것을 막지는 못했습니다. 그러나 게임에서 눈에 띄는 것은 없었습니다. 성공하기 위해 필요한 것은 적시에 적절한 장소에 있는 것과 약간의 운이었다. 이것은 오늘 일어날 수 있습니다. 올바른 아이디어가 필요합니다.

이와 같이 작성하는 것이 얼마나 쉬운지 보여주기 위해 오늘 단 10분 만에 Unity로 Flappy Bird를 작성할 것입니다.

플레이어블 캐릭터

먼저 새 프로젝트를 만들고 2D가 선택되어 있는지 확인합니다.

새 스프라이트를 장면에 로드합니다. 당신의 환상을 켜는 것을 잊지 마세요!

그런 다음 원하는 방향으로 모서리 주위를 드래그하여 스프라이트의 크기를 원하는 대로 조정합니다. 스프라이트는 왼쪽의 계층 창에서 볼 수 있어야 합니다. 장면의 모든 개체는 장면에서 볼 수 있으며 현재로서는 카메라와 새 두 개만 있어야 합니다.

카메라를 새 위로 끌어 놓고 놓습니다. 카메라는 새 아래에 있어야 합니다. 즉, 카메라는 이제 새의 "자식"이 됩니다. 이제 카메라의 위치는 새를 기준으로 고정됩니다. 새가 앞으로 움직이면 카메라도 마찬가지입니다.

장면이나 계층 창에서 새를 다시 선택합니다. Inspector라는 창의 오른쪽에 옵션 및 속성 목록이 표시됩니다. 여기에서 특정 개체와 관련된 다양한 변수를 관리할 수 있습니다.

이제 구성 요소 추가를 클릭합니다. Physics2D> Rigidbody2D를 선택하십시오. 이것은 캐릭터에 중력을 적용하기 위한 기성품 지침 세트입니다. 이 패널에서 Constraints를 클릭한 다음 고정 회전 Z를 선택합니다. 이렇게 하면 새가 카메라와 함께 원을 그리며 회전하는 것을 방지할 수 있습니다.

같은 방식으로 캐릭터의 경계가 어디에 있는지 Unity에 알려주는 Polygon Collider를 추가합니다. 재생을 누르고 스프라이트가 카메라와 함께 어떻게 무한히 떨어지는지 확인하십시오.

여태까지는 그런대로 잘됐다!

이제 캐릭터 비행을 시작할 때입니다. 어렵지 않을 것입니다.

먼저 C # 스크립트를 만들어야 합니다. 폴더를 만들고(자산의 아무 곳이나 마우스 오른쪽 버튼으로 클릭하고 "Scripts" 폴더 만들기), 마우스 오른쪽 버튼을 클릭하고 만들기> C # 스크립트를 선택합니다.

"캐릭터"라고 합시다. 이를 두 번 클릭하여 MonoDevelop 또는 Visual Studio와 같은 IDE에서 엽니다. 그런 다음 다음 코드를 추가합니다.

Public 클래스 Character: MonoBehaviour (public Rigidbody2D rb; public float moveSpeed; public float flapHeight; // 이것은 void Start() (rb = GetComponent ();)를 초기화하는 데 필요합니다. // Update는 프레임당 한 번 호출됩니다. void Update()( rb .velocity = new Vector2(moveSpeed, rb.velocity.y), if(Input.GetMouseButtonDown(0))(rb.velocity = new Vector2(rb.velocity.x, flapHeight);) if(transform.position.y) > 18 || 변환.위치.y< -19) { Death(); } } public void Death() { rb.velocity = Vector3.zero; transform.position = new Vector2(0, 0); } }

이 코드는 두 가지 작업을 수행합니다. 캐릭터가 인스펙터에서 정의한 속도로 앞으로 움직이게 하고 새가 날아가는 듯한 느낌을 줍니다. Update() 메서드는 게임 내내 반복적으로 호출되므로 여기에 입력한 내용은 계속 실행됩니다. 이 경우 객체에 속도를 추가합니다. rb 변수는 이전에 객체에 적용한 RigidBody2D 스크립트이므로 rb.velocity를 작성할 때 객체의 속도를 참조합니다.

모바일 장치를 사용하는 경우 Unity는 화면을 탭하는 것을 마우스 클릭으로 해석합니다. 클릭 후 캐릭터를 약간 위로 움직입니다.

moveSpeed ​​변수는 이동 속도를 담당하고 flapHeight 변수는 클릭할 때마다 새의 비행 높이 증가를 담당합니다. 이러한 변수는 public으로 선언되어 있으므로 스크립트 외부에서 변경할 수 있습니다.

Death() 메서드도 public으로 선언되어 다른 개체와 스크립트에서 이 메서드를 호출할 수 있습니다. 이 메서드는 단순히 캐릭터의 위치를 ​​시작점으로 되돌립니다. 또한 캐릭터가 너무 높이 또는 낮게 날아갈 때마다 사용됩니다. 왜 그것이 public으로 선언되었는지 곧 이해하게 될 것입니다. 라인 rb.velocity = Vector3.zero; 충동을 제거하는 데 필요합니다. 캐릭터가 죽을 때마다 점점 더 빨리 떨어지기를 원합니까?

이제 IDE를 종료하고 스크립트를 캐릭터에 구성 요소로 추가할 수 있습니다. 이렇게 하려면 새를 선택하고 구성 요소 추가> 스크립트> 문자를 클릭합니다. 이제 인스펙터에서 moveSpeed ​​및 flapHeight를 정의할 수 있습니다(이것이 공개 변수의 용도입니다). 변수에 각각 값 3과 5를 할당합시다.

그리고 한 가지 더: 인스펙터에서 캐릭터에 태그를 추가해야 합니다. 이렇게 하려면 태그: 태그 없음이라고 표시된 곳을 클릭한 다음 드롭다운 목록에서 플레이어를 선택합니다.

장애물

이제 장애물을 추가해 보겠습니다: 파이프. 파이프의 누군가는 버섯을 찾고 누군가는 죽음을 찾습니다.

파이프 스프라이트를 첫 번째 장애물이 있어야 하는 장면으로 드래그하고 이름을 pipe_up으로 지정합니다.
이제 Pipe라는 새 스크립트를 생성해 보겠습니다.

Public 클래스 Pipe: MonoBehaviour (private Character character; // 초기화에 필요합니다. void Start () (character = FindObjectOfType ();) // 업데이트는 프레임당 한 번 호출됩니다. void Update () (if (character.transform.position. x - 변형.위치.x>

이 스크립트를 이전과 같은 방식으로 파이프 스프라이트에 추가합니다. 따라서 파이프는 왼쪽 경계를 넘어 화면으로 돌아갑니다. 우리는 아직 여기에서 아무것도 하지 않았지만 이것으로 다시 돌아올 것입니다.

OnCollisionEnter2D() 메서드는 파이프가 캐릭터와 상호 작용할 때마다 호출됩니다. 그 후 이전에 생성된 Death() 메서드가 호출되어 플레이어를 시작점으로 되돌립니다.

그래서 우리는 화면의 다른 쪽 끝에서 때때로 페이드 인 및 페이드 아웃되는 하나의 파이프를 가지고 있습니다. 맞으면 죽습니다.

거꾸로 된 파이프

지금은 파이프 스프라이트가 하나만 있습니다. 하나 더 추가해 보겠습니다. 이렇게 하려면 계층 창에서 마우스 오른쪽 버튼을 클릭하고 새 2D 개체> 스프라이트를 클릭한 다음 사용할 스프라이트를 선택합니다. 파일을 장면으로 다시 드래그 앤 드롭하는 것이 훨씬 쉽습니다.

이 스프라이트의 이름을 pipe_down으로 지정합니다. Sprite Renderer 아래의 인스펙터에서 Flip Y 옵션을 선택하여 파이프를 거꾸로 뒤집습니다. 동일한 RigidBody2D를 추가합니다.

이제 PipeD라는 새 C # 스크립트를 작성해 보겠습니다. 유사한 코드가 포함됩니다.

Public 클래스 PipeD: MonoBehaviour (private Character character; // 초기화에 필요합니다. void Start () (character = FindObjectOfType ();) // 업데이트는 프레임당 한 번 호출됩니다. void Update () (if (character.transform.position. x - transform.position.x> 30) ()) 무효 OnCollisionEnter2D (Collision2D other) (if (other.gameObject.tag == "Player") (character.Death ();)))

조립식

따라서 이 코드는 전체 게임을 만들기에 충분합니다. 파이프가 사라질 때마다 화면 오른쪽으로 파이프를 이동하거나 게임 전체에서 보고 싶은 만큼 파이프를 복사하여 붙여넣을 수 있습니다.

첫 번째 방법으로 간다면 무작위 생성 후 파이프가 제대로 있는지 확인하고 일의 정직한 과정을 유지하는 것이 어려울 것입니다. 캐릭터가 죽은 후 첫 번째 파이프에서 몇 킬로미터 떨어진 곳에 나타날 수 있습니다!

두 번째 방법으로 이동하면 모든 것이 불필요한 메모리 소비로 끝나고 결과적으로 게임 속도가 느려지고 재생 가능성이 제한됩니다. 모든 것이 매번 같은 장소에 있습니다.

대신 프리팹을 사용합시다. 간단히 말해서 파이프를 템플릿으로 변환한 다음 원하는 대로 더 많은 파이프를 효율적으로 만드는 데 사용할 수 있습니다. 여기에 프로그래머가 있는 경우 파이프 스크립트를 클래스로 처리하고 파이프를 이 개체의 인스턴스로 취급합니다.

이렇게 하려면 새 폴더 "Prefabs"를 만듭니다. 그런 다음 계층 창에서 pipe_up 및 pipe_down을 폴더로 끕니다.

이 폴더에서 장면으로 개체를 끌 때마다 동일한 속성을 가지므로 구성 요소를 지속적으로 추가할 필요가 없습니다. 또한 폴더의 구성 요소 크기를 조정하면 게임의 모든 파이프에 영향을 미치므로 각각을 개별적으로 변경할 필요가 없습니다.

상상할 수 있듯이 이렇게 하면 리소스를 크게 절약할 수 있습니다. 또한 코드의 개체와 상호 작용할 수 있음을 의미합니다. 파이프의 인스턴스를 만들 수 있습니다.

먼저 파이프 스크립트의 Update() 메서드에 있는 조건문에 이 코드를 추가합니다.

무효 업데이트() (if (character.transform.position.x - transform.position.x> 30) (float xRan = Random.Range(0, 10), float yRan = Random.Range(-5, 5), 인스턴스화 (gameObject, 새로운 Vector2(character.transform.position.x + 15 + xRan, -10 + yRan), transform.rotation), 파괴(gameObject);))

이것은 gameObject의 인스턴스를 생성하는 데 필요합니다. 결과는 동일한 새 복사본입니다. Unity에서 gameObject라는 단어를 사용할 때마다 스크립트가 현재 연결되어 있는 개체(이 경우에는 파이프)를 나타냅니다.

우리는 파이프를 더 재미있게 만들기 위해 무작위 변형으로 파이프를 다시 생성하고 있습니다.

그러나 PipeD 스크립트에서 동일한 작업을 수행하는 대신 동일한 위치에서 두 개체를 모두 생성합니다. 따라서 첫 번째 파이프를 기준으로 두 번째 파이프의 위치를 ​​쉽게 설정할 수 있습니다. 또한 PipeD에 필요한 코드가 더 적습니다.

pipeDown이라는 공개 게임 오브젝트를 만듭니다. 그런 다음 다음과 같이 코드를 업데이트합니다.

If (character.transform.position.x - transform.position.x> 30) (float xRan = Random.Range(0, 10), float yRan = Random.Range(-5, 5), float gapRan = Random.Range (0, 3), 인스턴스화(gameObject, new Vector2(character.transform.position.x + 15 + xRan, -11 + yRan), transform.rotation), 인스턴스화(pipeDown, new Vector2(character.transform.position.x) + 15 + xRan, 12 + gapRan + yRan), transform.rotation), 파괴(gameObject);)

Unity로 돌아가서 프리팹 폴더에서 pipe_down 프리팹을 드래그합니다(이것이 중요합니다!). "Pipe Down"(카멜 케이스가 공백으로 대체되는 방법을 주목하세요)이 표시된 위치로 파이프 업 스프라이트에 있습니다. 기억하신다면, 우리는 Pipe Down을 공개 gameObject로 정의했습니다. 이 개체를 통해 어디에서나 이 개체가 무엇인지 결정할 수 있습니다(이 경우에는 검사기를 통해). 이 개체에 대한 프리팹을 선택하여 파이프가 인스턴스화될 때 이전에 추가한 모든 속성과 스크립트가 파이프에 포함되도록 합니다. 우리는 단순히 스프라이트를 만드는 것이 아니라 캐릭터를 죽일 수 있는 충돌기로 오브젝트를 다시 만드는 것입니다.

PipeD 스크립트의 같은 위치에 추가하는 모든 것은 단순히 Destroy(gameObject)이므로 파이프가 화면의 왼쪽 가장자리를 벗어날 때 자체적으로 파괴됩니다.

지금 게임을 시작하면 화면이 자동으로 더 진행되며 파이프에 부딪히면 사망합니다. 충분히 멀리 날아가면 이 파이프가 사라졌다가 앞으로 다시 나타납니다.

불행히도 파이프 사이에 큰 거리가 있고 화면이 비어 보입니다. 지속적으로 나타나는 파이프의 파이프라인을 만들기 위해 장면에 몇 가지 프리팹을 추가하여 이 문제를 해결할 수 있습니다. 그러나 스크립트에서 파이프를 생성하는 것이 좋습니다. 그렇지 않으면 캐릭터가 죽은 후 경로 시작 부분의 파이프가 파괴되고 빈 공간이 다시 형성되기 때문에 이것은 중요합니다.

따라서 게임을 로드할 때마다 처음 몇 개의 파이프를 만들고 캐릭터가 사망한 후 모든 것을 제자리로 되돌릴 수 있습니다.

끝없는 비행

이제 Character 스크립트에서 공개 변수 pipe_up 및 pipe_down을 생성해 보겠습니다. 이렇게 하면 Pipe 스크립트에 pipe_down을 추가한 것처럼 프리팹을 캐릭터 개체로 끌어다 놓아 생성된 개체를 참조할 수 있습니다.

다음 변수를 추가해야 합니다.

공개 게임 오브젝트 pipe_up; 공개 게임오브젝트 pipe_down;

그런 다음 다음과 같은 메서드를 작성합니다.

Public void BuildLevel()(인스턴스화(pipe_down, new Vector3(14, 12), transform.rotation), 인스턴스화(pipe_up, new Vector3(14, -11), transform.rotation), 인스턴스화(pipe_down, new Vector3(26, 14), transform.rotation), 인스턴스화(pipe_up, new Vector3(26, -10), transform.rotation), 인스턴스화(pipe_down, new Vector3(38, 10), transform.rotation), 인스턴스화(pipe_up, new Vector3( 38, -14), transform.rotation), 인스턴스화(pipe_down, new Vector3(50, 16), transform.rotation), 인스턴스화(pipe_up, new Vector3(50, -8), transform.rotation), 인스턴스화(pipe_down, new Vector3(61, 11), transform.rotation), 인스턴스화(pipe_up, new Vector3(61, -13), transform.rotation);)

Update() 메서드에서 한 번, Death() 메서드에서 한 번 호출합니다.

게임이 시작된 후 Update()가 호출되고 지정된 구성에 따라 파이프가 설치됩니다. 이로 인해 처음 몇 개의 장애물은 항상 같은 위치에 있습니다. 플레이어가 사망한 후 파이프는 같은 위치로 이동합니다.

Unity의 장면으로 돌아가 현재 있는 두 개의 파이프를 삭제합니다. 당신의 "게임"은 새가 있는 빈 화면처럼 보일 것입니다. 재생을 누르면 파이프가 나타나며 처음 몇 개 후에 위치가 무작위로 결정됩니다.

드디어

그래서 우리는 전체 게임을 만들었습니다! 점수 카운터를 추가하고 더 독창적으로 만들고 진행하면서 게임의 난이도를 높이십시오. 메뉴를 만드는 것도 도움이 될 것입니다. 캐릭터가 죽은 후 화면의 파이프를 파괴하는 것도 좋은 생각입니다. 이 작업이 끝나면 주머니에 Play 스토어 지원 게임을 가지고 있는 것을 고려하십시오! 한때 비슷한 게임이 다른 개발자를 매우 부유하게 만들었습니다. 이는 성공하기 위해 프로그래밍 천재가 될 필요도 없고 부유한 퍼블리셔가 있을 필요도 없다는 것을 증명합니다. 좋은 아이디어와 10분만 있으면 됩니다!

Android 앱을 작성하고 싶지만 어디서부터 시작해야 할지 모르십니까? 그런 다음 Android 개발 학습을 위한 훌륭한 자료를 확인하세요.

안녕하세요 여러분! 이 엔진으로 게임을 만드는 방법을 배웠으므로 여러분에게도 똑같이 가르치고 싶습니다. 먼저 Unity3d 자체, 3D 모델 편집기 및 어깨에서 자라는 곧은 팔이 필요합니다.

1. 프로그램 공부

먼저 Monodevelop을 설치하는 것이 좋습니다! Unity가 무엇인지 살펴보겠습니다. Unity는 멀티 플랫폼 게임 개발 환경입니다. 모든 제 3자가 적어도 한 번은 게임을 만든 것은 단순함과 명확성 때문입니다.

위의 화면을 고려하십시오.

  • 무대는 창의적인 샌드박스입니다.
  • 프로젝트 - 모든 애니메이션과 모델, 사운드 및 텍스처가 여기에 있습니다.
  • 상단 도구 모음에서 모델을 설치하려면 Assets-Import New Asset을 선택합니다. 또는 Assets-Import Package-Custom Package. 두 번째 경우 패키지는 .unity 확장자에 있어야 합니다.
  • 계층 - 장면의 모든 개체입니다. 여기에서 개체에 대한 부모를 만듭니다. 계층 메뉴에서 개체를 다른 개체로 이동하기만 하면 스냅됩니다. 결과적으로 일종의 폴더가 생깁니다.
  • 도구 모음 - 도구 목록입니다. 여기에서 2D, 3D 모드를 활성화할 수 있습니다.
  • Inspector는 애니메이션, 스크립트 등을 추가하는 개체의 특성입니다. 여기에서 도구를 사용할 수 있습니다: 카메라 이동, 개체 이동, 늘이기, 개체 회전.


이제 개체 메뉴가 표시되고 애니메이션, 스크립트 등을 추가할 수 있습니다.

이 메뉴는 문제 없으실 거라 생각합니다.
개체를 만들려면 을 클릭합니다.

일반적으로 우리는 프로그램을 연구했으며 곧 우리 자신의 게임을 작성할 수 있습니다.

2. 가장 간단한 게임 만들기

먼저 Create-Terrain을 생성해 보겠습니다. 잔디와 나무를 추가하십시오. 오른쪽의 땅을 클릭하면 창이 나타나고 나무, 풀을 선택합니다.


또한 산과 범프를 만듭니다. 그런 다음 Charcher 컨트롤러 팩을 프로젝트에 로드합니다. 그런 다음 프로젝트가 있는 창에서 표준 자산-캐릭터 컨트롤러를 찾고 1인칭 보기(캡슐) 또는 3인칭(정비사)을 선택합니다.
첫 번째 사람이라면 그냥 바닥에 놓으십시오. 세 번째부터 애니메이션을 로드해야 합니다. 또한 Create-Directional Light 장면에서 조명을 설정하는 것이 좋습니다.


음악을 추가하려면 원하는 개체로 드래그하세요.
게임은 준비되었지만 어떻게 컴파일합니까?

이렇게 하려면 파일-빌드 설정-플레이어 설정(바로 가기 및 제목용)으로 이동합니다. 플랫폼을 선택하고 짜잔, 끝입니다. 이렇게 하려면 Android SDK를 설치해야 합니다. 하지만 거기에 SDK가 있는 폴더를 지정해야 하고 SDK뿐만 아니라 필요한 수준의 API(예: Android 4.2에는 API 17이 있음)가 필요합니다. 예를 들어 게임을 Android 4.0 이상에서 실행하려면 이러한 API를 설치해야 합니다.

다음 기사에서는 Android 또는 iOS용 컨트롤을 설정하는 방법과 스크립트를 직접 작성하는 방법을 알아보겠습니다.

Android용 간단한 게임이나 애플리케이션을 만드는 것이 얼마나 빠르고 상대적으로 간단합니까? Unity3D 엔진 작업에 대해 설명하는 아래 기사에서 이에 대해 읽어보세요.

컴퓨터 게임을 합니까? 그렇다면 분명히 다음 게임 블록버스터를 통과하는 과정에서 "하지만 여기에서는 내가 잘못했을 텐데!"와 같은 생각을 했을 것입니다. 스스로 개발자가 되고 싶습니까? 그런 다음 작지만 매우 재미있는 "모험"을 제안합니다.)

엔진이란 무엇이며 왜 필요한가요?

이전에는 최초의 컴퓨터 시대로 돌아가서 소위 "하드코어" 방법을 사용하여 게임과 프로그램을 만들었습니다. 즉, 본격적인 개발을 위해서는 자신의 프로그래밍 언어를 철저히 알고 거의 모든 게임(픽셀 그래픽 및 특수 효과 포함!)을 간단한 메모장에 작성할 수 있는 상당히 숙련된 프로그래머가 필요했습니다. 그런 사람들은 거의 없었고 그들은 매우 감사했습니다 (그리고 그들은 여전히 ​​감사합니다) ...

오늘날 프로그래밍 주제에 진입하는 문턱이 크게 낮아졌습니다. 그리고 이것은 문헌과 모든 종류의 교육 자료의 가용성뿐만 아니라 점점 더 단순화되는 개발 프로세스에 의해 촉진됩니다. 요즘은 "엔진"이라고 하는 매우 편리한 개발 환경이 등장하면서 이미 진정한 "하드코어" 사람을 찾기가 드뭅니다.

엔진의 본질은 단순화된 비주얼 모드에서 필요한 모든 게임 개체를 가져와 가상 무대에 배열하고 모든 매개변수를 구성할 수 있다는 것입니다. 즉, 프로그래머의 임무는 게임 로직을 올바르게 작성하는 것뿐입니다!

그러나 작업의 편의를 위해 이전 "하드코어" 방식으로 작성된 아날로그와 비교하여 프로젝트 크기를 약간 늘려야 합니다(때로는 여러 번!). 이를 위해 일부 개발자는 엔진을 좋아하지 않거나 필요한 구성 요소 만 사용되는 자체 엔진을 작성하려고합니다 ...

하지만 당신과 나는 노동 프로그래머와는 거리가 멉니다 :) 따라서 인기 있고 강력한 Unity3D 엔진을 기반으로 하는 간단한 Android용 게임을 만들어 보겠습니다.

Unity3D에서 프로젝트 시작하기

Unity3D를 사용하기로 결정한 이유:

  • 본격적인 2D 및 3D 게임을 만드는 능력;
  • 모든 장치에 대해 완성된 게임을 컴파일하는 기능;
  • 엔진 제어의 상대적 용이성;
  • 플러그인을 연결하여 기능을 확장할 수 있습니다.
  • 게임의 최종 어셈블리의 상대적으로 작은 크기(다른 엔진에 비해).

물론 Unity3D의 주요 장점은 다양성과 다중 플랫폼 기능입니다. 완성된 게임을 PC(Windows, Linux 또는 MacOS 포함), Android, PlayStation 또는 XBox에서도 포팅할 수 있습니다. 이렇게하려면 엔진 자체 만 다운로드하면됩니다. 그런데 기가 바이트 이상인 "무게"와 필요한 SDK (모바일 플랫폼 또는 콘솔 개발이 계획된 경우). Windows용 게임을 만들고자 한다면 추가로 다운로드 할 필요는 없으나 Android용 게임을 만들 예정이므로 Android SDK(Software Development Kit)도 함께 다운로드 해야 합니다. 작업의 편의를 위해 ZIP 아카이브에서 SDK를 다운로드하는 것이 좋습니다.

모든 것이 다운로드되면 편리한 Android SDK 폴더에 압축을 풀고 Unity3D 자체 설치를 진행할 수 있습니다. Windows에서 일반 프로그램과 같이 설치되므로 설치에 문제가 없습니다. 설치 후 엔진이 시작되고 먼저 새 프로젝트를 만들어야 합니다.

이렇게 하려면 모든 환영 창과 소개 창을 닫고 "파일" 메뉴에서 "새 프로젝트" 항목을 선택해야 합니다. 열리는 창에서(위의 스크린샷 참조) 프로젝트를 저장할 폴더를 지정하라는 메시지가 표시됩니다(이름은 프로젝트 이름과 일치함). 일부 표준 기능 세트 가져오기(필요하지 않음) 및 작동 모드를 나타냅니다. 모드로 2D를 선택하고 "만들기" 버튼을 누릅니다. 이것으로 작업의 준비 부분이 완료되었습니다 :)

엔진 인터페이스 및 프로젝트 계층

프로젝트가 생성되면 Unity3D 작업 공간에 로드됩니다.

이 작업 공간 자체는 모듈식 구조로 되어 있으며 원하는 대로 이동할 수 있는 여러 개의 중첩된 창으로 구성됩니다. 다음과 같이 구성했습니다(왼쪽에서 오른쪽으로, 위에서 아래로).

  1. 계층 창 - 장면에서 활성 및 비활성 개체의 계층적 위치를 표시합니다. 기본적으로 즉시 나열되는 유일한 개체는 기본 카메라입니다.
  2. 장면 창 - 전체 게임 장면과 그 위에 있는 개체(카메라, 사운드, 텍스처 등 포함)를 표시합니다.
  3. Inspector 창 - 계층 구조 또는 장면에서 선택한 개체의 모든 속성을 표시하고 이를 편집, 보완 또는 삭제할 수 있습니다.
  4. 게임 창 - 카메라에 보이는 대로 게임 세계를 표시하고 가상 테스트 게임 창의 크기를 픽셀 단위로 선택할 수 있습니다. 또한 게임 창을 풀 사이즈로 최대화(Maximize on Play)하고 개발자를 위한 다양한 정보 표시를 활성화/비활성화할 수 있습니다.
  5. 프로젝트 및 콘솔 창. 프로젝트 창은 로드된 이미지, 사운드, 모델 등 프로젝트 리소스를 탐색하는 데 사용됩니다. 또한 이 창(컨텍스트 메뉴)을 사용하여 다양한 유형과 스크립트의 빈 게임 개체를 새로 만들 수 있습니다. 콘솔 창은 오류 메시지(빨간색), 경고(노란색) 및 사용자가 요청한 다양한 디버그 정보(회색)를 표시하는 데 사용됩니다.
  6. 자산 레이블 창 - 프로젝트 창에서 선택한 개체 또는 파일의 미리 보기를 표시하는 검사기 창의 아래쪽 부분입니다.

위의 모든 것 외에도 상단 중앙에있는 세 개의 버튼에주의하십시오. 이를 통해 프로젝트를 시작하고 일시 중지(예: 계층 구조에서 수행 중인 작업을 확인하기 위해 디버깅할 때 유용함)하고 그에 따라 끌 수 있습니다.

우리는 악기 시뮬레이터인 "tabla"를 만들 것이므로 시작하기 위해 프로젝트에 소리와 그림이 저장될 두 개의 빈 폴더를 만들 것입니다. 프로젝트 네비게이터 창에서 컨텍스트 메뉴를 호출하고 "만들기" 목록에서 "폴더" 항목을 선택하여 새 폴더를 만들 수 있습니다.

여기에서 이러한 폴더의 이름을 지정하는 방법에 대해 몇 마디 말할 가치가 있습니다. 시뮬레이터와 같은 간단한 게임의 경우 원칙적으로 폴더는 원하는 대로 "호출"할 수 있지만 엔진에 의해 예약되어 있기 때문에 사용하지 않는 것이 더 나은 두 가지 이름이 있습니다. 리소스 및 플러그인이라는 이름입니다. 대규모 프로젝트에서 리소스 폴더가 한 번에 생성되고 모든 게임 "예비 부품"(그림, 사운드, 모델, 텍스처 및 조립식)이 여기에 저장됩니다(하위 폴더별로 정렬됨). 플러그인은 이름에서 알 수 있듯이 모든 추가 타사 기능 세트(소위 "자산")를 저장하며, 그 중 Unity3D용 확장 저장소인 에셋 스토어에 꽤 많습니다.

파일 가져오기 및 게임 개체 만들기

새 게임 프로젝트를 생성하기 전에 작업에 필요한 모든 파일을 미리 준비하는 것이 좋습니다. 우리의 경우 그러한 파일은 사진과 소리입니다. 프로젝트로 가져오는 가장 쉬운 방법은 원하는 폴더로 끌어다 놓는 것입니다. 사진으로 시작합시다 ...

이미지가 이미지 폴더에 나타난 후 약간 조정해야 합니다.

사실 Unity3D는 기본적으로 프로젝트에 추가된 모든 이미지를 품질 손실로 압축합니다. 그러한 손실이 필요하지 않은 경우(특히 HD 그래픽이 있는 게임에 중요), 각 이미지를 선택하고 Inspector 창에서 "Format" 매개변수 값을 "Compressed"에서 "Truecolor"로 변경합니다. " 탭. 그림의 실제 너비(기본값 - 1024픽셀)보다 작은 경우 "최대 크기" 매개변수를 변경해야 할 수도 있습니다. 모든 변경 사항을 적용한 후 "적용" 버튼을 클릭하는 것을 잊지 마십시오. 필요한 경우 다른 모든 이미지에 대해 유사한 작업을 수행합니다.

이제 사진에서 게임 개체를 만들어 보겠습니다. 이렇게 하려면 원하는 이미지를 계층 창으로 끌어다 놓기만 하면 됩니다. 사진이나 3D 모델은 자동으로 게임 오브젝트로 변환되어 카메라 앞의 원점에 표시됩니다.

먼저 전체 화면으로 표시되어야 하는 배경 이미지를 추가했습니다. 계층 구조 창에서 카메라를 선택하고 해당 프레임이 어떻게 표시되는지 확인하면 해당 여부를 확인할 수 있습니다. 위의 스크린샷에서 배경의 일부가 카메라 보기 외부에 남아 있는 것을 볼 수 있으므로 스테이지에서 프레임을 오른쪽으로 드래그하거나 Inspector 창에서 "Size" 매개변수를 편집하여 이 보기의 크기를 조정해야 합니다. . 우리의 경우 기본값(5)을 5.4로 변경해야 했습니다.

그게 다야, 우리는 더 이상 카메라를 만지지 않고 나머지 사진을 추가하고 조정합니다. 추가하면서 일부는 우리 게임에 너무 큽니다. 그래픽 편집기에서 또는 엔진을 통해 물리적으로 줄일 수 있습니다. 마지막 방법을 시도해보자. 이렇게 하려면 계층 창에서 이미지를 선택하고 검사기 창에서 X 및 Y 좌표의 "크기" 값을 1에서 0.5(즉, ​​절반)로 변경합니다. 같은 위치에서 중복을 피하기 위해 모든 게임 개체(배경 제외)를 Layer에서 0이 아닌 순서로 할당하는 것이 바람직합니다.

그림에서 게임 개체를 준비하는 마지막 단계는 충돌체를 그림에 "매달"하는 것입니다. Unity3D에서 콜라이더는 객체 간의 상호 작용 감지기로 사용됩니다. 즉, 실제로 가상 쉘이 사진에 추가되어 터치를 등록할 수 있습니다.

개체에 충돌체를 추가하려면 계층 창에서 선택한 다음 검사기 창에서 "구성 요소 추가" 버튼을 누릅니다. 나타나는 구성 요소 목록에서 우리는 Physics 2D(일반 3D 물리는 우리 모드에서 작동하지 않음)를 찾고 있으며 모든 옵션 중에서 "Circle Collider 2D"가 가장 적합합니다. 우리는 그것을 선택합니다. 충돌기의 경계를 나타내는 녹색 윤곽선이 객체 주위에 나타납니다. 콜라이더가 클릭만 등록하고 더 이상 주변 게임 공간과 상호 작용하지 않도록 "트리거임" 확인란을 선택하는 것만 남아 있습니다.

나머지 모든 개체에 대해 동일한 작업을 반복합니다. 배경만 나머지 개체와 다릅니다. 이를 위해 우리는 Box Collider 2D를 사용하고 위치 Z를 0보다 크게 설정하여 충돌체와 배경 자체를 배경으로 밀어넣을 것입니다(이는 나중에 유용할 것입니다).

사운드 작업

Unity 3D의 사운드는 언뜻 보기에 다소 혼란스러워 보입니다. 하지만 순서대로 알아보도록 합시다. :)

가장 먼저 해야 할 일은 모든 사운드를 사운드 폴더로 드래그하고 약간 조정하는 것입니다.

모든 소리의 볼륨 레벨이 처음에 조정된 경우에는 소리의 3D 처리를 끄기만 하면 됩니다. 3D 게임에서 카메라가 음원에 접근할 때 음원의 접근을 시뮬레이션하기 위해 이 처리가 필요합니다. 그러나 2D에서는 필요하지 않으므로 각 사운드를 차례로 선택하고 "3D 사운드" 확인란의 선택을 취소합니다.

이제 게임 개체에 사운드를 추가할 수 있습니다. 이렇게 하려면 각 버튼을 차례로 선택하고 "오디오" 섹션에서 새 "오디오 소스" 구성 요소를 추가해야 합니다. 구성 요소가 추가되면 해당 "오디오 클립" 버튼을 선택하고 기본적으로 활성화되어 있는 "깨어 있을 때 재생" 확인란의 선택을 취소합니다.

원하는 버튼에 소리가 다 붙었다면 재미있는 부분 - 스크립팅...

첫 번째 스크립트

첫 번째 스크립트의 구문 분석을 시작하기 전에 Unity 3D의 스크립팅 시스템 자체에 대해 몇 마디 하는 것이 좋습니다.

Unity를 사용하면 JavaScript(더 정확하게는 UnityScript의 약간 수정된 버전), C # 및 Boo의 세 가지 언어로 코드를 한 번에 작성할 수 있습니다. 많은 책과 튜토리얼에서 초보자에게는 Unity의 스크립팅이 JavaScript를 예로 사용하여 더 쉽게 배울 수 있다는 의견을 찾을 수 있습니다. 그러나 이 언어는 다른 언어만큼 사용자 친화적이지 않으며 앞으로 다시 배워야 할 가능성이 큽니다. 따라서 C#을 배워서 바로 시작하는 것이 좋다(Boo도 나쁘지는 않지만 튜토리얼이 많지는 않다).

이제 코드를 작성할 위치에 대해 알아보겠습니다. Unity 3D의 기본 코드 편집기는 MonoDevelop IDE입니다. 이 개발 환경의 장점은 표준 메서드, 클래스 및 함수에 빠르게 진입할 수 있는 힌트와 구문 검사 시스템이 있다는 것입니다. 그러나 나에게 단점은 번거로움과 높은 리소스 집약도였습니다. 다행히 Unity 설정에서 텍스트 편집기로 무엇이든 설정할 수 있으므로 나는 가볍고 기능적인 메모장 ++를 "매달"했습니다(거의 모든 예제가 여기에 표시됨).

그리고 마지막으로. 당연히 엔진의 모든 복잡성을 마스터하는 데 참조 자료가 없으면 멀리 가지 않을 것이므로 Unity 3D 주제에 대한 몇 가지 합리적인 인터넷 리소스 목록이 있습니다.

  • http://docs.unity3d.com/ru/current/Manual/UnityManualRestructured.html - 부분적으로 러시아어로 번역된 엔진의 공식 매뉴얼(최근에 나타났고 때때로 불안정함);
  • http://docs.unity3d.com/ru/current/ScriptReference/index.html - 영문 스크립팅 공식 매뉴얼;
  • http://unity3d.ru/distribution/index.php - Unity 3D 개발자를 위한 러시아어 포럼
  • http://habrahabr.ru/post/141362/ - Habrahabr에서 3차원 게임을 만드는 방법에 대한 일련의 수업;
  • http://msdn.microsoft.com/ru-ru/library/618ayhy6.aspx - 러시아어로 된 Microsoft의 공식 C # 참조.

글쎄, 나는 오랫동안 지연되지 않기 위해 첫 번째 스크립트를 즉시 만들 것을 제안합니다. 스크립트의 경우 많은 경우 별도의 폴더를 선택하는 것이 좋지만 우리 게임은 간단하므로 프로젝트의 루트 폴더에서 바로 스크립트를 생성할 수 있습니다. 이렇게 하려면 프로젝트 창에서 컨텍스트 메뉴를 호출하고 만들기 목록을 선택한 다음 "C # 스크립트"를 클릭합니다. 예를 들어 새 스크립트의 이름을 소리로 지정하고 두 번 클릭하여 엽니다. 표준 업데이트 및 시작 방법을 제거한 다음 필요한 방법을 등록하면 다음 유형의 스크립트가 생성됩니다.

편집기를 재구성하지 않은 경우 스크립트가 MonoDevelop에서 열립니다. 그 구조를 분석하자 ...

실제로 모든 C # 스크립트에는 세 가지 주요 부분이 있습니다.

  1. 맨 위에는 스크립트가 작동하기 위해 연결해야 하는 라이브러리가 나열됩니다(예: "Unity.Engine 사용"은 엔진 자체를 연결하고 "System.Collections 사용"은 여러 내장 라이브러리를 포함하는 스크립트가 다른 시스템에서 작동하도록 클래스에서).
  2. 클래스 및 변수 선언. C #에는 스크립트라는 개념이 없습니다. 대신에 여러 메서드와 기능을 포함하는 "클래스"라는 개념이 사용됩니다. 사실 Unity 3D의 맥락에서 이것은 실질적으로 동일한 것입니다. :) 기억해야 할 주요 사항은 클래스 이름이 스크립트에 지정한 이름과 일치해야 한다는 것입니다. C #에서 변수의 특성은 유형을 지정해야 한다는 것입니다(스크립트 자체에 선언된 임시 변수 제외). 실제로 이것은 변수에 대한 접근 수준(private 또는 public)과 유형(int, float, bool 또는 스크립트에서와 같이 AudioClip)을 지정해야 함을 의미합니다. 변수 또는 즉시 값을 지정할 수 있습니다.
  3. 메서드 및 기능 집합입니다. 특정 작업을 수행하는 거의 모든 함수를 C #에서는 메서드라고 합니다. 원칙적으로 Unity 3D에 대한 문헌에서는 이를 함수라고 하지만 C#을 별도의 프로그래밍 언어로 말하는 경우에는 메서드입니다. :) Unity에서 순수한 형태의 함수는 예를 들어 사운드 출력, GUI 요소 렌더링 등을 위한 표준 함수로, 메소드 내부에서 사용됩니다.

이제 스크립트의 구조를 알면 그 의미를 이해하기 쉬우며 다음과 같이 요약됩니다. Sounds 클래스(스크립트)에서 구분하기 위해 필요한 이름으로 AudioClip 유형의 9개 변수를 선언합니다. 그들. 우리는 그것들을 반드시 공개로 만듭니다(비공개 것들은 에디터에 표시되지 않으며, 에디터를 통해 사운드를 "매달"해야 합니다). 그런 다음 스크립트 본문에서 표준 "void OnMouseDown()" 메서드를 사용합니다. 이전에는 마우스 클릭 처리만 담당했지만 최신 버전에서는 터치 스크린을 터치하는 것으로도 해석됩니다. 거기에서 우리는 눌려진 콜라이더의 이름을 확인하는 조건을 작성하고 그 중 하나가 눌리는 것을 감지하면 해당 사운드를 출력합니다(표준 기능인 audio.PlayOneShot(); 사용).

코드를 작성할 때 모든 여는 괄호와 닫는 괄호가 있는지 주의 깊게 모니터링하십시오. 그렇지 않으면 콘솔에서 지속적으로 오류 보고서를 수신하고 프로젝트를 전혀 시작할 수 없습니다! 또한 메서드 및 함수 이름에 대문자 사용에 주의하십시오. 그것들 역시 종종 오류의 원인이 됩니다. 그리고 물론 모든 기호(마침표, 콜론 및 대괄호), 즉 언어의 구문을 관찰하십시오. 처음에는 어렵지만 시간이 지나면서 실수 없이 처음부터 쓰기 시작할 것입니다!

스크립트가 준비되면 스크립트를 선택하고 Inspector 창의 각 변수에 사운드를 할당합니다. 이제 장면의 개체에 스크립트를 적용하기만 하면 됩니다. 이 작업을 다시 수행하는 가장 쉬운 방법은 스크립트를 계층 목록에서 원하는 게임 개체로 직접 드래그하는 것입니다.

스크립트가 올바르게 드래그 앤 드롭되면 드래그한 대상의 인스펙터 창에 나타나야 합니다. 따라서 게임에서 소리가 나는 모든 개체로 스크립트를 드래그하고 실행을 시도할 수 있습니다. 게임 버튼을 클릭하면 이제 사전 설정 사운드가 마침내 울립니다!

GUI 소개

원칙적으로 게임은 이미 우리를 위해 작동하지만 어떻게 든 너무 "대머리"입니다. 거기에 뭔가가 빠져 있습니다 ... 그리고 적어도 우리 앞에있는 것의 이름이 새겨진 비문이 있습니다! 즉, 일종의 일관된 사용자 인터페이스를 구현해야 합니다.

사실 GUI는 영어의 약자입니다. "그래픽 사용자 인터페이스", 즉 그래픽 사용자 인터페이스입니다. 일반적으로 다음과 같은 구성 요소가 포함됩니다.

  • 버튼;
  • 창문;
  • 텍스트 영역;
  • 체크박스 및/또는 라디오 버튼;
  • 슬라이더(스크롤 바) 등

Unity 3D에서는 이 모든 것(및 그 이상)이 완전히 존재합니다. 가장 중요한 것은 사용법을 배우는 것입니다! Unity에서 GUI를 사용하여 간단한 제목 레이블을 만드는 방법을 살펴보겠습니다.

이렇게 하려면 Interface라는 새 스크립트를 만들고 다음과 같이 변경합니다.

스크린샷의 스크립트를 자세히 살펴보겠습니다. 여기서 우리는 새로운 유형의 GUIStyle의 공개 변수를 하나만 작성합니다. 이 유형을 사용하면 이 스타일이 할당된 요소의 모양을 시각적으로 변경할 수 있습니다. 스타일은 동일한 유형(예: 버튼)의 인터페이스 요소가 많지만 모양이 달라야 하는 경우에 유용합니다.

다음으로, 다음과 같은 구문을 가진 버튼("GUI.Button")을 만듭니다. 조건 - 4개의 좌표(왼쪽 가장자리로부터의 수평 오프셋, 위쪽 가장자리로부터의 수직 오프셋, 너비, 높이) - 따옴표로 묶인 표시 텍스트 , 옵션, 스타일 표시. 필요한 기능은 버튼 조건 내에 작성됩니다. 우리의 경우 개발자 사이트("Application.OpenURL(" ");")로의 전환을 등록했습니다.

GUI 스크립트는 모든 게임 개체에서 작동할 수 있지만 일반적으로 스크립트를 주 카메라 개체로 드래그하여 수행할 카메라에 "매달"하는 것이 좋습니다. 이제 Hierarchy 창에서 선택하면 Inspector 창에서 우리 스타일의 public 변수를 볼 수 있으며 확장하면 이 스타일의 설정에 완전히 액세스할 수 있습니다!

어떤 상황에서도 배경의 텍스트와 질감의 색상을 지정할 수 있습니다(버튼의 경우 세 가지 옵션(일반 - 일반 보기, 호버 - 호버링 시 및 활성 - 클릭 시)을 등록해야 함), 들여쓰기 및 설정 기본적으로 Unity 3D에서 사용할 수 있는 글꼴은 Arial뿐이지만 다른 글꼴을 프로젝트에 수동으로 로드하고 "글꼴" 필드에 적용하여 수반되는 모든 매개변수를 조정할 수 있습니다.

흥미롭고 동시에 매우 편리하지 않다는 점은 프로젝트를 시작할 때까지 GUI 요소가 무대에 표시되지 않기 때문에 각 요소의 매개 변수를 조정하는 데 많은 시간이 걸릴 수 있다는 것입니다. 프로젝트를 시작하고 위에서 만든 버튼이 어떻게 생겼는지 봅시다.

조건 및 정적 변수로 인터페이스 수정

이미 많은 작업을 수행했지만 항상 개선의 여지가 있습니다. 따라서 마지막 예로 일반 개발자가 일반적으로 게임 및 응용 프로그램을 제공하는 도움말 창을 만들 것을 제안합니다. 이렇게하려면 이미지가있는 폴더에 물음표 형태로 이러한 버튼에 대한 그림을 추가하고 게임 개체를 만드십시오. 콜라이더를 그 위에 걸고 다음 내용으로 "Help"와 같은 이름으로 스크립트를 작성해 보겠습니다.

이 스크립트에는 두 개의 변수가 있습니다. 첫 번째 변수는 이 클래스에 설명된 모든 인터페이스 요소에 사용할 스킨을 정의합니다. 위에서 논의한 스타일과 달리 스킨을 사용하면 할당된 단일 요소의 모양뿐만 아니라 특정 유형의 모든 요소의 모양을 한 번에 변경할 수 있습니다. 또한 스킨은 스타일과 달리 요소에 할당되지 않고 메서드 전체에 대해 즉시 선언되어 다른 스킨이 선언될 때까지 작동합니다. 스킨은 변수뿐만 아니라 별도의 파일로도 존재한다는 점을 기억해야 합니다. 따라서 스킨을 선언하기 전에 "만들기" - "GUI 스킨" 컨텍스트 메뉴의 "프로젝트" 창에서 즉시 스킨을 만들어야 합니다.

두 번째 변수는 논리적입니다(즉, 부울). true 또는 false의 두 가지 값만 가질 수 있습니다. 바이너리 특성으로 인해 이러한 변수는 모든 종류의 스위치를 구현하는 데 적합합니다. 우리의 경우 게임을 설명하는 텍스트를 표시하는 역할을 합니다.

그러나 자세히 살펴보면 마지막 변수에 "정적"이라는 하나의 훌륭한 매개변수가 있음을 알 수 있습니다. 이러한 매개변수를 변수에 추가하면 변수를 정적으로 만들고 다른 스크립트에서 액세스할 수 있습니다!

그러나 나머지 코드로 돌아갑니다. 이미 우리에게 친숙한 "void OnMouseDown()" 메서드는 여기에서 간단한 조건을 사용하여 "isVisible" 변수에 대한 스위치 역할을 합니다. 그러나 조건 뒤에 함수가 하나 더 있습니다. 이 함수("Debug.Log ();")는 콘솔에 필요한 변수 값을 "즉시" 표시하는 데 사용됩니다(괄호 안에 따옴표 없이 입력). 보시다시피, 함수 내에서 변경할 수 없는 텍스트(따옴표로 작성)와 변수(따옴표 없이)를 모두 결합할 수 있습니다. 가장 중요한 것은 모든 데이터 사이에 "+" 기호가 있다는 것입니다.

더 나아가 스크립트의 텍스트에는 인터페이스 렌더링 메서드("void OnGUI() ()")가 있습니다. 이 메서드 안에는 새 스킨("GUI.skin = HelpSkin;")과 새 인터페이스 요소의 선언이 있습니다. GUI.Box 유형의. 버튼과 달리 상자는 비활성 요소이며 일반적으로 다양한 텍스트 또는 그래픽 데이터를 표시하는 데 사용됩니다.

우리가 상자를 어떻게 배치했는지 주목하십시오. 여기에서 모든 값은 직접 지정되지 않고 실제로 웹 개발의 "유동한 레이아웃"과 유사한 수학적 표현을 사용합니다. 문제는 다양한 화면 해상도에서 GUI 요소의 정확한 크기를 지정할 때 적응되지 않고 너무 작거나 반대로 클 수 있다는 것입니다. 엔진의 다음 버전에서 개발자들은 GUI를 반응형으로 만들기로 약속했지만 지금까지는 우리가 변질되어야 합니다 :(

성공으로 가는 마지막 단계는 피부를 맞춤화하는 것입니다. 스크립트 변수에 스킨 파일을 지정한 후 프로젝트 창에서 이 파일을 선택합니다. 다른 파일과 마찬가지로 스킨 설정이 Inspector 창에 표시됩니다. 여기에서 변경될 수 있는 요소(우리의 경우 Box)를 찾고 확장하고 위에서 논의한 스타일과 유사하게 구성합니다.

스크립트가 올바르게 작동하는지 확인하려면 프로젝트를 시작하고 도움말 버튼을 클릭해 보겠습니다.

이제 모든 것이 작동하지만 설명을 숨기기 위해 도움말 버튼을 누르는 것이 항상 편리한 것은 아닙니다. 버튼을 겨냥하는 것보다 알림을 없애기 위해 여유 공간을 찌르는 것이 더 일반적입니다. 그리고 여기서 우리는 "isVisible" 변수를 정적으로 만들고 배경 이미지에 걸린 충돌기를 만들었다는 사실만 필요합니다.

버튼 클릭을 추적하여 사운드를 재생하는 첫 번째 스크립트("사운드")로 돌아가 보겠습니다. 그 안에(더 정확하게는 "void OnMouseDown()" 메서드 내에서) 한 줄만 작성하면 충분합니다.

if (this.name! = "HelpButton") (Help.isVisible = false;)

이 줄을 사용하여 조건을 설정합니다. 눌려진 콜라이더의 이름이 도움말 버튼의 이름과 같지 않으면 "도움말" 스크립트의 "isVisible" 변수가 "거짓"과 같습니다. "정적" 포스트스크립트를 사용하려면 "isVisible" 변수만 있으면 됩니다. 그렇지 않으면 오류가 발생합니다.

이제 시작 시 오른쪽 상단 모서리에 있는 버튼을 클릭할 때뿐만 아니라 화면의 빈 부분을 터치할 때도 도움말 창이 닫히는 것을 볼 수 있습니다. 여전히 개선할 수 있는 유일한 것은 창을 숨기고 클릭하여 ... 이것이 "숙제"가 될 것입니다.) GUI 상자가 유사하게 설계된 버튼으로 변경되어야 한다고 말할 수 있을 뿐입니다. , 다시, 스킨을 설정하고 "isVisible" 변수를 변경하는 함수를 처방합니다. 그럼 조용히 할게요 :)

게임 컴파일 및 프로젝트 저장

마침내, 모든 것이 우리를 위해 작동합니다! 이것은 게임을 저장하고 실제 장치에서 테스트할 시간임을 의미합니다. 이렇게 하려면 실행 파일로 컴파일해야 합니다(예: Windows의 경우 EXE, Android의 경우 APK).

게임을 PC용으로 컴파일하려는 경우에는 사전 설정이 필요하지 않습니다. 그러나 Android의 경우 처음에 다운로드한 Android SDK를 먼저 연결해야 합니다. 이것은 매우 간단하게 수행됩니다. "편집" 메뉴로 이동하여 "기본 설정" 항목을 호출하고 열리는 창에서 "외부 도구" 탭으로 이동합니다. 여기에서 "Android SDK Location" 줄을 찾고 있으며 그 안에 SDK를 사용하여 압축을 푼 아카이브의 경로를 지정합니다(아래 스크린샷 참조). 그건 그렇고, 여기에서 기본 활성 괴물 텍스트 편집기 MonoDevelop를 좋아하는 것으로 변경할 수도 있습니다. :)

그리고 이제 진실의 순간이 왔습니다! "파일" 메뉴로 이동하여 "빌드 설정" 항목을 찾으십시오. 열리는 창에서 어셈블리에 대한 장면을 즉시 추가해야 합니다. 우리 프로젝트에서와 같이 장면이 하나만 있는 경우 "현재 추가" 버튼을 누르는 것으로 충분합니다. 여러 개 있는 경우 각각을 열고 동일한 방식으로 장면 목록에 추가한 다음 끌어서 놓기를 통해 원하는 순서를 구성해야 합니다.

다음 단계는 빌드 플랫폼(Android용 게임을 계획 중이므로 선택함)을 선택하고 아래의 "플레이어 설정" 버튼을 누르는 것입니다. Inspector 창에서 여러 설정이 열리며 그 중 일부는 필수이거나 매우 바람직합니다. 설정 목록 상단에 개발사명, 프로그램명, 해당 아이콘(각각 회사명, 제품명, 기본 아이콘)을 표기하는 것이 바람직하다.

하단의 "기타 설정" 섹션에는 "번들 식별자" 및 "번들 버전"이라는 두 가지 필수 매개변수가 있습니다. 기본 버전은 1.0으로 설정되어 있지만 식별자는 수동으로 만들어야 하며 가급적이면 고유해야 합니다. 예약어 "com", 개발자 회사 이름, 마지막에 응용 프로그램 자체 이름의 세 부분으로 구성되어야 합니다.

나머지 어셈블리 설정은 사용자의 재량에 따라 변경되거나 전혀 변경되지 않을 수 있습니다. 가장 중요한 것은 이제 컴파일을 시작할 수 있다는 것입니다. 이렇게 하려면 "빌드 설정" 창에서 "빌드" 버튼을 클릭하고 프로그램이 APK 파일에 포장된 기성 애플리케이션을 제공할 때까지 기다리면 됩니다. :)

결론

이것으로 가장 간단한 Android용 애플리케이션을 만드는 방법에 대한 강의 검토가 끝났습니다. 우리가 이야기 한 모든 것을 반복 할 수 있도록 기사 끝에서 게임의 모든 리소스를 별도의 폴더 형태로 저장하는 아카이브에 대한 링크를 제공합니다 (모든 것을 수행하려는 경우 스크래치) 및 unitypackage 확장자를 가진 파일 형식입니다. 후자를 사용하면 종속성 등을 포함하여 전체 프로젝트를 Unity로 한 번에 가져올 수 있습니다.

프로젝트를 가져오려면(그리고 인터넷이나 에셋 스토어에서 다운로드한 모든 플러그인) "자산" 메뉴로 이동하여 "패키지 가져오기" 항목을 선택한 다음 "사용자 정의 패키지"를 선택해야 합니다. 그런 다음 파일의 경로를 지정하고 "가져오기" 버튼을 클릭합니다. 그건 그렇고, "패키지 내보내기" 항목을 클릭하여 동일한 메뉴("자산")에서 이러한 단일 패키지에 저장하여 프로젝트의 전체 백업을 만들 수 있습니다.

마찬가지로, 모든 것 :) Unity 3D를 처음부터 마스터한 사람으로서 이 기사에서 최대 질문 수에 대한 답변을 제공하고 처음에 발생하는 엔진 작업의 주요 뉘앙스를 강조하려고 했습니다. 그러나 누군가에게는 이것이 충분하지 않을 수 있으므로 질문이 있는 경우 이메일이나 포럼을 통해 직접 저에게 연락할 수 있습니다. 최대한 도와드리겠습니다!

모든 프로젝트의 행운과 성공적인 구현을 기원합니다!

추신 소스에 대한 열린 활성 링크가 표시되고 Ruslan Tertyshny의 저자가 유지되는 경우 이 기사를 자유롭게 복사하고 인용할 수 있습니다.

Unity 3D는 고품질 자료를 만드는 작업에 전문적으로 접근하는 사람들에게 없어서는 안될 도우미가 될 것입니다. 이 응용 프로그램은 이미지, 사운드 및 비디오와 같은 자신의 콘텐츠로 보완할 수 있는 기성품 모델, 스크립트 및 텍스처를 통합합니다.

Unity 3D 기성 제품은 휴대폰에서 SMART TV에 이르기까지 거의 모든 인기 플랫폼과 호환됩니다.

프로그램의 특징:

  • 훈련 가능한 Unity 엔진;
  • 유연한 다기능 편집기;
  • 높은 컴파일 속도;
  • 배우기 쉬운 인터페이스;
  • 많은 플랫폼과의 호환성.

작동 원리

프로그램을 사용하려면 Unity Hub 플랫폼을 다운로드해야 하며 이를 통해 Personal 무료 버전의 기능을 사용해 볼 수 있습니다. 연간 최대 $ 100,000의 수익 창출 볼륨으로 사용할 수 있습니다.

무료 버전 외에도 두 가지 다른 고급 버전을 구독할 수 있습니다.

Unity Plus(~ $ 25 월간) - Customer Success Advisor 서비스에 대한 제한된 액세스를 제공하고, 사용자 장치의 충돌에 대한 정보를 수집하고, 리뷰를 모니터링합니다.

Unity Pro(~ $ 125 월간) - Ultimate 구독 옵션. 전문 개발자의 지원을 제공하고 프로그램 작성자의 지원에 우선적으로 액세스할 수 있으며 성능 모니터링 및 통계 수집을 위한 개선된 기능이 포함됩니다.

모든 게임 액션의 구성은 모델의 동작이 의존하는 프로그램(PhysX)의 충분히 고품질의 물리적 코어를 기반으로 합니다. 텍스처와 개체를 가져오는 기능으로 제품을 사용자 정의하거나 개발자 통합 도구를 사용할 수 있습니다. 이 생성자에서 생성된 각 개체는 사용자가 직접 제어할 수 있는 특정 스크립트 및 이벤트 집합이라는 것을 이해하는 것이 중요합니다.

Unity 3D를 전문적으로 사용하려면 애플리케이션의 인터페이스와 기능에 익숙해질 시간이 필요합니다. 이를 위해 인터넷에서 많은 비디오를 찾거나 여러 주요 도시에서 열리는 전문 과정에 참석할 수 있습니다.

3D 그래픽으로 작업하려면 하드웨어 비디오 카드가 있는 최신 컴퓨터가 필요합니다.

장점:

  • 프로젝트 생성을 위한 거의 무한한 기능;
  • 브라우저 기반 3D 그래픽 지원;
  • 게임 콘솔 및 최신 TV와의 호환성;
  • 많은 수의 시각화 도구;
  • 무료 버전이 있습니다.

빼기:

  • 양질의 제품을 만들기 위해서는 특정 지식이 필요합니다.
  • 프로그램의 물리적 코어를 아주 미세하게 조정할 가능성은 없습니다.
  • 인터페이스는 러시아어로 번역되지 않습니다.

Unity 3D를 다운로드하면 인기 있는 온라인 장난감 Juggernaut(우리 리뷰의 주인공의 도구로도 그려짐)에 대한 경쟁자를 준비할 수 있을 뿐만 아니라 멋진 3차원 프레젠테이션을 만들 수도 있습니다. 조금 더 시간이 걸리겠지만 관객들에게 와우 효과는 보장됩니다.

플랫폼의 기능에 대해 알아보려면 Unity 3D의 무료 버전을 다운로드하십시오. 소스 코드에 액세스해야 하는 경우 유료 버전을 살펴보세요.

유사체:

  • Game Editor는 게임 제작을 위한 무료 응용 프로그램입니다.
  • Construct 2는 간단한 인터페이스로 인기 있는 게임 생성자입니다.
  • Construct 2는 2D 프로젝트를 생성하기 위한 강력한 프로그램입니다.