【问题标题】:How to move the camera in an endless runner game along with the rocket如何在无尽的跑步游戏中与火箭一起移动相机
【发布时间】:2018-06-28 13:10:07
【问题描述】:

目前,我遇到了通过 c# 脚本统一更改主摄像机位置的问题。我正在尝试随着火箭改变相机的位置。所以理想情况下,火箭应该在屏幕左侧稍微偏移。它应该在玩游戏时跟随。

这是我的相机脚本,当我按下播放键时,它应该跟随目标“TheRocket”。

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

public class CameraScript : MonoBehaviour {

    Camera mainCam;
    public Transform target;
    public float distance = 15.0f;
    public float cameraY = 1.0f;

    // Update is called once per frame
    void Update () {
        Vector3 pos = transform.position;
        pos.z = target.position.z - distance;
        pos.x = target.position.x + 18;
    }

    void LateUpdate () {
        mainCam = Camera.main;
        Vector3 temp = mainCam.transform.position;
        temp.y = cameraY;
    }
}

我的控件类如下所示:

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

public class Controls : MonoBehaviour {

    public float speed = 8.0f;
    public float jumpspeed = 20.5f;
    public float gravity = 20.0f;
    Vector3 moveDirection = Vector3.zero;

    // Update is called once per frame
    void Update () {
        CharacterController controller = GetComponent<CharacterController>();
        if(controller.isGrounded) {
            moveDirection = new Vector3(0, 0, Input.GetAxis("Horizontal") + 3);
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;
        }

        if(Input.GetButtonDown("Jump")) {
            moveDirection.y += jumpspeed;
        }else{
            if(Input.GetButtonDown("Jump")){
                moveDirection.y += jumpspeed;
            }
        }

        moveDirection.y -= gravity * Time.deltaTime;
        controller.Move(moveDirection * Time.deltaTime);
    }
}

老实说,我不知道我在这里做错了什么。我用这个教程作为参考:

https://www.youtube.com/watch?v=O0CxA3I2eYQ

希望有人能找出问题所在!

截图

场景

场景播放(应跟随火箭并被放大)

主摄像头检查器视图

火箭队

【问题讨论】:

  • 我将首先描述您遇到的实际问题......
  • @RobIII 当然。我加了一些煮沸

标签: c# unity3d


【解决方案1】:

您没有在脚本中的任何位置设置摄像机位置,您只是复制了摄像机位置并将其放入pos 变量中。然后,您需要将相机位置设置为等于您的变量。

这应该就是你所需要的:

void LateUpdate()
{
    Vector3 pos = target.transform.position;
    pos.z = target.position.z - distance;
    pos.x = target.position.x + 18;
    Camera.main.transform.position = pos;
}

【讨论】:

  • 你在Update函数中也做了类似的修正。
  • 谢谢老哥.. 更新函数有什么错误?
  • 更新中的东西可以删除
  • 我的意思是你不需要 Update 和 LateUpdate。你所需要的就是我上面的东西
【解决方案2】:

根据信息很难判断。但我的第一个猜测是你没有将相机连接到火箭并适当地分配变量。

在 Unity 中,您可以将相机拖到火箭上,这样相机就会成为火箭的子对象。

【讨论】:

  • 你需要什么才能给出正确的答案?我已将火箭附加到统一检查器内的目标变量。
  • 说明问题所在。相机根本就不动吗?你正在经历什么行为?可能包括统一层次结构的屏幕截图。还要确保您已将脚本附加到适当的对象。
  • 查看更新的问题。它不动。它应该与火箭一起移动。
【解决方案3】:

以下是要遵循的步骤:

1- 将火箭拖到现场

2- 创建一个相机并将其拖动为火箭的孩子

3- 将相机放置在您想要面对火箭的任何位置(如屏幕截图中的位置)

4- 将火箭保存为预制件并在每次要发射火箭时将其实例化,相机将连接到火箭。

上周我在火箭发射器上做了这个,火箭被发射,摄像机跟随它直到它爆炸

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多