Unity フォーラムや Q&A サイトのいくつかの回答を見ると、ボタンに関連付けられている画像を削除すると機能しないため、非表示のボタンを作成する方法の回答が機能しません。
ボタンを実際に機能させながら、これを回避して非表示のプロパティを保持するにはどうすればよいでしょうか?
Unity フォーラムや Q&A サイトのいくつかの回答を見ると、ボタンに関連付けられている画像を削除すると機能しないため、非表示のボタンを作成する方法の回答が機能しません。
ボタンを実際に機能させながら、これを回避して非表示のプロパティを保持するにはどうすればよいでしょうか?
短縮版:
すべての Unity プロジェクトでTouchable.csが必要です。
// file Touchable.cs
// Correctly backfills the missing Touchable concept in Unity.UI's OO chain.
using UnityEngine;
using UnityEngine.UI;
#if UNITY_EDITOR
using UnityEditor;
[CustomEditor(typeof(Touchable))]
public class Touchable_Editor : Editor
{ public override void OnInspectorGUI(){} }
#endif
public class Touchable:Text
{ protected override void Awake() { base.Awake();} }
Unityの通常の「Create Button」エディター機能を使用する
ご存知のように、エディター機能により、2 つのコンポーネントが自動的に追加されます。1つはaText
で、もう1つはImage
...
両方削除するだけ
上記のスクリプトをボタンにドロップしますTouchable.cs
これで完了です。それだけです。
Unity のアップグレードで「減衰」することはありません。
上にドロップすることで、実際に何でも「ボタン化」できます。.UI
Touchable
ボタンを作成するために「透明な画像を追加」する必要はもうありません。
Unity は、OO チェーンで「タッチ可能」の概念を抽象化するのを忘れていました。
そのため、私たち開発者は、Unity のクラス「から」独自の Touchable クラスを作成する必要があります。
これは OO の古典的な「埋め戻し」の問題です。
「バックフィル」するときの唯一の問題は、完全に自動維持する必要があるということです。Touchable.cs という優れたソリューションは 1 つしかなく、誰もが使用しています。
したがって、現実世界のすべての Unity プロジェクトでは、ボタンは次のようになります。
ONEあなたは Unity を持っていますButton.cs
2つ追加する必要がありますTouchable.cs
いくつかのチームは、Button.cs + Touchable.cs で、ゲームオブジェクトを単純に作成するエディター機能「Create Better Button」を作成しています。
非常に複雑な UIパネルがあるとします。そのため、サイズが変更されたり、アニメーションが表示されたりします。
実際、「Button + Touchable」をそのようなものにドロップするだけで機能します。
親を埋めるために展開するように Button+Touchable を設定するだけです。それだけです。
この例の画像では、「再開」と「終了」は何でもかまいません。(アニメーション、多くのパーツを含む複雑なパネル、テキスト、スプライト、目に見えないもの、スタックなど、何でも。)
いずれの場合も、下にButton+Touchable をドロップするだけで、完璧なボタンができあがります。
実際、このアプローチは非常に単純なので、おそらく単純なケースでも使用するでしょう。
あなたのボタンが些細な画像だとしましょう。画像を用意して、その上に Button+Touchable をドロップする方がはるかに簡単です。(エディターで紛らわしく問題のある「ボタン」機能を使用するのではなく。)
1) Unity のButton.cs
クラスは素晴らしいです。
2)しかし、エディタ機能「ボタンを作る」はゴミです...
3) 「逆さま」ボタンを作成し、
4) つまり、テキスト/画像をButton.csの下に置きます。
5) 「ボタンらしさ」は何にでも追加できるものです。これはまさに、Button+Touchable での動作です。
6) だから - ごく簡単に -
それが、Unity のすべてのボタンのやり方です。
歴史的功績: Unity フォーラムのユーザー「signalZak」が、何年も前にこれを最初に考え出したと思います。
私の最初の解決策は、enable
以下disable
のようなコンポーネントでした。
void showButton(Button buttonToShow, bool show)
{
Image bImage = buttonToShow.GetComponent<Image>();
Text bText = buttonToShow.GetComponentInChildren<Text>(); //Text is a child of the Button
if (bImage != null)
{
bImage.enabled = show;
}
if (bText != null)
{
bText.enabled = show;
}
}
しかし、それはうまくいきませんでした。ボタンのimage
とtext
コンポーネントが両方とも disabled
の場合、ボタン クリック イベントは発生しません。そのうちの 1 つは、クリック イベントを送信できるようにする必要があります。enabled
image
解決策は、コンポーネントとコンポーネントの両方のアルファtext
を 0 に設定して非表示にし、1 に設定して再び表示することです。それらは非表示になりますが、無効にはならず、クリックevents
は機能します。
public Button button;
void Start()
{
//Show Button
showButton(button, true);
//Hide Button
//showButton(button, false);
}
void showButton(Button buttonToShow, bool show)
{
Image bImage = buttonToShow.GetComponent<Image>();
Text bText = buttonToShow.GetComponentInChildren<Text>(); //Text is a child of the Button
if (bImage != null)
{
Color tempColor = bImage.color;
if (show)
{
tempColor.a = 1f; //Show
bImage.color = tempColor;
}
else
{
tempColor.a = 0f; //Hide
bImage.color = tempColor;
}
}
if (bText != null)
{
Color tempColor = bText.color;
if (show)
{
tempColor.a = 1f; //Show
bText.color = tempColor;
}
else
{
tempColor.a = 0f; //Hide
bText.color = tempColor;
}
}
}