【简单】121. 买卖股票的最佳时机 (一点点动态规划)
【简单】409. 最长回文串
【中等】148. 排序链表 (二分法排序、快慢指针)
【简单】589. N 叉树的前序遍历
【中等】102. 二叉树的层序遍历
【简单】704. 二分查找
【简单】278. 第一个错误的版本
协程(Coroutines)是一种比线程更加轻量级的存在。一个操作系统中可以有多个进程;一个进程可以有多个线程;同理,一个线程可以有多个协程。
协程并没有增加线程数量,只是在线程的基础之上通过分时复用的方式运行多个协程,跟多线程类似,有类似异步的效果,但不是真正的异步【但是看到好多地方都说是异步】。
协程的优点:
协程的缺点:
注意:
- 协程调用阻塞IO操作的时候,操作系统会让线程进入阻塞状态,当前的协程和其它绑定在该线程之上的协程都会陷入阻塞而得不到调度(因此在协程中尽量不要调用阻塞IO的方法,比如打印,读取文件,Socket接口等,除非改为异步调用的方式)。处理在协程中调用阻塞IO的操作:
(1)在调用阻塞IO操作的时候,重新启动一个线程去执行这个操作,等执行完成后,协程再去读取结果;
(2)对系统的IO进行封装,改成异步调用的方式。- 协程对计算密集型的任务也没有太大的好处,计算密集型的任务本身不需要大量的线程切换,因此协程的作用也十分有限,反而还增加了协程切换的开销。
yield() 方法和 sleep() 方法有什么区别?
什么是协程?
C#协程的用法
C# 协程 在 Unity中的应用
Unity C# 协程:(开始一个协程、停止一个协程、优化协程、协程中yield的用法)
- 委托的本质就是一个密封类,是引用类型,这个类继承了MulticastDelegate(多播委托:一个委托可以代表多个相同签名的方法,当委托被调用时,这些方法会依次执行)
- 委托的构造函数,有两个参数,一个类型是IntPtr,用来接收方法的(IntPtr表示窗口的时候,叫“句柄”,表示方法时,叫“指针”)
- 可以同步调用(Invoke),也可以异步调用 (BeginInvoke、EndInvoke)
- 委托将方法以变量的形式传递,并且以方法的形式执行
- 委托的三种形式
(1)delegate: 四步(声明,实例化,注册方法,调用)
(2)Action:添加的方法不能有返回值
(3)Func: 添加的方法要有返回值
(4)lamda表达式:方法只使用一次,没有多次使用的话使用
- 事件是功能被限制的一个委托变量,它的类型是委托类型。是一种特殊的委托,他的调用和委托是一样的。
- 事件是基于委托的,为委托提供了一个发布/订阅机制。
区别:
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器(Collider)。
- 刚体可以让物体在物理影响下运动。
- 碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。
碰撞检测方法
注意点
- 碰撞体主要由2个组件完成:刚体 + 碰撞体(它可以是触发器Trigger)
- 物体发生碰撞的必要条件:两个物体都必须带有碰撞器,其中一个物体还必须带有Rigidbody刚体。
- 可以简单地认为,带有Rigidbody的碰撞的产生体,而带有Collider是碰撞的接受体。
- 带有Rigidbody必须带有一个Collider,碰撞是针对Collider的,Rigidbody只是标记了某个物体是一个能够产生碰撞的物体。
碰撞器和触发器的区别
当IsTrigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;
当IsTrigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。