2016-12-01 9 views
0

私のプロジェクトにはボタンがありますが、このボタンは特定のサイズで、子供がいます。私の問題は、ボタンのヒットボックスが大きすぎて、表示されている画像の外側からクリックすることができるということです。ボタンのヒットボックスを縮小する方法

このため、ボタン付きのすべてのアニメーションやイベントを保存したいと思いますが、ヒットボックスを縮小したいと思います。画像の透明でない部分にあるときにOnClickイベントを呼び出すことを許可するか、または長方形のヒットを縮小することによって縮小するかこれは可能ですか?私はオンラインで検索しましたが、それを縮小するとは言わず、それを拡大するだけでした。

  • にMyButton::画像、ボタン、アニメーター

    • タイトル:テキスト

    • 乗数:テキスト

    • グローここ

      は私のボタンのように見えるものです:画像・動画

私はボタンを押すと、私はMyButtonというのイメージを変更し、それのアニメーションで、光ったように見えますが、グローの画像を可能にします。

ボタンのヒットボックスを縮小する方法はありますか?

ありがとうございます。

答えて

0

このスクリプトをボタンに追加して、何らかの種類の2Dコライダーを追加すると、これを行うことができます。私は不規則な形のいくつかのボタンのためにこれを使用します。あなたのボタンに合う任意のコライダーを使用することができます。透明な部分を無視する方法もありますが、私はこの部分を好むことに注意してください。

using UnityEngine; 
using UnityEngine.UI; 

[RequireComponent(typeof(RectTransform), typeof(Collider2D))] 
public class Collider2DRaycastFilter : MonoBehaviour, ICanvasRaycastFilter 
{ 
    Collider2D myCollider; 
    RectTransform rectTransform; 

    void Awake() 
    { 
     myCollider = GetComponent<Collider2D>(); 
     rectTransform = GetComponent<RectTransform>(); 
    } 

    #region ICanvasRaycastFilter implementation 
    public bool IsRaycastLocationValid(Vector2 screenPos, Camera eventCamera) 
    { 
     var worldPoint = Vector3.zero; 
     var isInside = RectTransformUtility.ScreenPointToWorldPointInRectangle(
      rectTransform, 
      screenPos, 
      eventCamera, 
      out worldPoint 
     ); 
     if (isInside) 
      isInside = myCollider.OverlapPoint(worldPoint); 
     return isInside; 
    } 
    #endregion 
} 
+0

透明部分を無視する方法をご存知でしょうか?私はオンラインで何かを見つけられなかった。正直なところ、このソリューションを使用する方が安く、より良いです。 – Alox

+0

アルファ部分を無視するには、マスキングテクスチャなどを作成する必要があります。これにより、ボタンに奇妙な形状があっても、ポリゴンコライダーを設定するだけで、性能低下のない状態で正常に動作します。しかし興味があれば、ここで解決策を見つけることができます:[リンク](https://forum.unity3d.com/threads/none-rectangle-shaped-button.263684/#post-1744521) –

+0

hmmm、そして方法はありません。 (私はボタンヒットボックスを制御していると仮定しています)ボタンが使用するCollider2Dのサイズですか? – Alox

関連する問題