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

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

СообщениеДобавлено: 15 май 2017, 15:08
T1m0the0S
Ребят, всем доброго времени суток.

Хотел сделать игрульку с видом сверху (ну почти) и в задумке камера вращается вокруг персонажа. Как заставить текстурку смотреть на камеру? В перспективе игроков будет больше 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
}
}
 

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

СообщениеДобавлено: 15 май 2017, 15:28
Valentinus
саму камеру можете добавить к голове да и все :)

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

СообщениеДобавлено: 15 май 2017, 18:05
waruiyume
В перспективе игроков будет больше 1го и соответственно камер больше.

Не будет, в сетевых играх такого не бывает ;)

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

СообщениеДобавлено: 17 май 2017, 07:12
T1m0the0S
Valentinus писал(а):саму камеру можете добавить к голове да и все :)

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

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

СообщениеДобавлено: 17 май 2017, 07:30
samana
А всякие методы на подобии LookAt могут помочь?

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

СообщениеДобавлено: 17 май 2017, 08:20
Valentinus
T1m0the0S писал(а):
Valentinus писал(а):саму камеру можете добавить к голове да и все :)

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

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

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

СообщениеДобавлено: 17 май 2017, 08:34
T1m0the0S
Valentinus писал(а):
T1m0the0S писал(а):
Valentinus писал(а):саму камеру можете добавить к голове да и все :)

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

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

У меня не по камере вопрос, а про то как заставить текстуру (плосткость) смотреть своей нормалью на камеру. Для начала в синглплеере.

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

СообщениеДобавлено: 17 май 2017, 08:37
T1m0the0S
samana писал(а):А всякие методы на подобии LookAt могут помочь?

Как Вы себе это представляете? Вот как Я - скажем 50 деревьев на экране и каждому посылать (ну или в Update() засунуть) метод LookAt главная камера? Ох и нехило так фпс это просадит при изобилии спрайтов на экране.

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

СообщениеДобавлено: 17 май 2017, 08:49
jetyb
ну 50 деревьев не просадят FPS. Поворачивать спрайт можно в методе OnPreRender (вызывается для каждой камеры рендерящей каждый объект) определяя текущую камеру через Camera.current

Ну а если серьезно, автоповорот спрайта делается через шейдер.