C# 如何实现第一人称摄影机视图?

C# 如何实现第一人称摄影机视图?,c#,object,unity3d,button,camera,C#,Object,Unity3d,Button,Camera,我现在正在学习本教程: 我已经设法实现了一个第三人称摄影机视图按钮,但我很难想出如何对第一人称摄影机视图执行相同的操作。下面是我附加到主摄像机的摄像机控制脚本: using System.Collections; using System.Collections.Generic; using UnityEngine; public class cameraControls : MonoBehaviour { public GameObject player; private V

我现在正在学习本教程:

我已经设法实现了一个第三人称摄影机视图按钮,但我很难想出如何对第一人称摄影机视图执行相同的操作。下面是我附加到主摄像机的摄像机控制脚本:

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

好吧,虽然对于这样一个小教程来说可能还可以: 您不应该在ingame UI中使用GUI和OnGUI。unity在4.6版(几年前)中发布了一个更好的UI系统

您可以有两个摄像头,一个用于第三人,一个用于第一人。按下其中一个按钮时,将禁用一个摄像头并启用另一个


根据您的编辑:

现在有两个bool变量,一个用于“第一人称”,一个用于“第三人称”,这是多余的

如果两者都是真的,你会怎么做?或者两者都是假的?只需要一个变量,例如“thirdPerson”true->使用第三人称,false->使用第一人称


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

好吧,不过对于这样一个小教程来说也可以: 您不应该在ingame UI中使用GUI和OnGUI。unity在4.6版(几年前)中发布了一个更好的UI系统

您可以有两个摄像头,一个用于第三人,一个用于第一人。按下其中一个按钮时,将禁用一个摄像头并启用另一个


根据您的编辑:

现在有两个bool变量,一个用于“第一人称”,一个用于“第三人称”,这是多余的

如果两者都是真的,你会怎么做?或者两者都是假的?只需要一个变量,例如“thirdPerson”true->使用第三人称,false->使用第一人称


另外,我看到您决定更改摄像头位置,而不是使用两个摄像头。这也是实现您的目标的一种可能方式

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

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;
}
您基本上可以将它们用作相机跳转到的“航路点”

//编辑:
如果您在游戏模式下无法理解代码如何影响游戏对象,只需在游戏过程中切换到场景视图,查看对象及其在场景中的位置。我打赌您的第一人称相机在您的播放器模型中的某个位置,因为您将其位置设置为您的播放器位置。

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

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;
}
您基本上可以将它们用作相机跳转到的“航路点”

//编辑:
如果您在游戏模式下无法理解代码如何影响游戏对象,只需在游戏过程中切换到场景视图,查看对象及其在场景中的位置。我打赌您的第一人称相机在您的玩家模型中的某个位置,因为您将其位置设置为您的玩家位置。

谢谢,我取得了一些进展,因此我将继续更新上面的问题!我对我的答案做了一些修改,这可能会让你找到正确的方向。好的,很高兴知道。我在弄清楚如何设置第一个摄像头视图的位置时遇到了一些问题;我以为将“transform.position”设置为“player.transform.position”就可以了,但我似乎对某些东西太过放大了(我看到的只是一个蓝色的斑点)。有什么建议吗?谢谢,我取得了一些进展,所以我会继续更新我上面的问题!我对我的答案做了一些修改,这可能会让你找到正确的方向。好的,很高兴知道。我在弄清楚如何设置第一个摄像头视图的位置时遇到了一些问题;我以为将“transform.position”设置为“player.transform.position”就可以了,但我似乎对某些东西太过放大了(我看到的只是一个蓝色的斑点)。有什么建议吗?