2017-05-08 1 views
0

私はUnity3dの初心者です。私は単純なunity3dゲームの構造の理解を開発しようとしています。私は画面上に複数のオブジェクトを持っている基本的なゲームを持っています&私はユーザーがそれらをタップした回数を数えなければなりません。私は敵の総数が殺されるように。 私の質問は、ゲームのループ&を実装するベストプラクティスは合計得点のようなものをカウントするものです。すべてのスクリプトで更新可能なグローバル変数を持つことができますか、スクリプトやゲームオブジェクトの間でデータを渡す必要があります。Unity 3Dゲームループロジックとスクリプト間でデータにアクセスする

よろしく、 ハッサンImtiaz

答えて

2

これへのストレートな答えはありませんが、それは建築で多くの角度に依存します。私はイベントの集約パターンが好きです。私たちはゲームでそれを使用します。

メッセージが公開されたときにIHandleを実装することによって、イベントにサブクエリすることができます。インスタンスでHandleメソッドが起動します。

敵が死亡するたびにEnemyKilledイベントを公開します。あなたのスコアボードでこのイベントを聞くことができます

0

ええ、私はGameMaker4が素晴らしい方法を持っていました。あなたがアクセスできる任意のスクリプトの先頭に 'global.MyVariable1'それは他のスクリプトから 'global.MyVariable1'を入れるだけです。

Unityでこの機能を利用するには、簡単な方法で 'MainController'オブジェクトを作成し、ゲームの非常に最初のシーンに入れてください。そのオブジェクトにはDES NOT DESTROYスクリプトを入れてください。変数、ゲームシーンの変更、保存/読み込みなどがあります。破壊されていないので、何らかのシーンで変数を保持します。

これにアクセスするには、GameObject.GetComponent関数を使用します。だから、ゲームオブジェクトにあるスクリプトの間でデータを渡す必要があります。他の人は、大きな、マルチクラスの、複雑なゲーム状態システムのような不具合を使用しますが、デバッグ/アップデートするのは難しいです。 ゲームの構造:

  • は、ゲームの状態を追跡し、INT変数MODEを持っている(例えば、MODE = 0; //イントロやメインメニュー、MODE = 1; // PlayerSelectMenu、 MODE = 2; // GameTypeA_Level1、MODE = 3; // GameTypeB_Level1など

  • は一時停止/一時停止していないためBOOLを持っているあなたはをクリックカウントオブジェクトの場合

を。 OnMouseEnter()OnMouseOver()OnMouseExit()
//put this on object to click on 
using UnityEngine; 
using System.Collections; 

public class MouseClick : MonoBehaviour 
{ 
public MainController mcont;//reference to the MainController Object 
void Start() 
{ 
    mcont = GetComponent<MainController>(); 
} 
//now to access any MainController var's use 'mcont.VARIABLE' 
void OnMouseDown() 
{ 
    mcont.ObjClicked += 1; 
} 
} 

は、他の組み込みのユニティマウス機能があります。

他の男が「まっすぐ答えていない」と言っていたことは分かりません。私はコンパイラを使用することに慣れていますが、ドラッグ&ドロップUnityセットアップが本当に好きです。スクリプトからプレハブをインスタンス化するのも良い点です。

関連する問題