如何实现第一人称视角?

时间:2019-01-23 23:17:00

标签: c# object unity3d button camera

我正在关注本教程:https://unity3d.com/learn/tutorials/projects/roll-ball-tutorial/moving-camera?playlist=17141

我设法实现了第三人称视角视图按钮,但是我很难弄清楚如何为第一人称视角视图做同样的事情。下面是我附加到主摄像机的摄像机控制脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cameraControls : MonoBehaviour
{
    public GameObject player;
    private Vector3 offset;
    public bool thirdPerson;
    public bool firstPerson;

    void OnGUI()
    {
        // 3rd person camera view
        if (GUI.Button(new Rect(20, 50, 140, 40), "3rd Person Camera"))
        {
            thirdPerson = true;
        }

        // 1st person camera view
        if (GUI.Button(new Rect(20, 110, 140, 40), "1st Person Camera"))
        {
            firstPerson = false;
        }
    }

    // Start is called before the first frame update
    void Start()
    {
        offset = transform.position - player.transform.position;
    }

    // Update is called once per frame
    void Update()
    {
        if (thirdPerson == true)
        {
            transform.position = player.transform.position + offset;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

嗯,虽然对于这样一个小教程来说可能没问题: 您不应在游戏界面中使用GUI和OnGUI。统一版本4.6(几年前)发布了一个更好的UI系统。

您可以拥有2台摄像机,一台用于第三人称摄像机,一台用于第一人称摄像机。按下其中一个按钮时,您将禁用一台相机,然后再启用另一台。


根据您的修改:

您目前有2个布尔变量,一个用于“ firstPerson”,一个用于“ thirdPerson”,那就是多余的。

如果两者都正确,您会怎么做?还是两者都是假的?仅具有一个变量,例如“ thirdPerson”正确->使用第三人称,错误->使用第一人称。

我还看到您已决定更改摄像头位置,而不是使用2台摄像头。这也是实现目标的一种可能方法

答案 1 :(得分:1)

您可以使用单个摄像机,并根据应该激活的视角来更改其位置。尝试将两个空对象作为子级插入您的播放器对象,并在脚本中添加对它们的引用(您的相机也必须是播放器的子代,才能工作)。然后将其从层次结构拖放到检查器,只需在这些位置之间切换,如下所示:

public Transform firstPersonPosition;
public Transform thirdPersonPosition;
public Camera camera;

private void GoFirstPerson()
{
    camera.transform.position = firstPersonPosition.position;
}
private void GoThirdPerson()
{
    camera.transform.position = thirdPersonPosition.position;
}

您基本上可以将它们用作相机跳转的“起点”。

//编辑: 如果您在理解游戏模式期间代码如何影响GameObject时遇到问题,只需在游戏过程中切换到 Scene View (场景查看),然后查看您的对象及其在场景中的位置。我敢打赌,您的第一人称相机在您的播放器模型中的某个位置,因为您将其位置设置为播放器的位置。