Rya*_*zzo 9 c# button transparent unity-game-engine unity3d-ui
看看Unity论坛和问答网站中的一些答案,如何制作隐形按钮的答案不起作用,因为删除与按钮相关的图像使其无效.
你如何绕过这个并保持隐形属性,同时允许按钮实际工作?
Fat*_*tie 17
精简版:
在每个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();} }
Run Code Online (Sandbox Code Playgroud)
使用Unity的普通"创建按钮"编辑器功能
如您所知,编辑器功能会自动为您添加两个组件.一个是一个Text,一个是Image......
只需删除它们
将以上脚本Touchable.cs 放在Button上
你完成了.这里的所有都是它的.
它无法通过Unity升级"衰减".
实际上,你可以"buttonize" 任何在.UI通过降低Touchable在它的上面.
永远不要再"添加透明图像"来制作按钮.
Unity忘记在OO链中抽象出一个"可触摸"的概念.
因此,我们的开发人员必须"从"Unity的类中创建我们自己的Touchable类.
这是OO中经典的"回填"问题.
当"回填"唯一的问题是:它必须完全自动维护.只有一个很好的解决方案,Touchable.cs,每个人都使用.
所以在所有真实的Unity项目中,按钮看起来像这样:
ONE你有Unity的Button.cs
两个你必须添加Touchable.cs
一些团队使用Button.cs + Touchable.cs创建一个编辑器功能"Create Better Button",它只是制作一个游戏对象.
假设您可能有一个非常复杂的UI 面板.所以它调整大小甚至动画.
事实上,你可以将"Button + Touchable" 放到类似的东西上,它会起作用.
只需设置Button + Touchable即可展开以填充父级.这里的所有都是它的.
在此示例图像中,"resume"和"quit"可以是任何内容.(一个动画,一个复杂的面板,包含许多部件,文本,精灵,不可见的东西,堆栈 - 任何东西.)
在所有情况下,只需在下面放一个Button + Touchable ,你就拥有一个完美无瑕的按钮.
事实上:这种方法非常简单,即使是简单的情况,你也可能会使用它.
说你的按钮是一个微不足道的形象.只需要一个图像,然后在其上放一个Button + Touchable就容易得多.(而不是在编辑器中使用令人困惑且有问题的"按钮"功能.)
1)Unity的Button.cs课程太棒了.
2)但是编辑功能"make a Button"是垃圾......
3)它是一个"颠倒"按钮,
4)即,它将文本/图像放在 Button.cs下
5)"Button-ness"是你应该能够添加到任何东西的东西.这正是它与Button + Touchable一起使用的方式.
6)所以 - 非常简单 -
这就是每个人在Unity中完成所有按钮的方式!
历史性的信誉:我相信Unity论坛用户"signalZak"是很多年前第一个想到它的人!
小智 6
作为对 Fattie 答案的可能改进,将Touchable的基类更改为Graphic和覆盖protected void UpdateGeometry()似乎可以很好地减少与Text.
public class Touchable:Graphic
{
protected override void UpdateGeometry() { }
}
Run Code Online (Sandbox Code Playgroud)