1.如果使用了两个互斥的变量,一定要保证时刻互斥。
void CamMovement(int index)
{
if (toUp && ! follow)//优先判断toUp
{
if (Vector3.Distance(mainCam.transform.position, cam_ups[index].position) < 0.5f)
toUp = false;
}else if (toDown && ! follow)//保证这两种情况只执行一种
{
if (Vector3.Distance(mainCam.transform.position, cam_downs[index].position) < 0.5f)
toDown = false;
}
}
case "CamLeftBox":
offset = mainCam.transform.position - transform.position;//保持镜头和主角距离不变
follow = true;
toDown = true;//待跟随结束,镜头就移动到下方定点
toUp = false;
break;
case "CamRigBox":
offset = mainCam.transform.position - transform.position;
follow = true;
toUp = true;
toDown = false;
break;
2.遍历的时候可能需要按照正序或者倒序。可以走一遍流程,看看先判断哪一个。
for (int i = 1; i < sphereListeners.Length; i++)//正序判断
{
if (sphereListeners[i].sEnter)
{
SphereDisappear(sphereListeners[i - 1].gameObject);
SphereAppear(sphereListeners[i].gameObject);
}
}
for (int i = sphereListeners.Length-1; i>0; i--)//倒序判断
{
if (sphereListeners[i].sExit)
{
SphereDisappear(sphereListeners[i].gameObject);
SphereAppear(sphereListeners[i - 1].gameObject.gameObject);
}
}
3.这次遇到了一个Bug:在切换场景时对背景音乐进行了淡入淡出的处理,它执行的是一个协程。
每次回到主界面,声音渐出之后又突然变为0,查找了所有改变volume的地方,感觉没有什么问题。
最后终于发现,原来是因为,加载主界面的时候,要初始化音量滑动条的值。初始化时记录的正是当时的音量值(也就是刚加载场景淡出刚结束的时候!),而背景音乐的音量正是实时地受到滑动条的影响。(这写的也太不安全了)
修改:只有当激活“设置界面”时才对音量滑动条进行初始化,背景音乐音量才受到滑动条影响。以后的逻辑也应当这样写。
另外知道,每次重新加载一个场景的时候,初始化方法都会重新执行一次。
4. 如果不是这两个场景之一,就不执行下面的代码。要用&&不要用||
if (SceneManager.GetActiveScene().name != "Level_1_a" && SceneManager.GetActiveScene().name!="Level_1_b") return;
5. int index= ++InfiniteManager._instance.changeIndex;
++i; 和 i++;
只有在赋值的时候才有区别。前者先自增再赋值,后者先赋值再自增。