【问题标题】:How can I implement a 1st person camera view?如何实现第一人称相机视图?
【发布时间】:2019-01-23 23:17:00
【问题描述】:

我现在正在关注本教程: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;
        }
    }
}

【问题讨论】:

    标签: c# object unity3d button camera


    【解决方案1】:

    好吧,虽然对于这么小的教程来说可能没问题: 你不应该在游戏 UI 中使用 GUI 和 OnGUI 的东西。 unity 4.6 版(多年前)发布了一个更好的 UI 系统。

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


    根据您的编辑:

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

    如果两者都是真的,你会怎么做?还是两者都是假的?只有一个变量,例如"thirdPerson" true -> 使用第三人称,false -> 使用第一人称。

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

    【讨论】:

    • 谢谢,我取得了一些进展,所以我会继续更新我上面的问题!
    • 我已经对我的答案进行了一些编辑,这可能会引导你朝着正确的方向前进
    • 好吧,很高兴知道。不过,我在弄清楚如何设置第一个相机视图的位置时遇到了一些麻烦;我认为将“transform.position”设置为“player.transform.position”可以解决问题,但我似乎过于放大了某些东西(我看到的只是一个蓝色斑点)。有什么建议吗?
    【解决方案2】:

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

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

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

    //编辑: 如果您在理解您的代码在播放模式期间如何影响您的游戏对象时遇到问题,只需在播放期间切换到 场景视图 并查看您的对象以及它们在场景中的位置。我敢打赌,您的第一人称相机在您的玩家模型中的某个位置,因为您将其位置设置为您的玩家位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多