2016-06-15 11 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; 
    } 
} 

と、このように私のJavaScriptの方法:

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

しかし、ときに私は何も起こりませんそれを呼び出します。私は間違って何をしていますか?

+0

これはどのブラウザでテストしていますか?ローカルでテストする場合は、セキュリティサンドボックス違反の可能性があります。 Firefoxは時々このスライドを許可しますが、必ずしもそうとは限りません。この違反は通常、黙って失敗します。 – Zze

+0

ブラウザで 'SaySomethingToUnity()'を呼び出すと、コンソール(F12)を使用してメッセージがあるかどうか教えてください。 – Alisson

+0

私はfirefxを使用しています。今はchromeでbeacuseしています。私が理解する限り、サーバーなしでテストすることはできません。初めに私はこのエラーが発生しました:原因 にReferenceErrorにエラーハンドラを呼び出す:のSendMessageは を定義した。しかし、その、今行っていません。 私はsomehwereを読んだのは、公開設定で「例外を有効にする」をnoneに設定した場合にのみ機能するということです。 – MaryLu

答えて

3

は、将来的にこの問題を持っています人々のための答えとしてコメント答えを投稿することを決めました。

ページには、Unityから任意の関数を呼び出す前に読み込みを完了しなければならないか、そうでなければ動作しません。 Unityがまだロードされていない場合、メッセージを送信するObjectsではなく、が存在します。このためにエラーがスローされるか、またはExceptionが無効になっていると警告メッセージが表示されます。 UnityからUnity関数を呼び出す前にしばらく待たなければなりません。

+1

それは私のケースでは何のエラーもスローしませんでしたが、それは問題でした:) – MaryLu

+0

@MaryLuあなたが持っているUnityのバージョンに依存していると思います。ハッピーコーディング! – Programmer

1

私は、あなた自身のゲーム内では、このオプションを置くことをお勧めしますが、あなたは本当に(どこかでホストされているいくつかのウェブサイトのような)外部スクリプト/アプリが団結に話を作るために必要がある場合、それはAPIを介して行われるべきです。

好きなバックエンド(PHP、ASP.NET WebAPI、Node.JS)でAPIを作成し、ReceiveMessageFromExternalSource()メソッドを公開して、投稿リクエスト(適切なセキュリティを使用)を使用してJavaScriptから呼び出すことができます。データベース、その他の永続エンジン)、Unit3Dアプリケーションを使用してWWWForm()を使用してこの同じAPIを呼び出し、上記の値を取得します。常にUnityからサーバーを呼び出して、更新された値を探し、「リアルタイム」で動作させることを避けるために、WebSocketのようなものを研究して、サーバーからSignal to Unityを送信したり、ユニティと

+1

あなたの提案はとても良いですが、とにかくブラウザからunity3d wbegl appに話すことはまだ可能です。また、OPsのコードサンプルは、SaySomethingToUnityを呼び出していないか、SendMessage実装でunity3dのjsコードで生成されたものを使用していない限り動作します。 –

+0

私はメソッドを呼び出しています。その理由はありません。 "またはSendMessage実装でunity3d jsコードによって生成されて使用されていません。 その部分について私は実際にはわからない。私は本当にそれを確認する方法を知らない。私がこれまで読んできたことは、それがその方法を持っていると言われただけです。 – MaryLu

+0

私の主な問題は、Unityにデータを要求したくないということです。最後に、アプリケーションはデータベースとは異なる動作を示すはずです。だから、htmlページ上のファイル/モーションをクリックするたびに、Unityアプリケーションにその動きを表示するように通知されるはずです。 – MaryLu

関連する問題