2013-04-14 156 views
0

所以在我解释我的问题之前。我会先告诉我真的在做什么。 我正在点击移动/缩放相机脚本。我的主摄像头前面有3架飞机。现在我正在做的是创建一个脚本,其中说:“相机将放大被点击的飞机上,我做了几次尝试来提供一个工作脚本,但它运行得不好,每当我遇到新的错误,错误和什么不是。:| 我得到了沮丧,并删除了越野车脚本。现在我想从头开始。我正在做它在C#Unity C#摄像头缩放脚本

因为我不是一个专业,任何人都可以详细解释我把它做? 我很困惑该如何处理,我把,我想知道什么是我的脚本失踪飞机。 下面是我如何放置那些平面的屏幕截图。

enter image description here

编辑。 - 我设法处理它。现在我需要建议,如何瞄准我放在相机前面的飞机。

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

有几件事。要选择飞机,请使用[Physics.Raycast](http://docs.unity3d.com/Documentation/ScriptReference/Physics.Raycast.html)(文档应该解释基础知识)。接下来,请不要将视野更改为缩放,这会混淆视图。相反,移动你的相机的transform.position。 – Jerdak

回答

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); 
     } 
    } 
} 

事情要记住:

  1. Physics.Raycast,书面,将返回true为与对撞机任何游戏物体。如果您只想在选择特定的GameObjects时进行缩放,请使用layers
  2. 相机不会直接位于您单击的GameObject上。我使用确切的交点来创建相机将放大到的位置。
  3. zoomDist是远离对象的距离。
  4. 此代码仅适用于透视相机,如果您使用拼写正确,则需要修改相机的size值以进行缩放。
+0

谢谢你的帮助。 :) – ChE

+0

我也会推荐iTween库,如果你想平稳的相机运动。它会像iTween.MoveTo(Camera.mainCamera.gameObject,r.GetPoint(zoomDist)); –

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]; 
     } 
    } 
}