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

Программирование на Юнити.

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

Сообщение Ivan74 12 мар 2018, 14:47

Доброго времени суток!
Други, поделитесь дельным советом, а то и строчкой кода. :)
Делаю 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), а то и вовсе уходил в минус (на какой-нибудь вершине).
Последний раз редактировалось Ivan74 28 мар 2018, 19:53, всего редактировалось 1 раз.
Ivan74
UNец
 
Сообщения: 18
Зарегистрирован: 12 мар 2018, 14:00

Re: Offset Камеры

Сообщение Ivan74 21 мар 2018, 00:22

Неужели ни у кого никаких мыслей, или желания?..
Ivan74
UNец
 
Сообщения: 18
Зарегистрирован: 12 мар 2018, 14:00

Re: Offset Камеры

Сообщение waruiyume 21 мар 2018, 00:29

Попробуйте "Cinemachine" может понравится, писали, что в неё что-то специально для 2д добавляли.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Offset Камеры

Сообщение 1max1 21 мар 2018, 00:30

Сделай зависимость от высоты, что то в таком роде
y = 2 - (currentHeight / maxHeight) * 2
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Offset Камеры

Сообщение Ivan74 22 мар 2018, 20:12

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


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

Re: Offset Камеры

Сообщение Ivan74 22 мар 2018, 20:21

1max1 писал(а):Сделай зависимость от высоты, что то в таком роде
y = 2 - (currentHeight / maxHeight) * 2


Спасибо за совет! Буду пробовать.
Я так понял: этими же переменными можно и ограничить движение камеры по у?
Ivan74
UNец
 
Сообщения: 18
Зарегистрирован: 12 мар 2018, 14:00

Re: Offset Камеры

Сообщение 1max1 22 мар 2018, 22:43

Это простая относительная зависимость от высоты, чем больше высота тем меньше "у"
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Offset Камеры

Сообщение Ivan74 28 мар 2018, 01:43

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;
    }
}
Ivan74
UNец
 
Сообщения: 18
Зарегистрирован: 12 мар 2018, 14:00

Re: Offset Камеры

Сообщение 1max1 28 мар 2018, 07:13

Синтаксис:
Используется csharp
dynamicOffset = Yoffset + (currentHeight / maxHeight) * Yoffset;
 

Надеюсь в инспекторе ты Yoffset не поставишь больше, чем maxHeight
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Offset Камеры

Сообщение Ivan74 28 мар 2018, 10:15

[quote="1max1"]
Синтаксис:
Используется csharp
dynamicOffset = Yoffset + (currentHeight / maxHeight) * Yoffset;
 


Не, так не работает... Камера намертво привязывается к "у".
Ivan74
UNец
 
Сообщения: 18
Зарегистрирован: 12 мар 2018, 14:00

Re: Offset Камеры

Сообщение 1max1 28 мар 2018, 12:05

Значит ты не правильно понял мою идею.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Offset Камеры

Сообщение Ivan74 28 мар 2018, 13:43

1max1 писал(а):Значит ты не правильно понял мою идею.


А подробнее никак? Что за идея?
Я же писал: (Yoffset + (currentHeight / maxHeight) * 2) - работает как надо. Просто с векторами путался поначалу, вот и попросил глянуть скрипт.
Ivan74
UNец
 
Сообщения: 18
Зарегистрирован: 12 мар 2018, 14:00

Re: Offset Камеры

Сообщение 1max1 28 мар 2018, 14:06

А, да, я на знак "+" не обратил внимание просто)
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Offset Камеры

Сообщение Ivan74 28 мар 2018, 15:53

Ну, вроде всё норм. :)
А как закрыть тему, с пометкой решено?
Ivan74
UNец
 
Сообщения: 18
Зарегистрирован: 12 мар 2018, 14:00

Re: Offset Камеры

Сообщение 1max1 28 мар 2018, 16:00

Никак наверное, просто в название темы префикс добавь [Решено] :D
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15