Unity Web Player
컨텐츠를 포함하는 HTLM페이지는 그 컨텐츠와 통신할 수 있고 그 반대의 경우도 그렇습니다. 기본적으로 두가지 통신 방향이 존재합니다:
각각의 이런 통신의 방향은 다음에서 좀더 자세히 설명합니다.
유니티 웹 플레이어 객체는 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에서 SomeChild는 MyObject의 자식이어야 하고 MyObject는 이름 앞의 ‘/’때문에 루트 레벨 이어야만 합니다.
유니티 웹 플레이어 컨텐츠안에서 웹 페이지 함수를 부르기 위해서 사용자는 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>
사용자는 삽입하는 웹페이지에 함수를 정의할 필요도 없습니다. 대신 사용자는웹 플레이어 컨텐츠로 부터 임의의 브라우저 코드를 실행하기 위해 Application.ExternalEval() 함수를 사용할 수 있습니다.
다음의 예제는 웹 플레이어 컨텐츠에 삽입된 페이지가 특정 호스트(unity3d.com)에서 가져왔는지 확인하는 예제 입니다. 가져오지 않았다면 다른 URL로 리다이렉트 할 것입니다. 이 테크닉은 사용자의 웹 플레이어 컨텐츠의 딥 링킹을 방지하는데 사용될 수 있습니다:
Application.ExternalEval( "if(document.location.host != 'unity3d.com') { document.location='http://unity3d.com'; }" );