J'ai essayé de créer un effet de type "fake planet" 2D en utilisant des shaders, mais le résultat que j'ai obtenu, même s'il fonctionne, n'est pas génial.Unity 2D Planet/Curved World Shader
void vert(inout appdata_full v)
{
//Get vertex world coordinates
float4 worldV = mul(unity_ObjectToWorld, v.vertex);
//Get target coordinates relative to vertex world
worldV.xyz -= _TargetPos.xyz;
//Transform vertex based on x distance from target
worldV = float4(0.0f, (worldV.x * worldV.x) * -_Curvature, 0.0f, 0.0f);
//Add this offset to vertex
v.vertex += mul(unity_WorldToObject, worldV);
}
Le code ci-dessus est la fonction de sommet que j'utilise pour produire cet effet, mais comme il ne compense que les sommets du Y basés sur X du joueur, il produit une distorsion près du bord de l'écran. Il regarde juste, puisque toutes les lignes verticales restent complètement verticales.
Ce que je voudrais à faire est de faire apparaître plus comme une planète:
Mais je ne sais pas comment j'aller à ce sujet.
EDIT: Je ai essayé pendant des heures pour comprendre cela, et je pensais que je l'avais pensé à elle:
.
Mais non, cela n'a pas fonctionné. Le niveau semblait juste s'incurver et plonger dans des endroits aléatoires.
Merci pour votre réponse, mais je ne suis pas sûr si vous avez lu ma question complètement. Le code que vous m'avez montré est essentiellement ce que j'ai posté comme étant déjà essayé, juste avec l'axe z supplémentaire et un certain décalage. Je ne pense pas que ce soit important, car cela fonctionne assez bien quand ce que j'essaie d'accomplir semble presque impossible. – Jack
Désolé ma faute. Essayez de comprendre la dépendance entre les normales changeantes d'un monde plat à un plan courbe puis tournez par rapport au centre de la "planète" – Krajca