Unity 无限场景缝隙问题等

!!!! 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;

你可能感兴趣的:(Unity)