Map 3D sphere

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Warcza
Messages : 160
Inscription : 18 Fév 2016 20:49

Map 3D sphere

Message par Warcza » 29 Sep 2016 11:43

Bonjour bonjour,

J'aurais besoin de conseil / d'aide par rapport à un système de map 3D en forme de sphere.
Si la map est en 3D et en sphère c'est du au fais que le joueur ce trouve sur une petite planète (logique :-D).
J'ai pas réussi à trouver des sujets avec ce genre de map 3D sphere sur d'autres forum, du coup je demande conseil ici :) .

Y a pas si longtemps j'ai du faire une map 2D, et j'ai voulue donc appliqué à peut près le même système pour placer le joueur sur la map.
A savoir :
Prendre la position du joueur sur la map.
Prendre la proportion entre la taille du monde et la taille de la map.
Appliquer la proportion avec la position du joueur pour le placer l'icone du joueur sur la map.

Dans mon cas je rencontre quelques problèmes comme: l'icône du joueur va beaucoup trop loin de la surface de la map.
Du coup, je voulais savoir si déjà, je devais persister avec cette méthode ? ou si y a plus simple / mieux ?
(╯°□°)╯︵ ┻━┻

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Map 3D sphere

Message par Alesk » 29 Sep 2016 17:21

Ton explication n'est pas super claire... peux-tu reformuler ou illustrer avec quelques images stp ?

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Map 3D sphere

Message par ZJP » 29 Sep 2016 23:06

Alesk a écrit :Ton explication n'est pas super claire... peux-tu reformuler ou illustrer avec quelques images stp ?
Reporter la position d'un joueur évoluant dans une map "classique" sur une map 3D... j'imagine. :mrgreen:
Une sorte de XYZ vers Latitude/Longitude ou XYZ Plane vers XYZ Sphérique?!!!

Warcza
Messages : 160
Inscription : 18 Fév 2016 20:49

Re: Map 3D sphere

Message par Warcza » 30 Sep 2016 09:34

En gros j'aimerais reporter le joueur qui est sur un monde en sphère, donc on peut faire le tour etc, sur une map 3D qui est également une sphère du coup et au quelle on lui rajoute une texture représentant le monde, pour faire la carte.

Pour l'instant niveau code j'ai fais ça :

Code : Tout sélectionner

// Ratio entre le diametre du monde et celle de la map
ratioMM = sphereRadius / Moon.GetComponent<MeshRenderer> ( ).bounds.extents.magnitude;

// Placer l'icone du joueur en fonction de ce ratio
Vector3 posPlayer = new Vector3 ( getThisPos.position.x * ratioMM, getThisPos.position.y * ratioMM, getThisPos.position.z * ratioMM );

//Si l'icone du joueur est à l'interieur de la map 
	Ray ray = new Ray ( posPlayer, thisSphereMap.localPosition );
	float distance;
	if ( CheckRaySphere ( ray, thisSphereMap.localPosition, sphereRadius, out distance ) )
	{
		Vector3 position = ray.GetPoint ( distance );
		Vector3 normal = ( position - thisSphereMap.localPosition ).normalized;
		Quaternion rotation = Quaternion.LookRotation ( normal );

		thisPlayer.localPosition = position;
		thisPlayer.localRotation = rotation ;
	}
Du coup j'ai actuellement 2 problèmes, de un je dois manuellement donner la valeur du diamètre de la map car sinon je n'arrive pas à placer le joueur sur la sphère, exemple :
Pour que le joueur soit sur la map il doit avoir au moins une valeur au alentour de 100 sur une des variables de position alors que si je prend le diamètre de la map, la position du joueur va être au alentour de 4-8 sur les 3 variable.

Pour la hiérarchie, j'ai un moonModel, c'est l'élément que je bouge pour faire bouger la map / joueur, etc. En dessous j'ai donc le joueur, la map (qui à un scale d'environ 200 si ça y a besoin de cette info) et de deux autres éléments qui sont d'autres éléments graphique pour la carte.

J'ai également une autre question, la map à également une rotation par défaut, que je ne peux pas remettre à 0 si ça casse avec les deux autres éléments pour la carte.
Du coup il faut que j'applique un déplacement de l'icone du joueur par rapport à cette rotation.
Je pense qu'il faut faire un truc du genre, mais je sais pas exactement ce que je doit mettre comme vector (up / right, etc) :

Code : Tout sélectionner

posPlayer = ( Quaternion.AngleAxis ( getRotate.x, Vector3.up) * Quaternion.AngleAxis ( getRotate.y, Vector3.right ) * Quaternion.AngleAxis ( getRotate.z, Vector3.forward ) ) * posPlayer;
Je précise juste que si je met la position de la map et que je n'applique pas ce morceau de code juste au dessus, l'icone du joueur est au bon endroit sur la map (mais lorsqu'il ce déplace en fonction d'ou il est sur la map, le mouvement est inversé du à la valeur de la rotation j'imagine).

En espérant que ça soit plus clair pour vous et non plus confus ;s
(╯°□°)╯︵ ┻━┻

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6224
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Map 3D sphere

Message par boubouk50 » 30 Sep 2016 09:43

Il vaut mieux partir sur des bases saines. Refais ton monde correctement, avec les bonnes échelles, sans rotation, et tu n'auras pas à galérer sur les transformations.
Oui, c'est relou, mais c'est un mal pour un bien, un mal nécessaire.
Après ça, peut-être que tes problèmes seront plus faciles à résoudre.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Map 3D sphere

Message par Alesk » 30 Sep 2016 11:47

Nan, c'est toujours pas clair ...
Je ne vois pas où est la difficulté si le niveau réel et la minimap sont tous les deux des sphères ... Il y a forcément une subtilité en plus, c'est pourquoi une image serait fort utile pour mieux comprendre où ça coince.

Et +1 avec Boubouk

Répondre

Revenir vers « Unity le logiciel »