0

所以在我解释我的问题之前。我将首先讲述我真正在做什么。我正在点击移动/缩放相机脚本。我的主摄像头前面有 3 架飞机。现在我正在做的是,创建一个脚本,上面写着“相机将在被点击的平面上放大。我多次尝试想出一个工作脚本,但效果不佳。每次我遇到新的错误,错误等等。:|我很沮丧并删除了错误的脚本。现在我想从头开始。我正在用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];
        }
    }
}
4

2 回答 2

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。如果您只想在选择特定游戏对象时进行缩放,请使用图层。
  2. 相机不会直接以您单击的游戏对象为中心。我使用确切的交点来创建相机将缩放到的位置。
  3. zoomDist 是距离对象的距离。
  4. 此代码仅适用于透视相机,如果您使用正交,则需要修改size相机的值以进行缩放。
于 2013-04-15T00:12:23.403 回答
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];
        }
    }
}
于 2015-09-26T17:51:13.500 回答