Камера следит за плеером только по его оси Z Unity 3D - PullRequest
0 голосов
/ 11 декабря 2018

Я сделал скрипт ниже, чтобы камера следовала за игроком, но я не хочу, чтобы он следовал за ним по его оси X.Так что игрок должен плавно следовать только по его оси Z.Есть предложения?

Сценарий камеры:

public Transform Ball;
public float SmoothSpeed = 0.125f;
public Vector3 offset;
bool MoveCamera = true;


void Start () {

}


public void FixedUpdate () {

    if(MoveCamera == true){

        Vector3 desiredPosition = Ball.position + offset;
        Vector3 SmoothedPosition = Vector3.Lerp(transform.position, desiredPosition, SmoothSpeed);
        transform.position = SmoothedPosition;
    }


    if (transform.position.z >= 2f)
    {
        MoveCamera = false;
    }
}

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

А как насчет изменения только компонента z?

public void FixedUpdate () {

    if(MoveCamera == true){

       Vector3 desiredPosition = new Vector3(0, Ball.position.y + offset.y, Ball.position.z + offset.z);
        Vector3 SmoothedPosition = Vector3.Lerp(transform.position, desiredPosition, SmoothSpeed);
        transform.position = SmoothedPosition;
    }


    if (transform.position.z >= 2f)
    {
        MoveCamera = false;
    }
}
0 голосов
/ 10 июля 2019

Кому-нибудь в 2019 году нужна камера, чтобы сместить определенную позицию от своего 3d персонажа?Вот простое решение!Прикрепите этот скрипт к камере, за которой вы хотите следить за игроком.Выберите игрока в качестве цели в редакторе Unity.

Этот сценарий устанавливает новую позицию камеры на

(РЕДАКТИРОВАТЬ: Куда делся LaTeX?)

$v = <targetPosition.x + xOffset, targetPosition.y + yOffset, targetPosition.z + zOffset>$

Преимущества этого сценария:

  • Ориентация камеры не меняется, даже если персонаж поворачивается (поскольку камера не связана с игроком).
  • Работает независимо от положения игрока

Ограничения: - Поскольку ориентация камеры фиксирована, вам нужно убедиться, что ваш персонаж не скрыт пейзажем.- Этот стиль управления камерой лучше всего подходит для орфографической проекции от третьего лица.

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

public class CameraController : MonoBehaviour
{

    public Transform target;
    Vector3 targetPos;

    void Update()
    {
        targetPos = target.position;
        transform.position = new Vector3(targetPos.x + 10f, targetPos.y + 8.571067812f, targetPos.z - 10f);
        // transform.LookAt(target.transform);
    }
}

Мой вариант использования требовал ортогональной проекции.Ортогональные углы обычно находятся под углом склонения 30 градусов, поэтому мое смещение вернулось на 10 единиц, более чем на 10 единиц и на половину больше, чем у гипотенузы (то есть до 10 * sqrt2 * 1/2).Я также увеличил y-позицию на высоту персонажа (1,5 единицы), что, как я думал, даст лучший центр для цели камеры.Это дает смещение по оси y около 8.571067812.

0 голосов
/ 11 декабря 2018
    public gameObject toFollow;
    Vector3 camDistance;
    public void Start(){
    camDistance = toFollow.transform.position-Camera.main.position;
    }

    public void Update(){
    Vector3 following = new Vector3(Camera.main.x,Camera.main.z,toFollow.transform.position.z-Camera.main.position.z);

    Camera.main.transform.position = following;

}

Я просто скомбинировал это, так что это может потребовать нескольких настроек, но это должно привести вас туда, куда вам нужно идти.в качестве альтернативы .... вы можете добавить жесткое тело к камере, и в инспекторе отметьте поля для ограничений по осям x и y.это позволит ему двигаться только по z (если вы идете по этому маршруту, не забывайте поворачивать гравитацию и для твердого тела камеры)

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