1

ゲームでプレースホルダーとして使用するさまざまな空のオブジェクトに同じスクリプトを関連付けたいと思います。目的は、ユーザーがこれらのオブジェクトの近くの画面内のポイントに触れると、専用の GUI が表示されるように、それらの位置を利用することです。問題は、2 つのオブジェクトが異なっていても、スクリプトが互いに影響しているように見えるため、ゲームの実行中にこれら 2 つのオブジェクトのいずれかに触れると、両方の GUI が表示されることです。私は何を間違っていますか?

....
private var check: boolean;
var topCamera : Camera;
var customSkin : GUISkin;

function Update () {
   if (Input.GetMouseButtonDown(0)){
      if(Input.mousePosition.x > this.transform.position.x - Screen.width*0.20 && Input.mousePosition.x < this.transform.position.x + Screen.width*20){
        if(Input.mousePosition.y > this.transform.position.y - Screen.height*0.2 && Input.mousePosition.y < this.transform.position.y + Screen.height*0.2){
                check = true;
        }
    }
}

if(check){
   //the camera zooms forward   
}else{
   //the camera zooms backward  
}
}

function OnGUI () {
if (this.check){
var w = Screen.width;
var h = Screen.height;
var bw = 0.083;
var bws = 0.001 *w;
GUI.skin = customSkin;
GUI.Box(new Rect(w*0.6,h*0.3,w*0.38,h*0.45), "Stuff");
customSkin.box.fontSize = 0.04*h;
customSkin.textField.fontSize = 0.08*h;
customSkin.button.fontSize = 0.04*h;
textFieldString = GUI.TextField (Rect (w*0.62, h*0.39, w*0.34, h*0.1), textFieldString);    
if (GUI.Button (Rect (w*0.62,h*0.50, w*bw, h*0.1), "+")) {
    if (this.check){
        this.check=false;

    }else{
        this.check = true;
    }
//...   
}
 //...
    }
4

2 に答える 2

2

関数でリンゴとオレンジを比較しているため、これはおそらくUpdate()機能していません。Input.mousePosition2Dピクセル座標で位置をtransform.position返し、3Dワールド座標でゲームオブジェクトの位置を返します。

オブジェクトをクリックしたかどうかを確認するには、問題のゲーム オブジェクトに Collider をアタッチし、スクリプトでRaycastを使用して衝突をテストする必要があります。JavaScript のドキュメントからの関連例を次に示します。

var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray, 100)) {
    print ("Hit something");
}

このアプローチの優れた点は、コライダーとレイの間の衝突をチェックしていることです。ゲームオブジェクトの近くをクリックしたかどうかだけを確認したい場合は、コライダーをゲームオブジェクトよりも大きくします。不平等をいじる必要はありません!

于 2012-05-14T06:36:35.063 に答える
0

オブジェクトだけでなく、オブジェクトの近くのどこかをクリックすることが目的の場合、GUI が表示されるように両方のオブジェクトに十分近いスペースがあるいくつかの構成 (スペース内のこれらのオブジェクトの位置) があります。どちらが近いかを判断するスクリプトが必要です。

それらのクリックを追跡し、すべてのオブジェクトの距離を測定して最も近いものにするシングルトンであるモノビヘイビアーを実装することをお勧めします。

あなたの投稿をもう一度読んで、オブジェクトをクリックたときだけ GUI を取得したいと思います。これを行うと、両方の GUI が取得されます。check行く面積の計算が間違っているからだと思いますtrue

詳細を教えていただけますか?クリックしたときに GUI メッセージが表示されない領域がありますか、それともすべてがそれらのオブジェクトで埋められていますか?

于 2012-05-14T03:27:57.473 に答える