我正在关注本教程: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;
}
}
}
答案 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 (场景查看),然后查看您的对象及其在场景中的位置。我敢打赌,您的第一人称相机在您的播放器模型中的某个位置,因为您将其位置设置为播放器的位置。