Остановить движение камеры по оси x

Итак, у меня есть ракета (игрок), которая летит вверх по оси Y. У меня камера с этим скриптом следует за ракетой:

using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour
{
public GameObject player;
private Vector3 offset;

// Use this for initialization
void Start () 
{
    offset = transform.position;
}



// Update is called once per frame
void LateUpdate () 
{
    transform.position = player.transform.position + offset;
}
}

Как я могу остановить движение камеры по оси x? Я только хочу, чтобы он следовал за ракетой вверх по оси Y. Я попытался добавить твердое тело и заблокировать там ось X, но это не сработало. Есть идеи, как это сделать в скрипте? Благодарю вас!

P.S. Я новичок в написании сценариев, подскажите, пожалуйста, как реализовать дополнительный код.


person Anton nelson    schedule 31.08.2015    source источник


Ответы (2)


Что ж, простой способ зафиксировать вашу камеру только на одной оси — изменить код, который вы указали выше, на этот:

using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour
{
public GameObject player;
private Vector3 offset;

// Use this for initialization
void Start () 
{
    offset = transform.position;
}



// Update is called once per frame
void LateUpdate () 
{
    transform.position = new Vector(
    offset.x, player.transform.position.y + offset.y,
    offset.z);
}
}

Это должно заставить камеру двигаться только вверх/вниз вместе с ракетой, но не двигаться ни по оси x, ни по оси z. Если это не совсем то, чего вы пытались достичь, оставьте комментарий, и я посмотрю

person Steven Mills    schedule 31.08.2015
comment
Отлично, это работает! Нашел ошибку в вашем коде, в последних 5 строках вы написали новый вектор. Вам нужен новый Vector3 в Unity: P Спасибо! - person Anton nelson; 31.08.2015

RigidBody не помогает вам, потому что блокировка оси в RigidBody игнорирует только движение, вызываемое физикой Unity, вы можете использовать AddForce, если хотите обработать его с помощью RigidBody, но нет смысла делать все это. Самый простой способ - просто переопределить значение X следующим образом:

Vector3 newPosition = player.transform.position + offset;
newPosition.x = 0;
transform.position = newPosition;

Это вычисляет новую позицию, а затем просто устанавливает X в ноль (или любое другое значение, которое вы хотите), а затем устанавливает этот вектор в качестве позиции.

person Neven Ignjic    schedule 31.08.2015