Computer >> 컴퓨터 >  >> 문제 해결 >> Android

Unity로 기본 Android 게임을 만드는 방법

"기본 Unity 플랫폼 게임을 만드는 방법"(및 2부)이라는 제목의 이전 Appual 튜토리얼에서 , Unity와 내장 WebGL 플러그인을 사용하여 간단한 HTML5 기반 브라우저 게임을 만드는 방법을 살펴보았습니다. 이 유사한 자습서에서는 기본 Android Unity를 사용한 게임

요구사항:

  • 통합
  • NotePad++와 같은 우수한 텍스트 편집기(선택사항이지만 권장됨)
  • Android SDK
아직 없는 경우 Unity SDK와 Android SDK를 다운로드하여 설치하는 것으로 시작해야 합니다. Android 환경에서 게임의 APK를 테스트하려면 Android SDK가 필요합니다.

Unity를 실행하고 새 프로젝트를 만듭니다. 2D 프로젝트로 만드세요.

익숙해져야 할 여러 패널이 있습니다. 계층 패널에는 모든 장면 요소가 포함됩니다(장면 =현재 작업 중인 "레벨"). 그런 다음 편집기 내부에서 게임을 플레이/테스트하는 데 사용되는 게임 탭이 있으며, 오른쪽에는 조명, 물리학 등과 같은 다양한 항목을 편집할 인스펙터 패널이 있습니다.

우리가 하고 싶은 첫 번째 일은 스프라이트를 만드는 것입니다. 이것은 우리가 제어하는 ​​주인공이 될 것입니다. 눈으로 사각형을 그리는 것과 같이 자신만의 스프라이트를 그리거나 인터넷에서 스프라이트를 가져올 수 있습니다. .PNG 파일(투명 배경)인지 확인하십시오.

스프라이트를 기본 장면 창(가장 큰 창)으로 끌어다 놓습니다. 왼쪽의 계층 패널에도 나타납니다.

이제 우리는 몇 개의 플랫폼을 만들 것입니다. 이것은 벽과 다른 플랫폼을 만들기 위해 크기를 쉽게 조정할 수 있기 때문에 단순한 정사각형일 수 있습니다.

따라서 새 정사각형 "스프라이트"를 만들고 스프라이트 캐릭터와 마찬가지로 장면 창에 끌어다 놓기만 하면 됩니다.

이제 Unity에 메인 캐릭터에 물리를 부여하도록 지시해야 합니다. 메인 스프라이트 캐릭터를 클릭하고(씬 창에서 파란색으로 강조 표시되어야 함) Inspector 패널에서 "GameObjects"를 찾습니다.

"구성 요소 추가> 물리 2D> RigidBody2D"를 클릭합니다. 이렇게 하면 스프라이트에 물리가 자동으로 추가됩니다. 그렇지 않으면 다른 SDK에서 직접 스크립팅해야 했을 것입니다.

Unity로 기본 Android 게임을 만드는 방법

메인 스프라이트 캐릭터가 통제 불능 상태로 회전하는 것을 방지하기 위해 Inspector 패널에서 Constraints 탭을 찾아(메인 스프라이트가 여전히 Scene 창에서 강조 표시된 상태로) "Freeze Rotation Z" 확인란을 선택합니다.

"재생" 버튼을 누르면 메인 스프라이트 캐릭터가 하늘에서 떨어지고 끝없이 떨어질 것입니다. 나중에 다룰 예정이지만 물리를 쉽게 적용할 수 있었던 방법에 주목하세요. 우리가 적용한 물리학은 적용되는 모양에 따라 다릅니다. 따라서 예를 들어 구에 동일한 물리학을 적용하면 구르게 됩니다.

또한 캐릭터가 빙빙 도는 것을 방지하기 위해 방향을 수정하고 싶습니다. 플레이어가 선택된 상태에서 검사기에서 '제약'을 찾고 회전 Z를 고정하는 상자를 선택합니다. 이제 재생을 다시 클릭하면 플레이어가 하늘에서 무한한 운명으로 떨어지는 것을 볼 수 있습니다.

메인 스프라이트 캐릭터가 끝없이 떨어지는 것을 막으려면 콜라이더를 추가해야 합니다. 이것은 기본적으로 우리가 메인 스프라이트 캐릭터에 추가할 모양의 솔리드 아웃라인입니다. 메인 스프라이트 캐릭터를 강조 표시하고 "구성 요소 추가> 물리 2D> BoxCollider2D"를 클릭합니다.

이제 이전에 만든 플랫폼과 똑같은 작업을 수행합니다. 이제 메인 스프라이트 캐릭터가 플랫폼과 "충돌"하고 거기에 머물러야 합니다.

이제 카메라가 메인 스프라이트 캐릭터를 따라갈 수 있도록 하고 싶습니다. 장면 내부에는 이미 카메라 객체가 있어야 합니다. 이것을 위로 드래그하고 싶습니다. 메인 스프라이트 캐릭터.

이는 3D 기반 러너를 만드는 경우 특히 중요합니다. , 기본 게임 개체(주요 스프라이트 캐릭터) 뒤에 지속적으로 카메라가 있어야 하는 Slope와 같은 것입니다.

Unity로 기본 Android 게임을 만드는 방법

이제 Hierarchy 패널로 이동하고 GameObjects 목록에서 카메라를 아래 드래그합니다. 메인 스프라이트 캐릭터(Player GameObject). 이렇게 하면 메인 스프라이트 캐릭터가 '부모'가 됩니다. 카메라의. 따라서 플레이어 게임 오브젝트가 화면 주위를 이동할 때마다 카메라가 따라야 합니다.

따라서 이 게임 튜토리얼에서는 Run 3와 같은 기본 무한 러너 유형 게임을 만들 것입니다. 이 게임에서는 주인공이 화면을 가로질러 달리고 장애물을 피합니다(또는 장애물에 부딪힌 경우 "게임 오버"). 여기에는 몇 가지 스크립트가 필요하며 대부분은 이 가이드에서 제공됩니다.

"Assets" 폴더를 마우스 오른쪽 버튼으로 클릭하고 새 폴더를 만듭니다. 이름을 Scripts로 지정합니다. . 이제 이 새 폴더를 마우스 오른쪽 버튼으로 클릭하고 "Create> C# Script"를 누르고 이름을 PlayerControls로 지정합니다. . 이 스크립트는 메인 스프라이트 캐릭터의 동작을 정의할 것입니다.

이 새 스크립트를 두 번 클릭하면 반드시 Visual Studio에서 엽니다. 대안으로(개인 취향에 따라) NotePad++와 같은 것으로 편집할 수 있습니다.

스크립트 파일에는 이미 약간의 "보일러 플레이트" 코드가 있어야 합니다. 기본적으로 이것은 그대로 두거나 필요에 따라 조정해야 하는 스크립트이며 많은 시간을 절약해 줍니다. 그래서 우리는 새로운 개체를 추가할 것입니다.

void Start() 줄 위:

Unity로 기본 Android 게임을 만드는 방법

공개 Rigidbody2D rb;

우리가 추가해야 하는 다음 코드는 Start() 안에 들어가고 강체를 찾는 데 사용됩니다. 기본적으로 Unity는 GameObjects(주요 스프라이트 캐릭터)에 연결한 물리를 찾고 Start ()는 새로운 객체나 스크립트가 생성될 때 실행됩니다.

이제 물리적 개체를 찾습니다.

rb = GetComponent<Rigidbody2D>();

그리고 Update()

안에 이 줄을 추가합니다.
rb.velocity = new Vector2(3, rb.velocity.y);

Update()가 하는 일은 지속적으로 새로고침하는 것이므로 거기에 추가된 모든 코드는 계속해서 실행됩니다(객체가 파괴되지 않는 한). 그래서 우리가 한 것은 Y 축에서 동일한 속도(rb.velocity.y)를 사용하지만 수평 축에서 3의 속도를 사용하여 rigidbody가 새로운 벡터를 갖도록 스크립트에 지시하는 것입니다. 앞으로는 'FixedUpdate()'도 사용할 수 있습니다. 스크립트의 업데이트/새로 고침 양을 제어할 수 있기 때문에 비슷하지만 다릅니다.

스크립트를 저장하고 Unity로 돌아간 다음 메인 스프라이트 캐릭터를 클릭하여 강조 표시합니다. Inspector 패널에서 Add Component> Scripts로 이동하여 방금 저장한 스크립트를 추가합니다. 이제 재생 버튼을 클릭하면 메인 스프라이트 캐릭터가 플랫폼 가장자리를 향해 계속 이동해야 합니다.

플레이어 입력 컨트롤 만들기

따라서 이것은 장애물이 있는 끝없는 러너 스타일 게임이기 때문에 '점프' 버튼과 같은 플레이어용 컨트롤을 추가해야 합니다.

이전의 스크립트를 다시 열면 다음 코드를 추가할 것입니다.

if (Input.GetMouseButtonDown(0))  {

         rb.velocity = new Vector2(rb.velocity.x, 5);

         }

이것을 Update() 메서드 안에 넣으면 기본적으로 Unity에 플레이어가 마우스 버튼(Android에서는 화면 탭으로 번역됨)을 클릭할 때 메인 스프라이트 캐릭터가 "점프 " 공중에. 이는 값이 5인 Y축에 속도를 추가했기 때문입니다(값이 높을수록 물론 더 높은 점프를 의미함).

코딩에 익숙하지 않다면 If If 때문에 기본적으로 "해야 하거나 하지 말아야 할" 종류의 지시입니다. 문자 그대로 이런 일이 발생하면 이 명령을 수행하십시오 . 따라서 플레이어가 마우스를 클릭하지 않거나 Android 화면을 탭하지 않으면 분명히 스크립트가 실행되지 않습니다.

계속 진행하기 전에 "재생" 버튼을 클릭하고 올바르게 작동하는지 확인하십시오.

다음으로 장애물(주인공 스프라이트를 "파괴"할 수 있음), 게임 점수 및 "게임 종료" 메뉴를 추가합니다.

지금까지 게임을 테스트했다면 지금까지 우리가 가진 유일한 문제는 우리가 만든 "점프" 버튼을 누르면 캐릭터가 접지 상태인지 여부에 관계없이 캐릭터가 점프한다는 것입니다. 우리는 원한다. 하지만 우리는 그것을 고칠 것입니다.

스크립트에서 이 코드를 에 추가합니다. Update() 메서드:

public Transform groundCheck;

public Transform startPosition;

public float groundCheckRadius;

public LayerMask whatIsGround;

private bool onGround;

And then add this next line to the Update method above the if statement:

onGround = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);

And next you will change this following line to include “&& onGround”

if (Input.GetMouseButtonDown(0) && onGround) {

So our entire script should basically look like this:

public class PlayerControls : MonoBehaviour

 {

     public Rigidbody2D rb;

     public Transform groundCheck;

     public Transform startPosition;

     public float groundCheckRadius;

     public LayerMask whatIsGround;

     private bool onGround;




void Start() {

     rb = GetComponent<Rigidbody2D>();

     }




    void Update() {

         rb.velocity = new Vector2(3, rb.velocity.y);

         onGround = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);       

         if (Input.GetMouseButtonDown(0) && onGround) {

                 rb.velocity = new Vector2(rb.velocity.x, 5);

                 }




    }




}

우리가 한 일을 설명하기 위해 게임 세계 공간에서의 위치를 ​​의미하는 새로운 "변환"을 만들었습니다. 반경을 설정했고 반경이 "지면" 레이어와 겹치는지 확인하도록 Unity에 지시하고 있습니다. 따라서 반경이 "지면"과 동기화되면 캐릭터가 점프할 수 있어야 하며, 점프에서 이미 공중에 떠 있으므로 다시 점프할 수 없어야 합니다. 기본적으로 온그라운드 만일 이 사실일 것입니다. groundCheck라는 이름의 변환 그라운드 레이어와 겹칩니다. 그것이 의미가 있기를 바랍니다.

따라서 스크립트를 저장하고 Unity로 돌아가면 플레이어를 강조 표시한 후 Inspector에 더 많은 옵션이 추가되었음을 알 수 있습니다. 이는 공개 변수이며 원하는 대로 조정할 수 있습니다.

이제 Hierarchy를 마우스 오른쪽 버튼으로 클릭하고 비어 있는 새 오브젝트를 만들고 메인 Scene 창에서 메인 캐릭터 스프라이트 아래에 있도록 드래그합니다. 이 빈 오브젝트를 바닥을 감지할 위치에 배치합니다. 개체 이름을 "Check Ground"로 바꾼 다음 이전에 카메라로 했던 것처럼 플레이어의 게임 개체 아래로 드래그합니다(개체 간의 부모-자식 관계를 만들기 위해). 이제 빈 오브젝트는 카메라처럼 주인공 스프라이트를 따라가며 바닥 거리를 지속적으로 확인합니다.cam

이제 메인 캐릭터 스프라이트를 선택하고 Inspector 패널로 이동합니다. Check Ground 개체를 "groundCheck"라는 공간으로 드래그합니다. '변환' 위치는 이 새 개체의 위치와 같아야 하며 '반경'이라고 표시된 곳에서 0.1로 설정합니다.

그라운드 레이어를 정의해야 합니다. 지면 지형을 선택하고 Inspector에서 "Layer:Default"(드롭다운 상자임) 버튼을 찾아 "Add Layer"를 선택하세요.

이제 플랫폼의 레이어로 "그라운드"를 선택하고 게임 창의 다른 플랫폼에 대해 이 작업을 반복합니다. 메인 캐릭터 스프라이트 오브젝트에 "그라운드란 무엇인가"라고 표시된 곳에서 그라운드 레이어도 선택합니다.

우리가 한 것은 플레이어 스크립트가 확인을 수행하도록 지시하는 것입니다. if 화면의 작은 점이 레이어와 일치하는 항목과 겹치면 이것이 사실인 경우에만 캐릭터가 점프합니다.

충돌 시 게임 오버 및 게임 메뉴

모든 것을 마무리하기 위해 우리가 하고자 하는 마지막 작업은 A:장애물과 충돌하여 게임이 종료되도록 하고, B:다시 플레이 버튼이 있는 "게임 오버" 메뉴 화면을 만드는 것입니다.

기본적으로 하고 싶은 것은:

  1. 플레이어 추가 개체 및 강체 할당 및 충돌기 선택하세요.
  2. 추가 개체 및 강체 할당 및 충돌기 당신의 선택의. (선택사항, '적' 태그 추가 )
  3. 새 C# 스크립트  만들기 Player 에 구성요소로 추가합니다. (또는 플레이어에 연결된 스크립트를 사용하세요. 이미 스크립트가 있는 경우 새로 만들 필요가 없습니다.)
  4. 스크립트에 추가:
void OnCollisionEnter(Collision coll){

           Debug.Log("Collision"); //Check to see if it even registers a collision, if it works you can remove this line

           if(coll.gameobject.tag == "Enemy"){ //sees if the object your player collided with has a tag called "Enemy", this can be replaced with if(coll.gameobject.name == ... but using a tag is an easy way to do it.

                    //Add your code here, like:

                    Application.LoadLevel("GameOver");

                    Debug.Log("Working");  //if working, you can remove this line.

           }

이 예제 스크립트를 가지고 놀아 보세요. 약간의 시행착오를 거치면 우리가 필요로 하는 것을 정확히 수행할 수 있을 것입니다.

이제 Play 버튼으로 GameOver "레벨"을 만드는 방법을 정확히 보려면 ​​Appual 가이드 "기본 Unity 플랫폼 게임을 만드는 방법 Pt. 2”.