
将isOn改成false,勾勾不会消失,但是改成true的话,勾勾会显示。
如果是想将全部Toggle初始化,也就是消除全部勾勾。
有一个笨方法,就是再添加一个Toggle,将贴图改成透明或者藏起来看不到就好了
然后将新的Toggle的isOn改成true,和他同一个Plane下的Toggle的勾勾都会消失。
如果是想指定一个Toggle打勾,那就无能为力了
EditorGUILayout 编辑器界面布局
Auto-layouted version of EditorGUI
EditorGUI 的自动布局版本。
Note: This is an editor class To use it you have to place your script in Assets/Editor inside your project folder Editor classes are in the UnityEditor namespace so for C# scripts you need to add "using UnityEditor;" at the beginning of the script
注意:这是一个编辑器类,如果想使用它你需要把它放到工程目录下的Assets/Editor文件夹下。编辑器类在UnityEditor命名空间下。所以当使用C#脚本时,你需要在脚本前面加上 "using UnityEditor"引用。
Class Functions类函数
LabelField
Make a label field (Useful for showing read-only info)
制作一个标签字段。(通常用于显示只读信息)
Toggle
Make a toggle // 制作开关按钮。
TextField
Make a text field // 制作一个文本字段。
TextArea
Make a text area // 制作一个文本区域。
SelectableLabel
Make a selectable label field (Useful for showing read-only info that can be copy-pasted)
制作一个可选择标签字段。(通常用于显示只读信息,可以被复制粘贴)
PasswordField
Make a text field where the user can enter a password
创建一个文本字段,在那里用户可以输入密码。
FloatField
Make a text field for entering float values
制作文本字段用于输入浮点值。
IntField
Make a text field for entering integers
制作一个文本字段用于输入整数。
Slider
Make a slider the user can drag to change a value between a min and a max
制作一个滑动条用户可以拖动来改变值,在最小和最大值之间。
IntSlider
Make a slider the user can drag to change an integer value between a min and a max
制作一个滑动条用户可以拖动来改变一个整数值,在最小和最大值之间。
MinMaxSlider
Make a special slider the user can use to specify a range between a min and a max
制作一个特殊滑动条,用户可以使用指定的范围,在最小和最大值之间。
Popup
Make a generic popup selection field
制作一个标准d出选择字段。
EnumPopup
Make an enum popup selection field
制作一个枚举d出选择字段。
IntPopup
Make an integer popup selection field
制作一个整数d出选择字段。
TagField
Make a tag selection field
制作一个标签选择字段。
LayerField
Make a layer selection field
制作一个层选择字段。
ObjectField
Make an object field You can assign objects either by drag'n drop objects or by selecting an object
制作一个物体字段。可以指定物体无论是通过拖拽物体或通过物体拾取器选择物体。
ObjectField
Make an object drop slot field
制作一个物体的拖拽槽字段。
Vector2Field
Make an X & Y field for entering a Vector2
制作X & Y字段用于输入Vector2。
Vector3Field
Make an X, Y & Z field for entering a Vector3
制作X , Y & Z字段用于输入Vector3。
Vector4Field
Make an X, Y, Z & W field for entering a Vector4
制作X, Y, Z & W字段用于输入Vector4。
RectField
Make an X, Y, W & H field for entering a Rect
制作 X, Y, W & H字段用于输入矩形。
BoundsField
Make Center & Extents field for entering a Bounds
制作Center & Extents字段,用于输入一个 Bounds 。
ColorField
Make a field for selecting a Color
制作一个用于选择颜色的字段。
CurveField
Make a field for editing an AnimationCurve
制作一个用于编辑动画曲线的字段。
InspectorTitlebar
Make an inspector-window-like titlebar
制作一个检视面板的标题栏。
Foldout
Make a label with a foldout arrow to the left of it
制作一个左侧带有箭头的折叠标签。
PrefixLabel
Make a label in front of some control
制作一个在某些控件前面的标签。
Space
Make a small space between the previous control and the following
在上一个控件和跟随的控件之间,制作一个小的空距。
BeginToggleGroup
Begin a vertical group with a toggle to enable or disable all the controls within at once
开始带有开关按钮的一个垂直组,在这里立即启用或禁用控件。
EndToggleGroup
Close a group started with BeginToggleGroup
关闭BeginToggleGroup开始的组。
BeginHorizontal
Begin a horizontal group and get its rect back
开始一个水平组并获取返回矩形。
EndHorizontal
Close a group started with BeginHorizontal
关闭一个BeginHorizontal开始的组。
BeginVertical
Begin a vertical group and get its rect back
开始一个垂直组并获取它的返回矩形。
EndVertical
Close a group started with BeginVertical
结束一个由BeginVertical开始的组。
BeginScrollView
Begin an automatically layouted scrollview
开始一个自动布局滚动视图。
EndScrollView
Ends a scrollview started with a call to BeginScrollView
结束一个由BeginScrollView开始的滚动视图。
PropertyField
Make a field for SerializedProperty
制作一个用于SerializedProperty的属性字段。
Canvas Group可以用来控制一组不需要个别控制的UI元素的某些方面,CanvasGroup的属性会影响他所有children的GameObject
其中有四个选项:
-Alpha:这个选项很多组件都有,用处也是一样的,在美术中,这个叫做Alpha通道的东东是用来控制透明度的,他的值从0到10是完全透明,1是完全不透明;
-Interactable确认该组件是否接受输入,当他被设置为false时,交互功能将被禁用;
-Block Raycasts是否让该组件像collider一样接受射线检测?你需要在依赖于Canvas的图形射线检测者上唤醒射线检测方法。这个不会作用于PhysicsRaycast;
-Ignore Parent Groups(忽略父级团)是否响应父级group的方法
Canvas Group的经典使用:
-在窗口的GameObject上添加一个CanvasGroup,通过控制它的Alpha值来淡入或淡出整个窗口;
-通过给父级GameObject添加一个CanvasGroup并设置它的Interactable值为false来制作一整套没有交互(灰色)的控制;
-通过将元素或元素的一个父级添加CanvasGroup并设置BlockRaycasts值为false来制作一个或多个不阻止鼠标事件的UI元素
应用:(重要的地方写大字)
结合后面两点或者1,3点,都可以实现很牛叉的功能
比如说游戏里某些情况某个按钮(或者其他UI)是不能点的,而另外一些情况可以点,这样就可以通过动态改变这个组件的BlocksRaycasts值以及Interactable来实现
再比如说游戏里点击某个按钮要让这个按钮不可点并逐渐消失掉,当然啦,也可以让别的东西消失啦,这就可以通过改变alpha值来实现
恩,CanvasGroup这个组件已经被我玩坏啦~。~
至此,canvas的四个组件(Canvas、Canvas Render、Canvas Scaler、Canvas Group)都学完了,勃主的装逼之路越走越远了哈!
抽空再补上例子。。。
Unity的UI自动确认通常使用的是Unity自带的EventSystem和Input Module 来实现。下面是一个实现自动确认的简单步骤:
1 选择Canvas,添加一个EventSystem组件,确保它是该场景的唯一事件系统。
2 为UI中需要自动确认的对象添加Selectable组件。Selectable组件能够与EventSystem进行交互,并响应事件。通常,Button、Toggle等组件都是继承自Selectable组件的。
3 为Selectables对象添加一个appropriate Input Module,例如,对于PC上的游戏可以使用StandaloneInputModule,对于Mobile上的游戏可以使用TouchInputModule。
4 选择适当的Selectables对象,并将其IsOn首次设置为true,这将自动导致其端口获取聚焦。可以通过代码或在UEditor中手动完成该 *** 作。
这样,当UI对象获得焦点时,结合EventSystem和Input Module就能够实现自动确认了。例如,在PC的情况下,玩家可以使用空格或回车键来确认UI的选择,在移动设备中,玩家可以使用手指单击或轻拍来确认选择。
平台卡顿、网络问题。1、Unity平台卡顿导致unitytoggle切换无效,需要先退出该平台,再次重新进入后即可切换有效。
2、网络问题需要先关闭网络,再次重新启动网络后连接即可。
效果图,素材是网上随便拉的
这是运行后的Hierarchy的界面,其中最下面的Item是放在摄像机不能拍到的位置,当做预设体,每个Item都有Toggle组件,在Grid上有Toggle Group 组件,并且将Itme上的Toggle组件中Group设置为Grid,这实现了点了一个之后,其他不会高亮。Grid上有组件 Grid Layout Group,该组件实现了当创建Item,并且将父物体设置为Grid后能够自动排版
这里我们需要写三个类,一个是自己捏造的数据类,放在Item上获取各种UI的类,还有能够创建Item并且能够对Item进行管理的类
public class ItemData//这个类存放的是数据
{
public int _starNum;//星星的数量(本来是想找星星的,现在就随便将就一下)
public string _icon;//这是名字
public string _itemName;//关卡的名字
public string _itemNum;//第几关
}
item上的类,用来获取item上的UI控件
public class Item : MonoBehaviour
{
public Image _star1;
public Image _star2;
public Image _star3;
public Image _icon;
public Text _levelNum;
public Text _levelName;
void initializeItem()
{
_star1 = transformFind("StarGroup/star1")GetComponent<Image>();
_star2 = transformFind("StarGroup/star2")GetComponent<Image>();
_star3 = transformFind("StarGroup/star3")GetComponent<Image>();
_icon = transformFind("Icon")GetComponent<Image>();
_levelName = transformFind("Levelname/name")GetComponent<Text>();
_levelNum = transformFind("Levelname/Lv")GetComponent<Text>();
}
void Awake()
{
initializeItem();
}
}
这是个管理Item创建的类
public class MainMgr : MonoBehaviour
{
GameObject item;
Transform Parent; //这里需要得到Gird的Transform
List<ItemData> dataGroup = new List<ItemData>();
void Awake()
{
CreateData();
item = transformFind("Item")gameObject; //获得一开始放在摄像机外的游戏对象,当做预设体
Parent = transformFind("Grid"); //保存Gird的Transform
}
void CreateData() //创建自己捏造的数据
{
dataGroupClear();//确保这个List没有其他数据
ItemData itemdata = new ItemData();
itemdata_icon = "1 (5)";
itemdata_itemName = "小树林";
itemdata_itemNum = "第一关";
itemdata_starNum = 3;
dataGroupAdd(itemdata);
ItemData itemdata1 = new ItemData();
itemdata1_icon = "1 (7)";
itemdata1_itemName = "沼泽";
itemdata1_itemNum = "第二关";
itemdata1_starNum = 1;
dataGroupAdd(itemdata1);
ItemData itemdata2 = new ItemData();
itemdata2_icon = "1 (15)";
itemdata2_itemName = "山海关";
itemdata2_itemNum = "第三关";
itemdata2_starNum = 1;
dataGroupAdd(itemdata2);
ItemData itemdata3 = new ItemData();
itemdata3_icon = "1 (12)";
itemdata3_itemName = "墓地";
itemdata3_itemNum = "第四关";
itemdata3_starNum = 2;
dataGroupAdd(itemdata3);
ItemData itemdata4 = new ItemData();
itemdata4_icon = "1 (32)";
itemdata4_itemName = "神殿";
itemdata4_itemNum = "第五关";
itemdata4_starNum = 3;
dataGroupAdd(itemdata4);
ItemData itemdata5 = new ItemData();
itemdata5_icon = "1 (25)";
itemdata5_itemName = "天庭";
itemdata5_itemNum = "第六关";
itemdata5_starNum = 2;
dataGroupAdd(itemdata5);
ItemData itemdata6 = new ItemData();
itemdata6_icon = "1 (30)";
itemdata6_itemName = "心魔";
itemdata6_itemNum = "第七关";
itemdata6_starNum = 3;
dataGroupAdd(itemdata6);
}
GameObject tempItem; //创建临时的游戏对象
void CreateTempItem() //创建Item
{
if (dataGroup != null) //当这个List不为空时
{
for (int i = 0; i < dataGroupCount; i++) //循环创建Item
{
tempItem = Instantiate(item) as GameObject; //创建Item并且获取到这个游戏对象
tempItemtransformlocalPosition = Vector3zero; //将其位置,缩放大小,旋转角度初始化
tempItemtransformlocalRotation = new Quaternion();
tempItemtransformlocalScale = Vector3one;
tempItemtransformSetParent(Parent); //设置其父物体为Grid
Item itemSprite = tempItemAddComponent(); //为每一个创建的Item添加脚本
itemSprite_levelNametext = dataGroup[i]_itemName;//获取每一个关卡的名字获取,一下类似
itemSprite_levelNumtext = dataGroup[i]_itemNum;
string path = stringFormat("Icon/{0}", dataGroup[i]_icon);//字符串拼接
itemSprite_iconsprite = ResourcesLoad(path, typeof(Sprite)) as Sprite;
ShowStar(dataGroup[i]_starNum, itemSprite);//调用这个方法获得星星的显示
}
}
}
void ShowStar(int num,Item tempitem)//这个方法是用来显示星星
{
if (num == 1)
{
tempitem_star1gameObjectSetActive(true);
tempitem_star2gameObjectSetActive(false);
tempitem_star3gameObjectSetActive(false);
}
if (num == 2)
{
tempitem_star1gameObjectSetActive(true);
tempitem_star2gameObjectSetActive(true);
tempitem_star3gameObjectSetActive(false);
}
if (num == 3)
{
tempitem_star1gameObjectSetActive(true);
tempitem_star2gameObjectSetActive(true);
tempitem_star3gameObjectSetActive(true);
}
}
void Start () {
CreateTempItem();
}
}
以上就是简单的游戏关卡的选择界面的实现,如果有错误,或者更好的方法,望指正,万分感谢!
unity引擎的toggle组件可以用来微调房间中的灯光亮度步骤如下:
1、在场景中选择添加光线。
2、选择添加阳光,调整位置和角度就可以了。Unity,又称Unity3D,是一款由UnityTechnologies研发的跨平台2D/3D游戏引擎。
以上就是关于unity设置IsOn属性不能改变Toggle组件的状态,改如何解决全部的内容,包括:unity设置IsOn属性不能改变Toggle组件的状态,改如何解决、EditorGUILayout 编辑器界面布局、[Unity] CanvasGroup等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)