Среда, 18 Декабря 2024, 17:24

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Движение камеры
Andzi23zДата: Четверг, 25 Августа 2016, 20:22 | Сообщение # 1
был не раз
Сейчас нет на сайте
Нашел в интернете скрипт для камеры , для 2D игры, который следит за игроком. Можете объяснить как сделать чтобы камера во время движения за игроком по оси Y , не двигалась по оси X.

Добавлено (25 августа 2016, 20:22)
---------------------------------------------
Вот код:
Код
using UnityEngine;
using System.Collections;

public class FollowCamera : MonoBehaviour {

public float interpVelocity;
public float minDistance;
public float followDistance;
public GameObject target;
public Vector3 offset;
Vector3 targetPos;
// Use this for initialization
void Start () {
targetPos = transform.position;
}

// Update is called once per frame
void FixedUpdate () {
if (target)
{
Vector3 posNoZ = transform.position;
posNoZ.z = target.transform.position.z;

Vector3 targetDirection = (target.transform.position - posNoZ);

interpVelocity = targetDirection.magnitude *5f;

targetPos = transform.position + (targetDirection.normalized * interpVelocity * Time.deltaTime);

transform.position = Vector3.Lerp( transform.position, targetPos, 0.125f);

}

}
}
AkopovДата: Пятница, 26 Августа 2016, 01:42 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Думаю, тема должна находиться в этом разделе. Да и название её не соответствует регламенту.



Сообщение отредактировал Akopov - Пятница, 26 Августа 2016, 02:17
LertmindДата: Пятница, 26 Августа 2016, 03:33 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
* Для слежения лучше использовать Vector3.SmoothDamp(), в примере документации как раз это. Двигать камеру лучше в LateUpdate(), тут пример.
* В твоём коде public Vector3 offset не используется, хотя предполагается, что это указывает на смещение относительно центра target.
* Чтобы камера не двигалась, нужно её не двигать. Перед или после posNoZ.z = target.transform.position.z; добавляешь:
Код
posNoZ.x = target.transform.position.x;
Но раз осталась одна переменная, быстрее будет не использовать векторы. Как-то так, код не проверял:
Код
if (target)
{
    float posY = transform.position.y;
    float targetDirectionY = (target.transform.position.y - posY);
    float interpVelocityY = targetDirectionY * 5f;
    //interpVelocity = new Vector3(0, interpVelocityY, 0);
    float targetPosY = posY + interpVelocityY * Time.deltaTime;
    //targetPos = new Vector3(0, targetPosY, 0);
    transform.position = new Vector3(
          transform.position.x
        , Mathf.Lerp(posY, targetPosY, 0.125f)
        , transform.position.z
    );
}
Andzi23zДата: Пятница, 26 Августа 2016, 16:12 | Сообщение # 4
был не раз
Сейчас нет на сайте
Lertmind, Спасибо.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг