Unity 相机固定点缩放

介绍

部落冲突这款游戏中可以使用双指缩放地图,在缩放时会以双指中心点进行缩放。

实际项目中如何在 2D 相机与 3D 相机中实现此效果?

分析

修改 2D 相机的 OrthoganalSize 与 3D 相机的 FOV 只会沿着屏幕中心缩放,其实如果想要实现指定点的缩放,可以在缩放后移动回原来的位置就可以模拟在指定点缩放的效果。

桌面平台使用鼠标位置,移动平台使用双指中间点位置,处理方式是一样的。

代码

2D

1 2 3 4 5 
var oldPosition = _camera.ScreenToWorldPoint(Input.mousePosition); TargetSize -= scrollWheel * Time.deltaTime * ZoomSpeed * TargetSize; _camera.orthographicSize = TargetSize; var newPosition = _camera.ScreenToWorldPoint(Input.mousePosition); _camera.transform.position += oldPosition - newPosition; 

3D

1 2 3 4 5 
var oldPosition = _camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Farclip)); TargetSize -= scrollWheel * Time.deltaTime * ZoomSpeed * TargetSize; _camera.fieldOfView = TargetSize; var newPosition = _camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Farclip)); _camera.transform.position += oldPosition - newPosition; 

Demo

有两个示例:CameraZoom2D 与 CameraZoom3D,在 Unity 2019.4.32f1 下测试通过。

注意

Unity - Scripting API: Camera.ScreenToWorldPoint API 会受浮点精度影响,具体表现为相机的世界坐标值绝对值过大时,缩放或移动时会抖动,有两种方式:

  1. 建议修改设计方案,将相机移回原点附近,这是最合理的方案,可以规避浮点数造成的其他问题
  2. 手动进行坐标系转换,去除浮点数影响。

版权声明:
作者:zhangchen
链接:https://www.techfm.club/p/37693.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>