Как заставить спрайт смотреть на игрока лицом? [РЕШЕНО]

Общие вопросы о Unity3D

Как заставить спрайт смотреть на игрока лицом? [РЕШЕНО]

Сообщение T1m0the0S 15 май 2017, 15:08

Ребят, всем доброго времени суток.

Хотел сделать игрульку с видом сверху (ну почти) и в задумке камера вращается вокруг персонажа. Как заставить текстурку смотреть на камеру? В перспективе игроков будет больше 1го и соответственно камер больше. Танцы с бубном не помогают.

Игра будет в 3д, но полностью рисованная, т.е. без использования моделей, только текстуры.

З.Ы. Хочу сделать эдакий клон неголодайки (don't starve). так вот там именно такая реализация.

Изображение
Изображение

[Решено шейдером]
Синтаксис:
Используется glsl
Shader "Custom/BillboardAlpha" {
Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        }

SubShader {
        Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }

        Pass{
                Cull Off
                ZTest Always
                Blend SrcAlpha OneMinusSrcAlpha

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

sampler2D _MainTex;

struct v2f {
        float4 pos:SV_POSITION;
        float2 texc:TEXCOORD0;
};

v2f vert(appdata_base v)
{
        v2f o;
        float4 ori=mul(UNITY_MATRIX_MV,float4(0,0,0,1));
        float4 vt=v.vertex;
        vt.y=vt.z;
        vt.z=0;


        vt.xyz+=ori.xyz;//result is vt.z==ori.z ,so the distance to camera keeped ,and screen size keeped
        o.pos=mul(UNITY_MATRIX_P,vt);

        o.texc=v.texcoord;
        return o;
}

float4 frag(v2f i):COLOR
{
        return tex2D(_MainTex,i.texc);
}
ENDCG
}//endpass
}
}
 
Последний раз редактировалось T1m0the0S 19 май 2017, 08:57, всего редактировалось 3 раз(а).
Если долго мучаться, что-нибудь получится )
Аватара пользователя
T1m0the0S
UNец
 
Сообщения: 23
Зарегистрирован: 07 дек 2013, 01:48

Re: Как заставить спрайт смотреть на игрока лицом?

Сообщение Valentinus 15 май 2017, 15:28

саму камеру можете добавить к голове да и все :)
другое мое творчество: samlib.ru/u/us_w/
Аватара пользователя
Valentinus
Старожил
 
Сообщения: 889
Зарегистрирован: 24 мар 2017, 18:33

Re: Как заставить спрайт смотреть на игрока лицом?

Сообщение waruiyume 15 май 2017, 18:05

В перспективе игроков будет больше 1го и соответственно камер больше.

Не будет, в сетевых играх такого не бывает ;)
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как заставить спрайт смотреть на игрока лицом?

Сообщение T1m0the0S 17 май 2017, 07:12

Valentinus писал(а):саму камеру можете добавить к голове да и все :)

У меня другая реализация. Камера висит над персонажем. Примерно как в 2.5д. И тут вопрос не в камере и ее расположении.
Если долго мучаться, что-нибудь получится )
Аватара пользователя
T1m0the0S
UNец
 
Сообщения: 23
Зарегистрирован: 07 дек 2013, 01:48

Re: Как заставить спрайт смотреть на игрока лицом?

Сообщение samana 17 май 2017, 07:30

А всякие методы на подобии LookAt могут помочь?
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Как заставить спрайт смотреть на игрока лицом?

Сообщение Valentinus 17 май 2017, 08:20

T1m0the0S писал(а):
Valentinus писал(а):саму камеру можете добавить к голове да и все :)

У меня другая реализация. Камера висит над персонажем. Примерно как в 2.5д. И тут вопрос не в камере и ее расположении.

так она и будет висеть, вы же можете ее поместить на любом расстоянии/выстоте/угле над головой. она будет как дочерний объект к голове, и всегда будет показывать игрока под нужным углом.
другое мое творчество: samlib.ru/u/us_w/
Аватара пользователя
Valentinus
Старожил
 
Сообщения: 889
Зарегистрирован: 24 мар 2017, 18:33

Re: Как заставить спрайт смотреть на игрока лицом?

Сообщение T1m0the0S 17 май 2017, 08:34

Valentinus писал(а):
T1m0the0S писал(а):
Valentinus писал(а):саму камеру можете добавить к голове да и все :)

У меня другая реализация. Камера висит над персонажем. Примерно как в 2.5д. И тут вопрос не в камере и ее расположении.

так она и будет висеть, вы же можете ее поместить на любом расстоянии/выстоте/угле над головой. она будет как дочерний объект к голове, и всегда будет показывать игрока под нужным углом.

У меня не по камере вопрос, а про то как заставить текстуру (плосткость) смотреть своей нормалью на камеру. Для начала в синглплеере.
Если долго мучаться, что-нибудь получится )
Аватара пользователя
T1m0the0S
UNец
 
Сообщения: 23
Зарегистрирован: 07 дек 2013, 01:48

Re: Как заставить спрайт смотреть на игрока лицом?

Сообщение T1m0the0S 17 май 2017, 08:37

samana писал(а):А всякие методы на подобии LookAt могут помочь?

Как Вы себе это представляете? Вот как Я - скажем 50 деревьев на экране и каждому посылать (ну или в Update() засунуть) метод LookAt главная камера? Ох и нехило так фпс это просадит при изобилии спрайтов на экране.
Если долго мучаться, что-нибудь получится )
Аватара пользователя
T1m0the0S
UNец
 
Сообщения: 23
Зарегистрирован: 07 дек 2013, 01:48

Re: Как заставить спрайт смотреть на игрока лицом?

Сообщение jetyb 17 май 2017, 08:49

ну 50 деревьев не просадят FPS. Поворачивать спрайт можно в методе OnPreRender (вызывается для каждой камеры рендерящей каждый объект) определяя текущую камеру через Camera.current

Ну а если серьезно, автоповорот спрайта делается через шейдер.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 8