简体   繁体   English

放大或缩小相机

[英]Zoom in or zoom out Camera

I have a ball which is focusing by a camera at random height and distance. 我有一个球,它被照相机聚焦在随机的高度和距离上。 On mouse scroll I want to zoom in-out my camera towards the ball. 在鼠标滚动时,我想将摄像机向球内放大。 I have tried this weird code and its behaving weird as I expected. 我已经尝试了这个怪异的代码,并且表现出了我所期望的怪异。

void ZoomInOut() { 
    if(Input.GetAxis("Mouse ScrollWheel") > 0){
        Debug.Log("mouse scroll wheel greater");
        distance += 20.0f;
        Vector3 negDistance = new Vector3(targetFollow.transform.position.x, targetFollow.transform.position.y, -distance);
        Vector3 pos = transform.rotation * negDistance + targetFollow.transform.position;
        transform.position = pos;
    }
    if(Input.GetAxis("Mouse ScrollWheel") < 0){
        Debug.Log("mouse scroll wheel less");
        distance -= 20.0f;
        Vector3 negDistance = new Vector3(targetFollow.transform.position.x, targetFollow.transform.position.y, -distance);
        Vector3 pos = transform.rotation * negDistance + targetFollow.transform.position;
        transform.position = pos;
    }
}

If want to zoom directly forwards/backwards, can use this: ZoomWithMouse.cs 如果要直接向前/向后缩放,可以使用:ZoomWithMouse.cs

It just moves camera along transform.forward axis. 它仅使摄像机沿transform.forward轴移动。

using UnityEngine;

// Zoom forward and backward with mousewheel, Attach this script to camera
public class ZoomWithMouse : MonoBehaviour
{
    public float zoomSpeed = 300;
    void Update()
    {
        var mouseScroll = Input.GetAxis("Mouse ScrollWheel");

        if (mouseScroll!=0)
        {
            transform.Translate(transform.forward * mouseScroll * zoomSpeed * Time.deltaTime, Space.Self);
        }
    }
}

source: https://github.com/UnityCommunity/UnityLibrary/blob/master/Scripts/Camera/ZoomWithMouse.cs 来源: https : //github.com/UnityCommunity/UnityLibrary/blob/master/Scripts/Camera/ZoomWithMouse.cs

using UnityEngine;
using System.Collections;

public class Zoom : MonoBehaviour
{
    private float _speed = 10;

private void Update()
{
    float mouseScroll = Input.GetAxis("Mouse ScrollWheel");

    if (mouseScroll!=0)
    {
        transform.Translate(Mathf.Sign(mouseScroll) * transform.forward * _speed * Time.deltaTime, Space.World);
    }
}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM