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 문자열로 전환하려면 헬퍼 함수를 사용합니다.
UTF8ToStringvar stringMessage = UTF8ToString("Hello World");
문자열 값을 반환하려면 를 호출하여 일부 메모리를 할당하고 헬퍼 함수를 호출하여 메모리에 JavaScript 문자열을 작성합니다. 문자열이 반환 값인 경우 IL2CPP 런타임이 자동으로 메모리를 확보합니다.
_mallocstringToUTF8var returnStr = "Hello World"; var bufferSize = lengthBytesUTF8(returnStr) + 1; var buffer = _malloc(bufferSize); stringToUTF8(returnStr, buffer, bufferSize);
배열
프리미티브 유형 배열의 경우 Emscripten은 다음과 같은 여러 정수 크기, 부호 없는 정수 또는 부동 소수점 메모리 표현에 각기 다른 를 힙에 제공합니다. , , , , , , , .
ArrayBufferViewsHEAP8HEAPU8HEAP16HEAPU16HEAP32HEAPU32HEAPF32HEAPF64다음 함수는 배열을 반복하여 각 인덱스의 값을 출력합니다.
HEAPF32PrintFloatArray: function (array, size) { for(var i = 0; i < size; i++) console.log(HEAPF32[(array >> 2) + i]); },
텍스처
WebGL에서 텍스처에 액세스하기 위해 Emscripten은 Unity에서 WebGL 텍스처 오브젝트로 네이티브 텍스처 ID를 매핑하는 배열을 제공합니다. Emscripten의 WebGL 컨텍스트인 에서 WebGL 함수를 호출할 수 있습니다.
GL.texturesGLctx예를 들어 다음 함수는 GL 텍스처 배열의 WebGL 텍스처를 2D 텍스처에 바인딩합니다.
BindWebGLTexture: function (texture) { GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[texture]); },
자체 범위에서 빌드 코드 실행
모든 빌드 코드를 자체 범위에서 실행하는 것이 좋습니다. 자체 범위에 코드가 있는 경우 내장된 페이지 코드와 충돌하지 않고 콘텐츠를 페이지에 내장할 수 있으며, 동일한 페이지에 두 개 이상의 빌드를 내장할 수 있습니다.
.jslib 플러그인의 코드
프로젝트에 모든 JavaScript 코드가 플러그인 형태로 있는 경우 이 JavaScript 코드는 컴파일된 빌드와 동일한 범위 내에서 실행되며 코드는 이전 Unity 버전과 동일한 방식으로 작동합니다. JavaScript 플러그인 코드에서 직접 볼 수 있는 일부 오브젝트 및 함수는 다음과 같습니다.
.jslibModuleSendMessageHEAP8ccall
전역 범위에서 JavaScript 함수 호출
내부 JavaScript 함수를 내장된 페이지의 전역 범위에서 호출하려면 웹 템플릿 에서 변수를 사용해야 합니다.
index.htmlunityInstanceUnity 엔진 인스턴스화가 성공한 후 다음과 같이 를 사용합니다.
unityInstancevar MyGameInstance = null; script.onload = () => { createUnityInstance(canvas, config, (progress) => { /*...*/ }).then((unityInstance) => { MyGameInstance = unityInstance;
그런 다음 를 사용하여 빌드에 메시지를 보내거나 을 사용하여 빌드 모듈 오브젝트에 액세스할 수 있습니다.
MyGameInstance.SendMessage()MyGameInstance.ModuleJavaScript 함수를 호출하는 Unity C# 코드 예시
다음 JavaScript 코드는 라는 이름의 함수를 생성합니다. 이 예시에서는 Unity C# 스크립트에서 호출할 수 있도록 JavaScript 플러그인에서 이 코드를 사용합니다.
HellomergeInto(LibraryManager.library, { Hello: function () { window.alert("Hello, world!"); },});
그런 다음 Unity 프로젝트에서 다음 C# 코드를 사용하여 JavaScript 코드에서 함수를 호출합니다.
Hellousing 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*