!!!! Unity中UI的绘制顺序和它们出现在Hierarchy的顺序是一样的。
这也意味着你要调整GUI控件的顺序只要调整它在Hierarchy的顺序就可以了。
继续探究toggleGroup里面的toggle四个toggle在一个组里面
1.如果开始全为未选中状态,只要选中一个,则最后依然会只有一个被选中,无法取消
2.如果开始(初始状态)多于一个被选中,则,最后一个被点击的为最后一个唯一被选中的,其它的都会被取消同一组,只有一个被选中,点击这个被选中的toggle 因为这是唯一且只能唯一的,(参考1)
连续点这个toggle 依然会连续触发 toggle.onValueChanged.AddListener()事件,输出结果却一直为true (即被选中状态) 那么,既然一直为被选中状态为何会不断触发该事件, 就说明 状态其实在改变,过程为,选中→未选中,但是违背了参考1,所以又从未选中→选中 ,但是print(bool t) 却在这个过程中 只输出一个true,说明只显示的是终态关于Audio Source组件如果,
UI (或其它对象)上附带该组件,那么 该UI可以看做一个Audio Source 对象又,当一个toggle上面带有audio source 那么 一个脚本上声明有 Toggle 对象 和 Audio Source 对象时,都可以把toggle分别拖上去代码动态改变image的大小
无限场景
public RectTransform Rt;Tr.sizeDelta = new Vector2(Screen.width , Screen.height);直接用RectTransform. 不会出现sizeDelta属性必须实例化一个对象才能 调用该方法 ,并且需要把要改变的大小的对象, 拖放到脚本 Rt 对象上获取对象的宽和高Rt.rect.widthRt.rect.height
重大问题:
void move() {
float h = Screen.height;
float w = Screen.width;
if (this.transform.position.y <= -h/2) {
print(transform.position);
transform.position = new Vector3(w / 2, h / 2 + h, 0);
print(transform.position);
GameObject.Find("b").GetComponent().enabled = false;
GameObject.Find("a").GetComponent().enabled = false; }
else
this.transform.Translate(new Vector3(0, -10f, 0)); }
执行这个时, 会间断循环出现缝隙问题原因:当图片a执行if时就会停止移动,而图片b此时执行else (因为ab速度相同) 依然移动,此时a到了上方,而b在此时间内移动了,就会产生缝隙当图片b执行if时就会停止移动,而图片a此时执行else, 这时,产生的缝隙会因此消失循环往复,就产生间断循环出现缝隙的现象
参数:图片高度为442px canvas高度442 (canvas 受unity界面窗口大小影响) 《缝隙受canvas大小和速度影响》
当速度为1000时,两图片重叠
当速度为400时,缝隙为758px
当速度为100时,缝隙为158px
当速度为20时,缝隙为38px
当速度为10时,缝隙为18px
当速度为5时,缝隙为8px
当速度为4时,缝隙为6px
当速度为3时,缝隙为5px
当速度为2时,缝隙为2px
当速度为1时,缝隙为1px
解决方法:
transform.position = new Vector3(w / 2, h / 2 + h, 0); 初始化位置时,将高度下移 缝隙宽度 但速度过高时,就弥补不了了
控制脚本的停止和启动
GameObject.Find("ObjectName").GetComponent().enabled=true/false;
例子:
图片a上面挂了一个move_updown.cs 脚本
GameObject.Find("a").GetComponent().enabled = false;