기술 자료

Unity Engine

Unity Engine

Unity C# 스크립트에서 JavaScript 함수 호출

Call functions from your JavaScript plug-in or browser in your Unity project.
읽는 시간 4분최근 업데이트: 한 달 전

Unity C# 코드에서 JavaScript 플러그인의 함수를 사용할 수 있습니다. 웹 페이지 또는 웹 API의 다른 요소와 통신해야 할 수 있으므로 Unity에서 JavaScript 코드를 사용하는 것이 유용할 수 있습니다.
파일 유형과 Unity 스크립트와 상호 작용하기 위해 JavaScript 플러그인을 설정하는 방법에 대해 알아보려면 JavaScript 플러그인 설정을 참조하십시오. C/C++/C# 플러그인과 상호 작용하는 방법을 알아보려면 Unity C# 스크립트에서 C/C++/C# 함수 호출을 참조하십시오.

항목

설명

JavaScript에서 Unity로 다른 변수 전달Unity와 JavaScript 간에 다른 변수를 전달하는 방법에 대한 팁입니다.
자체 범위에서 빌드 코드 실행Unity와 JavaScript 간의 코드 가시성을 개선하는 방법에 대한 팁입니다.
JavaScript 함수를 호출하는 Unity C# 코드 예시이 예시 코드는 Unity에서 JavaScript 함수를 호출하는 방법을 보여 줍니다.
Unity 플러그인을 레퍼런스로 사용레퍼런스로 사용할 수 있는 Unity에 포함된 플러그인의 목록을 표시합니다.

JavaScript에서 Unity로 다른 변수 전달

JavaScript를 Unity와 연동하려면 둘 사이에 효율적인 통신이 필요합니다. JavaScript에서 Unity로 다양한 데이터 유형을 전달하는 방법에 대한 다음 팁을 참조하십시오.

숫자 유형

간단한 숫자 유형을 전환하지 않고 함수 파라미터의 JavaScript로 전달할 수 있습니다.
예를 들어 이러한 JavaScript 함수는 다음과 같습니다.
AddNumbers: function (x, y) { return x + y; },
전환 없이 C#의 정수 값을 허용합니다.
int result = AddNumbers(5, 7);
Emscripten 힙에서 다른 데이터 유형을 포인터로 전달할 수 있습니다. Emscripten 힙은 JavaScript 메모리의 큰 배열에 불과합니다.

문자열

문자열을 JavaScript 문자열로 전환하려면
UTF8ToString
헬퍼 함수를 사용합니다.
var stringMessage = UTF8ToString("Hello World");
문자열 값을 반환하려면
_malloc
를 호출하여 일부 메모리를 할당하고
stringToUTF8
헬퍼 함수를 호출하여 메모리에 JavaScript 문자열을 작성합니다. 문자열이 반환 값인 경우 IL2CPP 런타임이 자동으로 메모리를 확보합니다.
var returnStr = "Hello World"; var bufferSize = lengthBytesUTF8(returnStr) + 1; var buffer = _malloc(bufferSize); stringToUTF8(returnStr, buffer, bufferSize);

배열

프리미티브 유형 배열의 경우 Emscripten은 다음과 같은 여러 정수 크기, 부호 없는 정수 또는 부동 소수점 메모리 표현에 각기 다른
ArrayBufferViews
를 힙에 제공합니다.
HEAP8
,
HEAPU8
,
HEAP16
,
HEAPU16
,
HEAP32
,
HEAPU32
,
HEAPF32
,
HEAPF64
.
다음 함수는
HEAPF32
배열을 반복하여 각 인덱스의 값을 출력합니다.
PrintFloatArray: function (array, size) { for(var i = 0; i < size; i++) console.log(HEAPF32[(array >> 2) + i]); },

텍스처

WebGL에서 텍스처에 액세스하기 위해 Emscripten은 Unity에서 WebGL 텍스처 오브젝트로 네이티브 텍스처 ID를 매핑하는
GL.textures
배열을 제공합니다. Emscripten의 WebGL 컨텍스트인
GLctx
에서 WebGL 함수를 호출할 수 있습니다.
예를 들어 다음 함수는 GL 텍스처 배열의 WebGL 텍스처를 2D 텍스처에 바인딩합니다.
BindWebGLTexture: function (texture) { GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[texture]); },

자체 범위에서 빌드 코드 실행

모든 빌드 코드를 자체 범위에서 실행하는 것이 좋습니다. 자체 범위에 코드가 있는 경우 내장된 페이지 코드와 충돌하지 않고 콘텐츠를 페이지에 내장할 수 있으며, 동일한 페이지에 두 개 이상의 빌드를 내장할 수 있습니다.

.jslib 플러그인의 코드

프로젝트에 모든 JavaScript 코드가
.jslib
플러그인 형태로 있는 경우 이 JavaScript 코드는 컴파일된 빌드와 동일한 범위 내에서 실행되며 코드는 이전 Unity 버전과 동일한 방식으로 작동합니다. JavaScript 플러그인 코드에서 직접 볼 수 있는 일부 오브젝트 및 함수는 다음과 같습니다.
  • Module
  • SendMessage
  • HEAP8
  • ccall

전역 범위에서 JavaScript 함수 호출

내부 JavaScript 함수를 내장된 페이지의 전역 범위에서 호출하려면 웹 템플릿
index.html
에서
unityInstance
변수를 사용해야 합니다.
Unity 엔진 인스턴스화가 성공한 후 다음과 같이
unityInstance
를 사용합니다.
var MyGameInstance = null; script.onload = () => { createUnityInstance(canvas, config, (progress) => { /*...*/ }).then((unityInstance) => { MyGameInstance = unityInstance;
그런 다음
MyGameInstance.SendMessage()
를 사용하여 빌드에 메시지를 보내거나
MyGameInstance.Module
을 사용하여 빌드 모듈 오브젝트에 액세스할 수 있습니다.

JavaScript 함수를 호출하는 Unity C# 코드 예시

다음 JavaScript 코드는
Hello
라는 이름의 함수를 생성합니다. 이 예시에서는 Unity C# 스크립트에서 호출할 수 있도록 JavaScript 플러그인에서 이 코드를 사용합니다.
mergeInto(LibraryManager.library, { Hello: function () { window.alert("Hello, world!"); },});
그런 다음 Unity 프로젝트에서 다음 C# 코드를 사용하여 JavaScript 코드에서
Hello
함수를 호출합니다.
using UnityEngine;using System.Runtime.InteropServices;public class NewBehaviourScript : MonoBehaviour { [DllImport("__Internal")] private static extern void Hello(); void Start() { Hello(); }}
다양한 함수 유형이 포함된 더 큰 코드 예시는 코드 예시: Unity에서 JavaScript 및 C/C++/C# 함수 호출을 참조하십시오.

Unity 플러그인을 레퍼런스로 사용

Unity 설치 폴더에는 다음과 같이 레퍼런스로 사용할 수 있는 플러그인이 몇 개 있습니다.
  • PlaybackEngines/WebGLSupport/BuildTools/lib
  • PlaybackEngines/WebGLSupport/BuildTools/Emscripten/src/library*

추가 리소스