这是 Unity 的怪异之处之一......
100% 的现实世界项目都需要这个,但 Unity 忘记了这样做。
简洁版本:
你需要可触摸.cs在每个 Unity 项目中:
// 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的普通的“创建按钮”编辑器功能
如您所知,编辑器功能自动为您添加两个组件。一个是一个Text
一个是Image
...
只需将它们都删除即可
删除上面的脚本Touchable.cs
在按钮上
你完成了。这里的所有都是它的。
它不会随着 Unity 升级而“衰退”。
其实你可以“扣上纽扣”anything in .UI
通过下降Touchable
在它的上面。
再也不用“添加透明图像”来制作按钮了。
Unity忘记在OO链中抽象出一个“可触摸”的概念。
因此,我们开发人员必须“从”Unity 的类中创建我们自己的 Touchable 类。
这是 OO 中经典的“回填”问题.
当“回填”时,唯一的问题是:它必须是完美的自动维护。只有一种好的解决方案,即 Touchable.cs,每个人都使用它。
因此,在所有现实世界的 Unity 项目中,按钮如下所示:
ONE你有Unity的Button.cs
TWO你必须添加Touchable.cs
一些团队制作了一个编辑器功能“创建更好的按钮”,它只是使用 Button.cs + Touchable.cs 制作游戏对象。
重要提示...
假设您可能有一个非常复杂的 UIpanel。所以它会调整大小,甚至有动画。
事实上,你可以直接删除“Button+Touchable”on to类似的事情,它会起作用。
只需设置 Button+Touchable 即可展开以填充父级。这里的所有都是它的。
在此示例图像中,“恢复”和“退出”可以是anything。 (动画、包含许多部分的复杂面板、文本、精灵、不可见的东西、堆栈 - 任何东西。)
在所有情况下,只需放下一个 Button+Touchable下你就有了一个完美的按钮。
事实上:这种方法非常简单,即使是简单的情况您也可能会使用它。
假设您的按钮是一个简单的图像。只需有一个图像,然后在其上放置一个 Button+Touchable 就容易得多。 (而不是使用编辑器中令人困惑且有问题的“按钮”功能。)
了解情况...
1)统一的Button.cs
课程太棒了。
2) But编辑器功能“制作按钮”是垃圾......
3)它制作了一个“颠倒”按钮,
4)即,它放置文本/图像under按钮.cs
5)“按钮性”是你应该能够做到的add to任何事情。这正是它与 Button+Touchable 的配合方式。
6)所以 - 很简单 -
1.想要什么都有。文本、图像、面板、隐形、动画——等等。
2. 拖放按钮+可触摸按钮 - 就完成了。
这就是每个人在 Unity 中操作所有按钮的方式!
历史信用:我相信Unity论坛用户“信号扎克”是很多很多年前第一个想到这个问题的人!