c1_lua/lua/app/common/camera_manager.lua
2023-04-03 10:59:13 +08:00

59 lines
2.3 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local CameraManager = {}
local ADJUST_SCREEN_W = 720
local ADJUST_SCREEN_H = 1560
function CameraManager:init()
self.mainCamera = CS.UnityEngine.Camera.main
CS.UnityEngine.GameObject.DontDestroyOnLoad(self.mainCamera.gameObject)
self.originPosition = self.mainCamera.transform.position
self.originOrthographicSize = self.mainCamera.orthographicSize
-- self.originFieldOfView = self.mainCamera.gameObject:GetComponent(GConst.TYPEOF_UNITY_CLASS.BF_CAMERA_HELPER).OriginFieldOfView
-- self:adjustCameraForFight()
-- 战斗相机参数调整
self.mainCamera.transparencySortMode = CS.UnityEngine.TransparencySortMode.CustomAxis
self.mainCamera.transparencySortAxis = BF.Vector3(0, 0, 1)
end
function CameraManager:getMainCamera()
return self.mainCamera
end
function CameraManager:resetMainCamera()
self.mainCamera.transform.position = self.originPosition
self.mainCamera.orthographicSize = self.originOrthographicSize
end
function CameraManager:getMainCameraOriginPosition()
return self.originPosition
end
function CameraManager:getOriginOrthographicSize()
return self.originOrthographicSize
end
-- 适配战斗相机
function CameraManager:adjustCameraForFight()
local manualHeight
-- 然后得到当前屏幕的高宽比 和 你自定义需求的高宽比。通过判断他们的大小,来不同赋值
if CS.UnityEngine.Screen.height / CS.UnityEngine.Screen.width ~= ADJUST_SCREEN_H / ADJUST_SCREEN_W then
-- 如果屏幕的高宽比大于自定义的高宽比 。则通过公式 ADJUST_SCREEN_W * manualHeight = Screen.width * Screen.height
-- 来求得适应的manualHeight ,用它求出 实际高度与理想高度的比率 scale
manualHeight = ADJUST_SCREEN_W / CS.UnityEngine.Screen.width * CS.UnityEngine.Screen.height
else
-- 否则 直接给manualHeight 自定义的 ADJUST_SCREEN_H 的值那么相机的fieldOfView就会原封不动
manualHeight = ADJUST_SCREEN_H
end
-- Camera.fieldOfView 视野: 这是垂直视野水平FOV取决于视口的宽高比当相机是正交时fieldofView被忽略
-- 把实际高度与理想高度的比率scale乘加给Camera.fieldOfView。
-- 这样就能达到自动调节分辨率的效果
local scale = manualHeight / ADJUST_SCREEN_H
if scale < 0.7 then
scale = 0.7
end
self.mainCamera.fieldOfView = self.originFieldOfView*scale
end
return CameraManager