Unity Web Player and browser communication

Desktop!

Unity Web Player 컨텐츠를 포함하는 HTLM페이지는 그 컨텐츠와 통신할 수 있고 그 반대의 경우도 그렇습니다. 기본적으로 두가지 통신 방향이 존재합니다:

  • 웹 페이지가 유니티 웹 플레이어 컨텐츠 안의 함수를 콜 합니다.
  • 유니티 웹 플레이어 컨텐츠가 웹 페이지의 함수를 콜 합니다.

각각의 이런 통신의 방향은 다음에서 좀더 자세히 설명합니다.

Calling Unity web player content functions from the web page

유니티 웹 플레이어 객체는 SendMessage()라는 함수를 가지는데 이것은 유니티 웹 플레이어 안의 함수를 부르기위해 웹 페이지로 부터 불려지는 함수 입니다. 이 함수는 유니티 스크립팅 API에 있는 GameObject.SendMessage 함수와 아주 비슷합니다. 웹 페이지에서 불려지면 객체 이름, 함수 이름 그리고 하나의 인자를 넘겨주고 SendMessage()가 주어진 게임 객체안의 주어진 함수를 부릅니다.

유니티 웹 플레이어의 SendMessage()함수를 부르기 위해서 사용자는 첫째로 유니티 웹 플레이어 객체에 대한 참조를 얻어야합니다. 사용자는 unityObject.getObjectById() 함수를 이용해 그 객체의 참조를 얻을 수 있습니다. 여기유니티 웹 플레이어 컨텐츠와 UnityContent의 아이디 값에서 SendMessage() 함수를 실행 시키는 자바 스크립트 함수 예가 있습니다. 차례로 SendMessage()MyObject라는 게임 객체의 MyFunction() 라는 함수를 부르고 스트링을 인자로 하여 넘겨줍니다:

<script type="text/javascript" language="javascript">
<!--
function SaySomethingToUnity()
{
	var unity = unityObject.getObjectById("UnityContent");
	unity.SendMessage("MyObject", "MyFunction", "Hello from a web page!");
}
-->
</script>

사용자가 MyObject라는 이름의 GameObject 에 스크립트를 첨부해야하고 그 스크립트는 MyFunction이라는 함수를 구현해야하는 유니티 웹 플레이어 컨텐츠의 내부:

function MyFunction(param : String)
{
    Debug.Log(param);
}

_주의:_ 만약 함수가 인자를 가지지 않으면 빈 스트링 ("") 이 인자로 넘어와야 함에 주의하세요.

하나의 스트링, 정수 또는 float인자는 SendMessage() 사용시 반드시 넘겨져야 하며 부르는 쪽에서는 그 파라미터가 필요합니다. 사용자가 그것이 필요가 없으면 간단히 0또는 다른 기본 값을 넘겨주고 유니티 쪽에서는 그것을 무시합니다. 게다가 이름에 의해 명시된 그 게임 객체는 경로 이름의 형식으로 주어질 수 있습니다. 예를 들어, /MyObject/SomeChild에서 SomeChildMyObject의 자식이어야 하고 MyObject는 이름 앞의 ‘/’때문에 루트 레벨 이어야만 합니다.

Calling web page functions from Unity web player content

유니티 웹 플레이어 컨텐츠안에서 웹 페이지 함수를 부르기 위해서 사용자는 Application.ExternalCall()함수를 사용해야 합니다. 그 함수를 사용함으로써 사용자는 웹 페이지에 정의된 어떤 자바 스크립트 함수도 부를수 있고, 어떤 개수의 파라미터도 넘길 수 있습니다. 여기웹 페이제 안의 스트링 데이터를 인자로 넘겨주는 SayHello()라고 불리는 함수를 부르기 위해 Application.ExternalCall() 함수를 사용하는 유니티 스크립트의 예가 있습니다:

Application.ExternalCall( "SayHello", "The game says hello!" );

웹 페이지는 SayHello() 함수를 정의할 필요가 있습니다. 예를 들어:

<script type="text/javascript" language="javascript">
<!--
function SayHello( arg )
{
    // show the message
    alert( arg );
}
-->
</script>

Executing arbitrary browser code from Unity web player content

사용자는 삽입하는 웹페이지에 함수를 정의할 필요도 없습니다. 대신 사용자는웹 플레이어 컨텐츠로 부터 임의의 브라우저 코드를 실행하기 위해 Application.ExternalEval() 함수를 사용할 수 있습니다.

다음의 예제는 웹 플레이어 컨텐츠에 삽입된 페이지가 특정 호스트(unity3d.com)에서 가져왔는지 확인하는 예제 입니다. 가져오지 않았다면 다른 URL로 리다이렉트 할 것입니다. 이 테크닉은 사용자의 웹 플레이어 컨텐츠의 딥 링킹을 방지하는데 사용될 수 있습니다:

Application.ExternalEval(
    "if(document.location.host != 'unity3d.com') { document.location='http://unity3d.com'; }"
);

연결문서