Страница 1 из 2

Offset Камеры [РЕШЕНО]

СообщениеДобавлено: 12 мар 2018, 14:47
Ivan74
Доброго времени суток!
Други, поделитесь дельным советом, а то и строчкой кода. :)
Делаю 2d Side Scroller. Загвоздка в слежении камеры за персонажем.
Камера перспективная, с Offset-ом относительно перса по «у» = 2, по «х» пусть будет 0
Движение камеры кодом:
public Transform target;
Vector3 velocity = Vector3.zero;
public float smoothTime = 1;

void Update ()
{
Vector3 TargetPos = target.position;

TargetPos.z = transform.position.z;
TargetPos.y = transform.position.y;

Vector3 newPos = Vector3.SmoothDamp(transform.position, TargetPos, ref velocity, smoothTime);
transform.position = newPos;

}
}
Суть.
Есть два варианта движения камеры:
1. Камера следит только за горизонтальным передвижением перса (прыжки и подъёмы/спуски НЕ смещают вид камеры).
2. Камера следит как за горизонтальным, так и за вертикальным перемещением (камера «строго» следует за персом (учитывая прыжки и подъёмы/спуски)).
И вот тут-то, и хотелось бы (очень) сделать 3-й вариант, а именно:
что-то вроде «динамического Оffset-а» по оси «у».
Т.е. в зависимости от высоты подъёма персонажа (на холмы и проч.) offset камеры по «у» постепенно бы приходил к нулю (от изначального у=2), а то и вовсе уходил в минус (на какой-нибудь вершине).

Re: Offset Камеры

СообщениеДобавлено: 21 мар 2018, 00:22
Ivan74
Неужели ни у кого никаких мыслей, или желания?..

Re: Offset Камеры

СообщениеДобавлено: 21 мар 2018, 00:29
waruiyume
Попробуйте "Cinemachine" может понравится, писали, что в неё что-то специально для 2д добавляли.

Re: Offset Камеры

СообщениеДобавлено: 21 мар 2018, 00:30
1max1
Сделай зависимость от высоты, что то в таком роде
y = 2 - (currentHeight / maxHeight) * 2

Re: Offset Камеры

СообщениеДобавлено: 22 мар 2018, 20:12
Ivan74
waruiyume писал(а):Попробуйте "Cinemachine" может понравится, писали, что в неё что-то специально для 2д добавляли.


Видел эту штуку, и в 2d в частности. Просто неохота включать в проект ничего лишнего (не настолько у меня там всё наворочено :) ). Да и решение (по ощущениям) не из таких уж и сложных, просто не сообразится никак. Деревянненький я в скриптах :) , вот и решил через форум попробовать.
В любом случае - спасибо!

Re: Offset Камеры

СообщениеДобавлено: 22 мар 2018, 20:21
Ivan74
1max1 писал(а):Сделай зависимость от высоты, что то в таком роде
y = 2 - (currentHeight / maxHeight) * 2


Спасибо за совет! Буду пробовать.
Я так понял: этими же переменными можно и ограничить движение камеры по у?

Re: Offset Камеры

СообщениеДобавлено: 22 мар 2018, 22:43
1max1
Это простая относительная зависимость от высоты, чем больше высота тем меньше "у"

Re: Offset Камеры

СообщениеДобавлено: 28 мар 2018, 01:43
Ivan74
1max1 писал(а):Это простая относительная зависимость от высоты, чем больше высота тем меньше "у"


Сделал вроде. И даже работает! :D

Дружище глянь пж, что да как. А то, я в скриптах не силён, может напутал чего.


Синтаксис:
Используется csharp
{
    public Transform target;
    Vector3 velocity = Vector3.zero;
    public float smoothTime = 1;

    public float currentHeight;
    public float maxHeight = 3;

    public float Yoffset;                    // Позиция камеры по "у" (выставляется в инспекторе)
    public float dynamicOffset;              // Тот самый "динамический" offset

    // Update is called once per frame
    void Update()
    {
        currentHeight = target.position.y;   // Текущая "у"-позиция (высота) персонажа

        dynamicOffset = Yoffset + (currentHeight / maxHeight) * 2;                                       // Зависимость от высоты

        Vector3 TargetPos = new Vector3(target.position.x, dynamicOffset, transform.position.z);         // Назначение х,у,z для TargetPos

        Vector3 newPos = Vector3.SmoothDamp(transform.position, TargetPos, ref velocity, smoothTime);    // Позиция камеры относительно персонажа
        transform.position = newPos;
    }
}

Re: Offset Камеры

СообщениеДобавлено: 28 мар 2018, 07:13
1max1
Синтаксис:
Используется csharp
dynamicOffset = Yoffset + (currentHeight / maxHeight) * Yoffset;
 

Надеюсь в инспекторе ты Yoffset не поставишь больше, чем maxHeight

Re: Offset Камеры

СообщениеДобавлено: 28 мар 2018, 10:15
Ivan74
[quote="1max1"]
Синтаксис:
Используется csharp
dynamicOffset = Yoffset + (currentHeight / maxHeight) * Yoffset;
 


Не, так не работает... Камера намертво привязывается к "у".

Re: Offset Камеры

СообщениеДобавлено: 28 мар 2018, 12:05
1max1
Значит ты не правильно понял мою идею.

Re: Offset Камеры

СообщениеДобавлено: 28 мар 2018, 13:43
Ivan74
1max1 писал(а):Значит ты не правильно понял мою идею.


А подробнее никак? Что за идея?
Я же писал: (Yoffset + (currentHeight / maxHeight) * 2) - работает как надо. Просто с векторами путался поначалу, вот и попросил глянуть скрипт.

Re: Offset Камеры

СообщениеДобавлено: 28 мар 2018, 14:06
1max1
А, да, я на знак "+" не обратил внимание просто)

Re: Offset Камеры

СообщениеДобавлено: 28 мар 2018, 15:53
Ivan74
Ну, вроде всё норм. :)
А как закрыть тему, с пометкой решено?

Re: Offset Камеры

СообщениеДобавлено: 28 мар 2018, 16:00
1max1
Никак наверное, просто в название темы префикс добавь [Решено] :D