第五期

1、什么是单例?举一个游戏中使用单例的例子

     单例模式是一种设计模式,即保证系统中只有一个类的实例,且该实例易于外界访问,从而方便对对象的访问,可以控制资源使用,个人理解类似于大家在一块黑板上讨论东西,不关心参与讨论的对象,单例就相当于黑板。
        游戏中我一般在一个场景中设置一个GameController类为单例模式,其中提供若干辅助操作对象的方法,如控制参数设置,提供计算方法等,也会设置一个单例的声音管理器专门管理声音的统一播放。Unity中我这样设置单例。
public class GameManager : MonoBehaviour
{
    private static  GameManager  _instance;

    public static  GameManager Instance         //此段有时省略
    {
        get { return   _instance; }
    }

    void Awake()        
    {
        _instance = this;     //使自身可被调用
    }
}


   常规写法:

      

public class Singleton
{
    static Singleton instance;
 
    public static Singleton Instance {
        get {
            if (instance == null) {
                instance = new Singleton ();
            }
             return instance;
        }
    }
}

2、Unity实现昼夜交替的方法和思路

           1)设置两个天空盒和摄像机,一个专门负责白天一个为夜晚,设置不同的天空盒,白昼的摄像机内设置一个光源,通过控制两个物体的显示                   和隐藏实现。 

           2)最简单的方法插件实现Time of Day - Dynamic Sky Dome


3、塔防游戏中,地图的路径信息如何存储?让怪物沿着路径走的方法是什么?

      1)一张图一个ID,然后把路径点信息保存到xml文件里,根据id去xml取路径点信息,就ok了。
                 至于让怪沿着路径点走的方法,就是坐标点减坐标点得到其位移向量。再给其一个速度,再用距离判断是否开始计算移动到下个点。
         2) 通过将地图分割为二维数组来存储,路径可以根据情况存储为二维数组的行列索引。根据路径索引找到对应的路径,控制怪物依此行走。


4、继承和接口的用法和区别?

     . C#只支持单继承,而接口则可以实现多继承。 
· 继承父类的子类不一定要实现父类中的所有方法,但继承接口的类必须实现接口中的所有方法。 
· 父类中的方法可以是虚方法,也可以是非虚方法,但接口中的所有方法都只能是虚方法。 
· 父类中的字段、属性以及方法等可以使用除public以外的访问修饰符,但接口中的方法只能使用public修饰符(并非不能,只是不这么做接口的意义就没了)。 
· 父类中可以定义字段(类似”string str”这样的叫做字段),而接口中只能定义属性(类似”public string {get; }”这样的叫做属性)。

5、如何控制子弹发射频率,技能冷却时间等?

       思路1:控制时间间隔就可以了,参考官网例子里的太空射击, 

   
   
  public float shootRate = 2;
    private float timer;
    void Update()
    {
         timer += Time.deltaTime;
         if (timer>=shootRate)
         {
             timer = 0;
            //发射子弹或者技能冷却结束
         }
    }  
思路2:通过可以通过协程来实现,例如,点击发射按钮后,至少隔3秒才能进行下一次发射。
      private bool _isCanFire = true;
                                     // 点击发射按钮之后
        void Fire () {
                StartCoroutine(Shoot()); 
        }
        private IEnumerator Shoot() 
        {
                if (_isCanFire) {
                        _isCanFire = false;
                        //发射子弹的逻辑
                }
                Yield return WaitForSeconds(3);
                _isCanFire = true;
        }


6、Unity的GameObject.find是深度优先还是广度优先?
  

  
  
  深度优先,find会去逐个查找物体下的子物体,并查询到最下一层级的同名物体。
我们了解到深度优先是一种类似递归的搜索算法(就是一条路走到底,还找不到就返回走第二条路)
广度优先刚好相反,是只要有岔路都走个遍,走到下一个拐点要是还有岔路也都先探一探酱紫。
 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值