C# 如何在目标设置为统一的情况下放大和缩小特定对象?

C# 如何在目标设置为统一的情况下放大和缩小特定对象?,c#,unity3d,main,pinchzoom,gameobject,C#,Unity3d,Main,Pinchzoom,Gameobject,我创建了一个3dobject并将一个游戏对象设置为目标,并将下面的代码添加到主摄像机中。我可以放大3d对象,但我不能缩小它。如何缩小?i、 e返回到原始位置 using System.Collections; using UnityEngine; public class zoo22 : MonoBehaviour { public float movespeed = 35.0f; //you need to say how far from the object the c

我创建了一个3dobject并将一个游戏对象设置为目标,并将下面的代码添加到主摄像机中。我可以放大3d对象,但我不能缩小它。如何缩小?i、 e返回到原始位置

using System.Collections;

using UnityEngine;

public class zoo22 : MonoBehaviour
{
    public float movespeed = 35.0f;
    //you need to say how far from the object the camera will stop
    public float minimumDistanceFromTarget = 5f;
    public GameObject targetobject;
    private bool movingtowardstarget = false;

    // Use this for initialization
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            if (movingtowardstarget == true)
            {
                movingtowardstarget = false;
            }
            else
            {
                movingtowardstarget = true;
            }
        }

        if (movingtowardstarget)
        {
            movetowardstarget(targetobject);
        }
    }

    public void movetowardstarget(GameObject target)
    {
        if(Vector3.Distance(transform.position, target.transform.position) > minimumDistanceFromTarget) //we move only if we are further than the minimum distance
        {
            transform.position = Vector3.MoveTowards(transform.position, target.transform.position, movespeed * Time.deltaTime);
        } else //otherwise, we stop moving
        {
            movingtowardstarget = false;
        }
    }
}

我没有你的镜头,但你可以轻松地进行变焦。 首先旋转相机以查看对象,然后应用缩放:

例如,要在正交摄影机中使用鼠标滚轮进行缩放,需要处理正交大小:

int orthographicSizeMin = 1;
int orthographicSizeMax = 6;

function Update()
{
     transform.LookAt(target);

     if (Input.GetAxis("Mouse ScrollWheel") > 0) // forward
     {
         Camera.main.orthographicSize++;
     }
     if (Input.GetAxis("Mouse ScrollWheel") < 0) // back
     {
         Camera.main.orthographicSize--;
     }
}
Camera.main.orthographicSize = Mathf.Clamp(Camera.main.orthographicSize, orthographicSizeMin, orthographicSizeMax );
对于透视摄影机,您需要处理视野:

float minFov = 10f;
float maxFov = 90f;
float sensitivity = 10f;


function Update()
{
     transform.LookAt(target);
     float fov = Camera.main.fieldOfView;
     fov += Input.GetAxis("Mouse ScrollWheel") * sensitivity; 
     fov = Mathf.Clamp(fov, minFov, maxFov);
     Camera.main.fieldOfView = fov;
}

您可以使用相同的功能进行放大和缩小。请检查下面的示例。输入负速度以向后移动

void Update()
    {
        if (Input.GetMouseButtonDown(1)) //move backward
            movetowardstarget(targetobject, true);
        if (Input.GetMouseButtonDown(0)) //move forward
            movetowardstarget(targetobject, false);
    }
    public void movetowardstarget(GameObject target, bool backwards)
    {
        float dir = backwards?-1.0f:1.0f;
        actualDist = Vector3.Distance(transform.position, target.transform.position);
        if (Vector3.Distance(transform.position, target.transform.position) > minimumDistanceFromTarget) //we move only if we are further than the minimum distance
        {
            transform.position = Vector3.MoveTowards(transform.position, target.transform.position, dir*movespeed * Time.deltaTime);
        }
        else //otherwise, we stop moving
        {
            movingtowardstarget = false;
        }
    }
海事组织最简单的方法: 也为原始位置添加对象:

public GameObject targetobject, originalPosObj;
然后将其作为目标传递:

movetowardstarget(movingtowardstarget ? targetObject : originalPosObj);

我想你会想用鼠标滚轮来做这个

public class CameraConrol : MonoBehaviour
{
    Vector3 centerPosition;//positon of object you want to zoom in and out of
    float MaxZoom = 3f;

    void Update()
    {
        //mouse wheel chaned
        if (Input.mouseScrollDelta.y !=0)
        {
            ZoomCamera();
        }
    }

    public void ZoomCamera()
    {
        Vector3 newPosition = Vector3.MoveTowards(
            transform.position, centerPosition, Input.mouseScrollDelta.y);

        if(newPosition.y >= (centerPosition.y + MaxZoom ))
        {
            transform.position = newPosition;
        }        
    }
}

很抱歉,我添加了整个代码,而不是向StarGet(游戏对象目标)移动的公共void。它不起作用。应该更改其他内容吗?当然。使用下面的代码段测试
void Update(){if(Input.GetMouseButtonDown(1))//向后移动到starget(targetobject,true);if(Input.GetMouseButtonDown(0))//向前移动到starget(targetobject,false);}
您可以在开始“移动方向”功能之前获取相机位置,并在想要后退时使用它。