0

私は2つのGUIテクスチャを持っています。

画面の幅と高さに応じて、GUIに保持しました。

1 つはジョイスティック用、もう 1 つはシューター用です。

シューターのジョイスティックに触れると、その特定の部分に移動します。

私はrect.Containsを使用しました。

void Start () {
xx = Screen.width - Screen.width/12;
yy = Screen.height - Screen.height/8; 
lb = Screen.width/10;
rect = new Rect(-xx/2, -yy/2, lb, lb);
shooter.pixelInset  = rect;       
shooter.enabled = false;      
}

void OnGUI(){
if(characterScript.playbool){
   shooter.enabled = true;
} 
if (rect.Contains(Event.current.mousePosition)){
shootBool = true;
print("shoot");
alert.text="shoot";
}   
}

私にとっては正しく機能していません。空間座標は GUI 座標とは異なると考えてください。この問題を解決するにはどうすればよいですか。誰でも他の良い方法を提案できますか

4

2 に答える 2

1

試すことができHitTestます。

function Update()
{
    for (var touch : Touch in Input.touches)
    {
        if (rect.Contains(touch.position))
        {
            // we are now in the guitexture 'rect'
            Debug.Log("rect touched");
            exit;
        }
    }
}

質問で説明したように、上記のコードはタッチで使用されます。ただし、あなたがタグ付けmouseしたので、マウスを使用しているのか、タッチを使用しているのかはわかりません。

したがって、マウスを使用してオブジェクトをクリックする場合は、次を使用できます。

if (rect.Contains(Input.mousePosition) && Input.GetMouseButtonDown(0))
{
    Debug.Log("rect clicked");
    exit;
}
于 2013-03-18T08:22:55.650 に答える
0

コードをデバッグすると、いくつかの問題が発生します。

画面の解像度が 800x600px だとします。

xx = 800 - 800 / 12
   = 733.3333333333333
yy = 600 - 600 / 8
   = 525
lb = 800 / 10
   = 80
rect = (-366.665, -262.5, 80, 80)

lb画面の幅を 10 で割った値で決まるのはなぜですか?

問題の核心は、画面の中央に基づいているEvent.mousePositionのに、画面の左上から始まることです。GUITexture.pixelInset

を調整しEvent.mousePositionて画面の中央を原点として使用するか、rect変数を調整して画面の左上から開始する必要があります。

于 2013-03-18T08:25:29.397 に答える