【Unity】执行逻辑学习

本文分享了Unity游戏开发中的一些实用技巧,包括确保互斥变量的正确使用、遍历顺序的选择、解决背景音乐淡入淡出的Bug、条件判断的正确方式及变量自增的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

只有在赋值的时候才有区别。前者先自增再赋值,后者先赋值再自增。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值