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”就可以了,但我似乎对某些东西太过放大了(我看到的只是一个蓝色的斑点)。有什么建议吗?