Пятница, 15 Ноября 2024, 04:57

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Ограничение камеры
DekSterДата: Среда, 26 Сентября 2018, 21:26 | Сообщение # 1
был не раз
Сейчас нет на сайте
Здравствуйте, у меня возникла проблема. Написал скрипт для камеры он работает но камера выходит за пределы сцены, то есть показывает часть фона, как выставить границы камеры не выходящие за пределы уровня?
Код

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

public class CameraController : MonoBehaviour
{
    public float damping = 1.5f;
    public Vector2 offset = new Vector2(2f, 1f);
    public bool faceLeft;
    private Transform player;
    private int lastX;

    void Start()
    {
        offset = new Vector2(Mathf.Abs(offset.x), offset.y);
        FindPlayer(faceLeft);
    }

    public void FindPlayer(bool playerFaceLeft)
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;
        lastX = Mathf.RoundToInt(player.position.x);
        if (playerFaceLeft)
        {
            transform.position = new Vector3(player.position.x - offset.x, player.position.y + offset.y, transform.position.z);
        }
        else
        {
            transform.position = new Vector3(player.position.x + offset.x, player.position.y + offset.y, transform.position.z);
        }
    }

    void Update()
    {
        if (player)
        {
            int currentX = Mathf.RoundToInt(player.position.x);
            if (currentX > lastX) faceLeft = false; else if (currentX < lastX) faceLeft = true;
            lastX = Mathf.RoundToInt(player.position.x);

            Vector3 target;
            if (faceLeft)
            {
                target = new Vector3(player.position.x - offset.x, player.position.y + offset.y, transform.position.z);
            }
            else
            {
                target = new Vector3(player.position.x + offset.x, player.position.y + offset.y, transform.position.z);
            }
            Vector3 currentPosition = Vector3.Lerp(transform.position, target, damping * Time.deltaTime);
            transform.position = currentPosition;
        }
    }
}
DivESДата: Четверг, 27 Сентября 2018, 00:19 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
DekSter, за пределы сцены, то есть?
Я писал похожий скрипт, только для обхождения камерой препятствий (камера от третьего лица), но не на Unity, к сожалению.
Я реализовывал так:
Создал луч, исходящий из точки, на которую смотрит камера и идущий в центр камеры (например, если камера смотрит на куб, то луч исходит из центра куба в центр камеры).
Далее следует проверка: если луч ни с чем не пересекается, то всё в порядке, иначе - берём координаты пересечения этого луча и возникшего препятствия и присваиваем их нашей камере.
Если препятствие пропало - возвращаем камеру на свою позицию.
Таким образом, объект, на который смотрит камера, никогда не будет загорожен чем бы то ни было ^_^
Конкретно в твоём случае, можно сделать определённые границы (лоу-поли невидимые примитивы), на которые реагировал бы скрипт и не позволял бы камере выйти за пределы.
Надеюсь, что-либо из этой идей подчерпнёшь! Или же описывай ситуацию подробнее, вместе подумаем над решением! :)
DekSterДата: Четверг, 27 Сентября 2018, 09:32 | Сообщение # 3
был не раз
Сейчас нет на сайте
У меня камера двигается за персонажем, но при этом охватывает часть фона, мне нужно чтобы камера охватывала только объекты уровня не выходя за их пределы
RengДата: Суббота, 29 Сентября 2018, 23:53 | Сообщение # 4
был не раз
Сейчас нет на сайте
В скрипте можно добавить 4 вектора отвечающие за границы комнаты.
Задать их значения в инспекторе.

А в скрипте сравнивать координаты камеры с этими 4-мя точками.
  • Страница 1 из 1
  • 1
Поиск:

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