找了个瞄准镜的图片,就是十字,然后直接拖到摄像机下,作为摄像机的子物体,距离在摄像机前,就当瞄准镜,问题是当改变fov时,十字瞄准线也在缩放,怎么能让十字不缩放,只缩放场景
1条回答 默认 最新
- CQ.abc 2023-04-10 22:02关注
以下回答结合了ChatGPT:
你可以将瞄准镜的图片放在一个Canvas对象中,将Canvas对象的Render Mode设置为Screen Space - Overlay,这样可以将瞄准镜放在场景上方而不会被缩放。同时,在Canvas的RectTransform组件中设置好瞄准镜的位置和大小。然后,你可以将摄像机的fov值保存到一个变量中,并在代码中动态改变摄像机的fov值,而不是直接改变摄像机的fov属性。这样可以避免瞄准镜被缩放。
下面是一个简单的示例代码:
public class CameraController : MonoBehaviour { public float zoomSpeed = 10.0f; public float maxFov = 60.0f; public float minFov = 20.0f; private float currentFov; private Canvas crosshairCanvas; void Start() { // 获取Canvas对象 crosshairCanvas = transform.Find("CrosshairCanvas").GetComponent<Canvas>(); // 获取初始的fov值 currentFov = GetComponent<Camera>().fieldOfView; } void Update() { // 缩放场景 float zoomDelta = Input.GetAxis("Mouse ScrollWheel") * zoomSpeed; currentFov -= zoomDelta; currentFov = Mathf.Clamp(currentFov, minFov, maxFov); GetComponent<Camera>().fieldOfView = currentFov; // 缩放瞄准镜 crosshairCanvas.scaleFactor = 1 / GetComponent<Camera>().orthographicSize; } }
这里使用了orthographicSize属性,因为Canvas对象在Screen Space - Overlay模式下使用的是正交投影,而不是透视投影。如果你的瞄准镜是在透视模式下使用的,你可以使用camera.aspect属性来计算瞄准镜的大小。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境
- ¥30 关于#java#的问题,请各位专家解答!
- ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
- ¥20 pcf8563时钟芯片不启振
- ¥20 pip2.40更新pip2.43时报错
- ¥15 换yum源但仍然用不了httpd
- ¥50 C# 使用DEVMOD设置打印机首选项
- ¥15 麒麟V10 arm安装gdal
- ¥20 OPENVPN连接问题