2016-06-15 4 views
0

Unity3D WebGl 앱에 메시지를 보내려고합니다.브라우저에서 Unity3D로 메시지 보내기

public class color : MonoBehaviour { 

    void Start() 
    { 
     gameObject.GetComponent<Renderer>().material.color = Color.red; 
    } 

    public void green(string s) 
    { 
     gameObject.GetComponent<Renderer>().material.color = Color.green; 
    } 
} 

를 내 자바 스크립트 같은 방법 :

내 게임 오브젝트의 컨트롤러는 "플레이어"같은 기본적으로 보이는 내가 그것을 호출 할 때

function SaySomethingToUnity() { 
    SendMessage("Player", "green", "teeeext"); 
} 

하지만 아무 반응이 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

어떤 브라우저에서 이것을 테스트하고 있습니까? 로컬에서 테스트하는 경우 보안 샌드 박스 위반 일 수 있습니다. Firefox는 때때로이 슬라이드를 허용하지만 항상 그런 것은 아닙니다. 이 위반은 일반적으로 조용하게 실패합니다. – Zze

+0

브라우저에서'SaySomethingToUnity()'를 호출하면 콘솔 (F12)을 사용하여 메시지가 있는지 알려줄 수 있습니까? – Alisson

+0

지금 firefx를 크롬에 사용하고 있습니다. 이해하지 못하는 한 서버없이 테스트 할 수는 없습니다. 처음에는이 오류가 발생했습니다 : 으로 인해 오류 처리기를 호출했습니다. ReferenceError : SendMessage가 정의되지 않았습니다. 하지만 이제 사라졌습니다. 왜냐하면 내가 출판 설정에서 "예외 사용"을 none으로 설정 한 경우에만 작동하는 somehwere를 읽기 때문입니다. – MaryLu

답변

3

향후이 문제가있는 사람들을 위해 답글로 답글을 게시하기로했습니다.

페이지가 유니티에서 어떤 함수를 호출하기 전에로드를 완료해야합니다. 그렇지 않으면 작동하지 않습니다. Unity가 아직로드가 완료되지 않은 경우 메시지를 보내려는 Objects이 아니며이 존재합니다. 이 때문에 오류가 발생하거나 Exception이 비활성화 된 경우 자동으로 오류가 발생합니다. Unity에서 Unity 기능을 호출하기 전에 잠시 기다려야합니다.

+1

제 경우에는 오류를 던지지 못했습니다. 문제 : – MaryLu

+0

@MaryLu 당신이 가지고있는 Unity의 버전에 달려 있다고 생각합니다. 해피 코딩! – Programmer

1

내 게임에이 옵션을 넣어 두는 것이 좋겠지 만 외부 스크립트/앱 (어딘가에서 호스팅되는 일부 웹 사이트처럼)을 화합해야한다고 API를 통해 수행해야합니다.

선호하는 백엔드 (PHP, ASP.NET WebAPI, Node.JS)로 API를 만들고 ReceiveMessageFromExternalSource() 메서드를 노출하면 적절한 보안을 사용하여 게시물 요청을 사용하여 자바 스크립트에서 호출 할 수 있으므로 데이터베이스 또는 기타 지속 엔진), Unit3D 앱을 사용하여 WWWForm()을 사용하여이 동일한 API를 호출하여 해당 값을 가져옵니다. 항상 Unity에서 서버를 호출하여 업데이트 된 값을 찾고 "실시간"으로 작업하는 것을 피하기 위해 WebSocket과 같은 것들을 연구하여 서버가 Unity에게 신호를 보내도록하거나 작은 서버를 구현하도록 권합니다. 단결과.

+1

귀하의 제안은 매우 좋지만 어쨌든 브라우저에서 unity3d wbegl 앱으로 계속 이야기 할 수 있습니다. 그리고 OPs 코드 샘플은 SaySomethingToUnity를 호출하지 않거나 SendMessage 구현과 함께 unity3d js 코드에 의해 생성 된 것을 사용하지 않는 한 작동해야합니다. –

+0

나는 그 방법을 호출하고있다. 그래서 그 이유는 틀림 없습니다. "또는 SendMessage 구현과 함께 unity3d js 코드에 의해 생성되지 않았습니다." 그 부분에 대해서는 실제로 확신 할 수 없습니다. 나는 그걸 확인하는 법을 정말로 모른다. 지금까지 읽은 것들은 그 방법이 있어야한다고 말했어. – MaryLu

+0

내 주요 문제는 Unity가 데이터를 요청하는 것을 원하지 않는다는 것입니다. 결국 응용 프로그램은 데이터베이스에서 다른 동작을 보여야합니다. 그래서 html 페이지에서 파일/모션을 클릭 할 때마다 유니티 앱에 모션을 표시하도록 알려줍니다. – MaryLu