Как двигать камеру в бесконечной игре раннер вместе с ракетой - PullRequest
0 голосов
/ 28 июня 2018

В настоящее время у меня возникают проблемы с изменением положения основной камеры в единстве с помощью скрипта 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

Надеюсь, кто-нибудь сможет выяснить, где проблемы скрываются!

Скриншоты

Сцена

enter image description here

Сцена играет (должна следовать за ракетой и быть увеличена)

enter image description here

Инспектор основной камеры

enter image description here

TheRocket

enter image description here

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Вы нигде не указали положение камер в вашем скрипте, вы только сделали копию положения камер и поместили ее в переменную 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;
}
0 голосов
/ 28 июня 2018

Вот следующие шаги:

1- Перетащите ракету на сцену

2- Создайте камеру и перетащите ее, чтобы она стала дочерним элементом ракеты

3- Расположите камеру там, где вы хотите повернуть ракету (как показано на скриншоте)

4 - Сохраните ракету в качестве сборного и устанавливайте ее каждый раз, когда вы хотите запустить ракету, камера будет прикреплена к ракете.

Я делал это на прошлой неделе на ракетной установке, где ракета запускалась, и камера следовала за ней, пока она не взорвалась

0 голосов
/ 28 июня 2018

Трудно сказать, основываясь на информации. Но мое первое предположение состоит в том, что вы не прикрепили камеру к ракете и не присвоили переменные соответствующим образом.

В Unity вы перетаскиваете камеру на ракету, чтобы камера стала дочерним элементом ракеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...