Unity와 함께 사용하기 위해 Node 및 Express를 사용하여 REST 서비스 만들기 - 파트 1

8642 단어 unitynoderesttutorial
Unity로 게임을 만드는 것은 매우 멋진 일입니다. 그러나 사용자 정보, 진행 상황, 항목, 적과 같은 일부 데이터를 데이터베이스에 저장하는 것과 같은 온라인 기능은 어떻습니까? 노드 및 나머지 API에 익숙할 수 있지만 Unity에서 요청을 보내고 수신된 데이터를 처리하는 것은 Unity에서 약간 가렵습니다.

그래서 유니티와 노드로 블로그 시리즈를 던지자. 그런 다음 heroku에서 호스팅합니다!

이 부분에서는 "Hello World"프로젝트를 만들 것입니다.

다음은 github의 프로젝트 링크입니다.

rest api에 대해 들어본 적이 없다면 먼저 이것을 확인하여 의미를 이해하는 것이 좋습니다.

그런 다음 코드를 작성합니다.

먼저 터미널을 열고 노드 프로젝트 파일을 시작합니다.

npm init

둘째, 익스프레스 설치.

npm install express

우리의 진입점을 만드십시오. app.js라고 부르겠습니다.

touch app.js

좋아하는 코드 편집기(이 경우 광산은 vscode임)로 새로 생성된 파일을 열고 Express를 가져옵니다.

const express = require('express');
const app = express();

앱은 포트 3000을 수신해야 합니다. 두 번째 매개변수인 콜백은 콘솔에 메시지를 씁니다.

app.listen(3000, () => console.log('started and listening.'));

실행 전 마지막 단계입니다. 앱에 요청하면 사용자에게 다시 응답해야 합니다. 익스프레스에서 이 프로세스는 아래와 같이 어리석게 단순화되었습니다. localhost:3000를 누르거나 우편 배달부와 전화를 걸면 앱이 특정 엔드포인트에서 응답합니다. Hello World 프로젝트의 경우 홈 디렉토리 '/'에서 응답하겠습니다.

끝점 또는 api ,http 콜백 프로토콜이 무엇을 의미하는지 어려움을 겪고 있다면 먼저 이것을 확인하는 것이 좋습니다.

app.get('/', (req, res) => {
    res.send('Hello Unity Developers!');
})

실행하기 전에 코드를 살펴보겠습니다.

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('Hello Unity Developers');
})

app.listen(3000, () => console.log('started and listening.'));

터미널을 열고 코드를 실행합니다.

node app.js



오류가 발생하지 않으면 터미널에 console.log가 표시됩니다.

이제 Unity로 전환하기 전에 테스트해 보겠습니다.
브라우저나 우체부로 이동하여 주소localhost:3000를 테스트하십시오.





작동하는 것 같습니다!
그래서 우리는 요청하면 응답하는 작동하는 서비스를 만들었습니다. 우리는 어떻게 화합합니까?

운 좋게도 Unity에는 http 콜백 래퍼가 있습니다.

새로운 빈 Unity 프로젝트를 열고 장면에 빈 GameObject를 만들고 이름을 'client'로 바꿉니다.



이제 프로젝트 폴더에 C# 스크립트를 만들고 이름을 ClientAPI로 지정하겠습니다.



해당 스크립트에서 코드를 작성하기 전에 새 네임스페이스를 추가해야 합니다.

using UnityEngine.Networking;

그런 다음 단일에서 비동기와 같은 기능을 활성화하는 IEnumerator를 반환하는 메서드를 정의합니다. 유니티 코루틴을 사용하는 방법을 잘 모르겠다면 좋은 시작이 될 수 있습니다.

public IEnumerator Get(string url)
{

}

웹 요청을 만들기 위해 새로 정의합시다UnityWebRequest.

public IEnumerator Get(string url)
{
    using(UnityWebRequest www = UnityWebRequest.Get(url))
    {

    }
}

여기에 using 문이 필요한 이유에 대해 link을 입력하겠습니다. 추가 정보를 보려면 unity docs도 확인하십시오.

이 부분은 쿠루틴 마법이 관련된 부분입니다. 요청을 보낼 때 yield return keyword를 사용해야 하며 완료될 때까지 프로세스가 완료되었는지 확인합니다.

public IEnumerator Get(string url)
{
    using(UnityWebRequest www = UnityWebRequest.Get(url))
    {
        yield return www.SendWebRequest();
    }
}

그런 다음 오류를 확인하십시오.

public IEnumerator Get(string url)
{
    using(UnityWebRequest www = UnityWebRequest.Get(url))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError)
        {
            Debug.Log(www.error);
        }
        else
        {

        }
    }
}

오류가 없으면 성공적으로 완료된 것입니다.

http 연결에서 일부 데이터를 복구했지만 추가 작업을 위해 이를 문자열로 구문 분석해야 합니다. API에서 데이터를 www.downloadHandler.data로 공급합니다. 구문 분석된 데이터를 문자열로 반환합니다.

public IEnumerator Get(string url)
{
    using(UnityWebRequest www = UnityWebRequest.Get(url))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError)
        {
            Debug.Log(www.error);
        }
        else
        {
            if (www.isDone)
            {
                // handle the result
                var result = System.Text.Encoding.UTF8.GetString(www.downloadHandler.data);
                Debug.Log(result);
            }
            else
            {
                //handle the problem
                Debug.Log("Error! data couldn't get.");
            }
        }
    }
}

그리고 URL을 제공할 공용 변수를 정의합니다.
이제 Start에서 메서드를 호출해 보겠습니다. 코루틴을 사용하려면 StartCoroutine()로 호출해야 합니다. 그렇지 않으면 작동하지 않습니다.
전체 스크립트를 살펴보십시오.

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

public class ClientApi : MonoBehaviour
{
    public string url;

    void Start()
    {
        StartCoroutine(Get(url));
    }

    public IEnumerator Get(string url)
    {
        using(UnityWebRequest www = UnityWebRequest.Get(url)){
            yield return www.SendWebRequest();

            if (www.isNetworkError)
            {
                Debug.Log(www.error);
            }
            else
            {
                if (www.isDone)
                {
                    // handle the result
                    var result = System.Text.Encoding.UTF8.GetString(www.downloadHandler.data);
                    Debug.Log(result);
                }
                else
                {
                    //handle the problem
                    Debug.Log("Error! data couldn't get.");
                }
            }
        }

    }
}

유니티 에디터로 돌아가서 클라이언트 GameObject에 스크립트를 추가합니다.



다음으로 URL에 주소를 입력합니다.



이제 재생을 누르십시오.



성공하면 콘솔에 메시지가 표시됩니다.

우와! 멋지지 않나요?

우리의 서버와 유니티 클라이언트는 매력처럼 작동합니다. 축하해요!

다음은 github의 프로젝트 링크입니다.

보너스



예고편 이미지를 추가하여 다음 부분에 대한 과대 광고를 만들어 봅시다 :)





좋은 웹페이지 즐겨찾기