C# 如何在目标设置为统一的情况下放大和缩小特定对象?
我创建了一个3dobject并将一个游戏对象设置为目标,并将下面的代码添加到主摄像机中。我可以放大3d对象,但我不能缩小它。如何缩小?i、 e返回到原始位置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
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);}
您可以在开始“移动方向”功能之前获取相机位置,并在想要后退时使用它。