Route sinueuse !!!

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Route sinueuse !!!

Message par wesh57 » 10 Oct 2020 00:17

Bonjour,
Alors voilà j'ai une demande assez spéciale mais je me suis dit que vous pourriez m'aider !!!
Bref, dans mon projet je crée une sorte de route à l'infini, mon projet consiste en un "runner game".
Mais voilà la route en question est en ligne droite continuellement et à l'infini, sans jamais qu'elle ne tourne à gauche ni à droite ce qui rend le jeu pas très amusant. Je me suis alors demandé comment casser cette redondance et j'ai trouvé :-D :-D ...... mais ..... je ne sais pas comment mi prendre :(

Alors ce que j'aimerais c'est créé une sorte "d'effet d'optique" quelque mètre devant le joueur. Qui rendrait la route un peu (ou beaucoup) sinueuse. Les routes seront toujours droites mais aux yeux du joueur elles ne le seront pas.
Bon je vais vous expliquer avec des dessins (même si je sais pas dessiner :langue3: ) parce que impossible à expliquer sinon ^^



e1.png
Ici c'est ma route de base normal
e1.png (95.35 Kio) Consulté 2235 fois
e3.png
Et j'aimerais avoir un truc comme sa mais avec une effet plus puissant
e3.png (92.5 Kio) Consulté 2235 fois
e2.png
ou comme ceci mais un peut plus long, la ligne rouge c'est le moment ou l'effet s'arrêt et la route redevient normal
e2.png (136.7 Kio) Consulté 2235 fois

Alors je sais que mon idée est un peu flou et incompréhensible mais je n'ai pas d'autre moyen de l'expliquer. AH si encore un exemple (une bonne référence) vous voyer dans dbz le chemin qu'empreint Goku pour aller chez Kaoi j'aimerais avoir un peu prêt la même chose : pour plus d'information Google Image -> dbz chemin du serpent.

Alors voilà j'ai essayer d'expliquer de mon mieux (un peu complexe) mais j'espère que vous avez compris et que vous pourrez m'aider :super: :super:

MERCI

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Route sinueuse !!!

Message par Max » 10 Oct 2020 14:22

Bonjour,

c'est un sujet sur lequel je n'ai jamais vraiment bossé.
Il doit y avoir plusieurs approches. Soit par shader (souvent employé pour le système de curved world, genre celui-ci du coté d'Unity Learn).
Autre technique, les déformations de mesh, un peu comme fait au sein de cet asset.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
BassToss
Messages : 65
Inscription : 17 Mai 2019 06:01
Localisation : Cahors
Contact :

Re: Route sinueuse !!!

Message par BassToss » 10 Oct 2020 22:42

Salut!
"Sprite shape" est un outil puissant qui répondrait surement à tes besoins et il peut être utilisé par le code en procédural.
https://www.esprit-unity.fr/creer-des-n ... ite-shape/
Voici aussi un lien qui pourrait t'intéresser:
https://connect.unity.com/p/ikeyana-pro ... ape-levels
Bon dev'!
On s'fait un petit Canvas pour l'apéro?

Pour tester:http://www.starsheepstudio.com
Notre page:https://www.facebook.com/starsheepstudio

wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Re: Route sinueuse !!!

Message par wesh57 » 10 Oct 2020 23:13

Merciiiiiiiiiiiii pour vos réponses (désolé Max j'avais oublié de te remercier tellement j'étais focus sur le projet) en tout cas je vous remercie infiniment vous êtes les boss, je vais aller regarder de ce pas ce que vous avez mis en tout cas celui de BassToss parce que j'ai déjà regardé celui de Max (thx encore :super: :super: ). Je reviendrais vers vous pour vous dire où j'en suis dans le projet et si ça a marché. ::d ::d

wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Re: Route sinueuse !!!

Message par wesh57 » 13 Oct 2020 22:44

Re, je reviens vers vous car je bloque sur un truc, alors ça fait 2 jours que je regarde les shaders et ce que vous m'avez donné ma aidé énormément.
Alors pour faire court j'ai utilisé le même procédé du 1er lien de Max (https://assetstore.unity.com/packages/e ... 01#content)

Tout marche parfaitement et comme je voulais (enfin oui et non car il ne le fait que verticalement mais osef de sa je règlerai ce problème plus tard, mais j'ai un petit souci alors je vais être concis, pour utiliser l'effet je dois mettre le shader (material) sur chaque GameObject or sur certains de mes GameObject je dois mettre une certaine couleur comme par exemple la route où je met une nouvelle couleur à chaque fois :

Ici pour chaque route (qui fait ~12 scale en x) je lui met soit une couleur soit le shader (les deux en même temps ne marche pas la route est toujours blanche)

Code : Tout sélectionner

		public Material matCurved;
		.....
		......
		
		//Dans une fonction:
			//comp == route
			rendRoad = comp.GetComponent<MeshRenderer>();
                	 
                	//Couleur de chaque route
                	rendRoad.material.SetColor("_Color", Color.HSVToRGB(colorRoad, 1, 1));

                	//Le shader
               		//rendRoad.material = matCurved;

Voici les exemples:

Si je décommente le 1er (ici le ciel utilise la couleur de la route la plus devant):

Code : Tout sélectionner

rendRoad.material.SetColor("_Color", Color.HSVToRGB(colorRoad, 1, 1));
f1.PNG
f1.PNG (15.91 Kio) Consulté 2139 fois

Si je décommente le 2ème (ici le ciel utilise la couleur de la route la plus devant donc blanc):

Code : Tout sélectionner

 rendRoad.material = matCurved;
f2.PNG
f2.PNG (12.43 Kio) Consulté 2139 fois
Voilà où j'en suis le shader marche bien or moi j'aimerais bien pouvoir mettre des couleurs sur mes objets

ps: j'ai déjà essayé de mettre une couleur avec le shader:
1)Je n'arrive pas à l'utiliser avec l'effet curved
2)La couleur avec le shader est fade et pas belle

J'aimerais donc savoir s'il était possible de mettre un shader et une couleur sur un objet (j'aimerais utiliser le SetColor() comme dans le bout de code)


Voila le shader:
CurvedUnlit.shader

Code : Tout sélectionner

Shader "Unlit/CurvedUnlit"
{ 
	Properties
	{
		_MainTex("Texture", 2D) = "white" {}
	}
		SubShader
	{
		Tags { "RenderType" = "Opaque" }
		LOD 100

		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			// make fog work 
			#pragma multi_compile_fog

			#include "CurvedCode.cginc"

			ENDCG
		}
	}
}
CurvedCode.cginc

Code : Tout sélectionner

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'


#include "UnityCG.cginc"

struct appdata
{
	float4 vertex : POSITION;
	float2 uv : TEXCOORD0;
	float4 color : COLOR;
};

struct v2f
{
	float2 uv : TEXCOORD0;
	UNITY_FOG_COORDS(1)
	float4 color : TEXCOORD2;
	float4 vertex : SV_POSITION;
};

sampler2D _MainTex;
float4 _MainTex_ST;
float _CurveStrength;


v2f vert(appdata v)
{
	v2f o;

	float _Horizon = 100.0f;
	float _FadeDist = 50.0f;

	o.vertex = UnityObjectToClipPos(v.vertex);


	float dist = UNITY_Z_0_FAR_FROM_CLIPSPACE(o.vertex.z);

	o.vertex.y -= _CurveStrength * dist * dist * _ProjectionParams.x;

	o.uv = TRANSFORM_TEX(v.uv, _MainTex);

	o.color = v.color;

	UNITY_TRANSFER_FOG(o, o.vertex);
	return o;
}

fixed4 frag(v2f i) : SV_Target
{
	// sample the texture
	fixed4 col = tex2D(_MainTex, i.uv) * i.color;
	// apply fog
	UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}

Merciiiiiiiiiiiiiii :taré1: :taré1:

Répondre

Revenir vers « Unity le logiciel »