首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用滑块控制摄像机的FoV?

用滑块控制摄像机的FoV?
EN

Stack Overflow用户
提问于 2020-07-03 07:50:44
回答 1查看 334关注 0票数 0

我正在使用滑块,并希望控制相机的视野。我如何做到这一点,因为滑块是更新的每帧与相机的视野使用鼠标滚动?我想控制滑块以及滑块应该更新FoV使用鼠标滚动。有什么办法我能做到这两件事吗?

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

ublic class CamZoom : MonoBehaviour
{
    float MouseZoomSpeed = 15.0f;
    float TouchZoomSpeed = 0.1f;
    float ZoomMinBound = 0.1f;
    float ZoomMaxBound = 120.9f;
    Camera cam;

    public Slider slider;

    // Use this for initialization
    void Start()
    {
        cam = GetComponent<Camera>();
    }

    
void LateUpdate()
    {

         float scroll = -Input.GetAxis("Mouse ScrollWheel");
         Zoom(scroll, MouseZoomSpeed);

         slider.value = cam.fieldOfView;
       

         if(cam.fieldOfView < ZoomMinBound) 
         {
             cam.fieldOfView = 0.1f;
         }
         else
         if(cam.fieldOfView > ZoomMaxBound ) 
         {
             cam.fieldOfView = 179.9f;
         }
    }

    void Zoom(float deltaMagnitudeDiff, float speed)
    {

        cam.fieldOfView += deltaMagnitudeDiff * speed;
        // set min and max value of Clamp function upon your requirement
        cam.fieldOfView = Mathf.Clamp(cam.fieldOfView, ZoomMinBound, ZoomMaxBound);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-03 08:10:48

是的,您可以使用Slider.onValueChanged来反馈值,也可以在鼠标滚动后将值反馈给滑块。

代码语言:javascript
复制
public class CamZoom : MonoBehaviour
{
    // I would make these adjustable via the Inspector
    [SerializeField] float MouseZoomSpeed = 15.0f;
    [SerializeField] float TouchZoomSpeed = 0.1f;
    [SerializeField] float ZoomMinBound = 0.1f;
    [SerializeField] float ZoomMaxBound = 179.9f;
    [SerializeField] Camera cam;

    public Slider slider;

    // Use this for initialization
    void Start()
    {
        if(!cam) cam = GetComponent<Camera>();
        
        slider.minValue = ZoomMinBound;
        slider.maxValue = ZoomMaxBound;
        slider.value = cam.fieldOfView;
        slider.onValueChanged.AddListener(OnSliderValueChanged);
    }

    private void OnSliderValueChanged(float newValue)
    {
        cam.fieldOfView = newValue;
    }
    
    void LateUpdate()
    {
         var scroll = -Input.GetAxis("Mouse ScrollWheel");

         Zoom(scroll, MouseZoomSpeed);

         slider.value = cam.fieldOfView;
    }

    void Zoom(float deltaMagnitudeDiff, float speed)
    {
        cam.fieldOfView += deltaMagnitudeDiff * speed;

        cam.fieldOfView = Mathf.Clamp(cam.fieldOfView, ZoomMinBound, ZoomMaxBound);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62710855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档