所以在我解释我的问题之前。我先说出我到底在做什么。 我正在点击移动/缩放相机脚本。主摄像头前有3架飞机。现在我正在做的是,创建一个脚本,上面写着“相机将放大被点击的平面。我做了几次尝试来制作一个工作脚本,但是效果不好。每次遇到新的bug ,错误和什么没有。:| 我感到沮丧并删除了错误的脚本。现在我想从头开始。我是用C#
做的由于我不是专业人士,任何人都可以详细解释我完成它吗? 我很困惑如何处理我放置的飞机。我想知道我的脚本中缺少什么。 这是我如何放置这些飞机的屏幕截图。
编辑。 - 我设法搞定了。现在我需要建议,如何定位我放在相机前面的飞机。
using UnityEngine;
using System.Collections;
public class CameraZoom : MonoBehaviour
{
public int zoomLevelSelected = 0;
public float[] ZoomLevels = new float[] { 60, 40, 20 };
void Update()
{
int zoomChange = 0;
if (Input.GetMouseButtonDown(0)) { zoomChange = +1; } // back
else if (Input.GetMouseButtonDown(1)) { zoomChange = -1; } // forward
if (zoomChange != 0)
{
zoomLevelSelected = Mathf.Clamp(zoomLevelSelected + zoomChange, 0, ZoomLevels.Length - 1);
camera.fieldOfView = ZoomLevels[zoomLevelSelected];
}
}
}
答案 0 :(得分:1)
哎呀,这是创建点击缩放的一种方法。要点是通过鼠标光标从摄像机创建到场景的光线。当该光线与物体相交时,从交叉点沿交叉面的法线向后创建第二条光线。
void Update () {
if(Input.GetMouseButtonDown(0)){
// get ray from camera in to scene at the mouse position
Ray ray = Camera.mainCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
// hardcoded "zoom" distance.
float zoomDist = 15.0f;
// Raycast from camera to mouse cursor, if object hit, zoom.
if (Physics.Raycast(ray,out hit,Mathf.Infinity)){
// Create a second ray from the hit object back out, zoom the camera along this ray.
Ray r = new Ray(hit.point,hit.normal);
Camera.mainCamera.transform.position = r.GetPoint(zoomDist);
}
}
}
要记住的事情:
size
值以进行缩放。答案 1 :(得分:0)
你的脚本的问题是你的var int zoomChange每帧被设置为零,所以将该变量移动到类级别。
using UnityEngine;
using System.Collections;
public class CameraZoom : MonoBehaviour
{
public int zoomLevelSelected = 0;
public float[] ZoomLevels = new float[] { 60, 40, 20 };
int zoomChange = 0; //<<<<<<<<<<<<<
void Update()
{
if (Input.GetMouseButtonDown(0)) { zoomChange = +1; } // back
else if (Input.GetMouseButtonDown(1)) { zoomChange = -1; } // forward
if (zoomChange != 0)
{
zoomLevelSelected = Mathf.Clamp(zoomLevelSelected + zoomChange, 0, ZoomLevels.Length - 1);
camera.fieldOfView = ZoomLevels[zoomLevelSelected];
}
}
}