Unity的Mouse.current是执行Find操作还是缓存值?
关于Unity输入系统
Mouse.current的性能疑问解答 核心问题
业内曾普遍建议缓存Camera.main而非直接反复调用,因为其底层会执行昂贵的Find操作(这一常识如今可能已不适用)。那么Unity输入系统中的Mouse.current是否存在类似问题?
根据Unity输入系统的设计,系统不区分多个鼠标,那Mouse.current在调用时是否会在后台做缓存,还是每次调用都有类似Find的开销?当前项目不会切换鼠标,但对优化要求极高,需要明确反复调用Mouse.current检测位置、点击等操作的性能影响。
明确结论
Mouse.current不存在类似旧版Camera.main的昂贵Find操作,它本质是对输入系统内部缓存的鼠标实例的直接引用。- 输入系统会在后台维护当前活跃的鼠标设备实例,
Mouse.current每次调用只是直接返回这个缓存的引用,没有额外的搜索或遍历开销。
原理说明
Unity输入系统的设备管理机制中,鼠标作为单一全局设备(系统不支持多鼠标区分),其实例会在输入系统初始化或设备连接时被缓存。每次访问Mouse.current时,只是读取内部维护的一个全局变量,性能开销可以忽略不计。
对比旧版Camera.main:旧版实现中每次调用都会遍历场景中所有相机查找带有MainCamera标签的对象,而新版Unity(2020+)已经优化了Camera.main的实现,同样会缓存结果,只有当场景中相机的主相机状态变化时才会重新查找。但Mouse.current的实现从一开始就是基于缓存的直接引用,比优化后的Camera.main开销更低。
实践建议
即使对优化要求极高,反复调用Mouse.current也不会成为性能瓶颈。如果仍想进一步确保(比如极端性能场景),可以在初始化时缓存一次Mouse.current到局部变量,后续直接使用该变量,但这属于过度优化,实际收益微乎其微。
内容的提问来源于stack exchange,提问作者Sean Duggan
相关产品推荐
相关产品推荐

