[Résolu] Comment changer de direction les axes X Y Z ?

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
WolfProg
Messages : 21
Inscription : 08 Nov 2014 11:31
Localisation : Nice

[Résolu] Comment changer de direction les axes X Y Z ?

Message par WolfProg » 22 Juil 2015 19:33

Bonjour !

(Pour le titre j'ai pas trouvé mieux expliqué , mais vous allez comprendre par la suite)

Voilà donc j'ai un joueur et une camera dans un même parent "Wolf" :

http://prntscr.com/7vpt6v

La camera elle , fixe une sphère appelé "Target" (Image ci dessous) et quand je tourne la souris à droite ou à gauche, la camera tourne autour de ce "Target", elle ne fixe pas le joueur(Mais le joueur sera toujours dans le champ de vision de la camera bien sûr)

http://prntscr.com/7vpugz

Et le joueur lui, quand on appuis sur les flèches ou z,q,s,d il se déplace selon la volonté de l'utilisateur.
Mais y'a quelque chose qui ne va pas (Les rêves ont une fin) :

Je me déplace,je tourne la camera , tous va bien! Mais, il y a un problème au niveau des axes de déplacement : Si je tourne la camera par exemple à 180 degrés, je vois tous ce qui a derrière le perso mais, pour me tourner avec le perso , c'est impossible. C'est à dire qu'en gros, je veut que l'axe Z de la camera devient l'axe Z du joueur, et ça , a chaque fois que la caméra tourne. Et en gros, a chaque fois que la camera tourne, si j'appuis sur la touche pour avancer, le perso avance selon la rotation de la camera. Plus précis : Je tourne la camera a droite du joueur, la droite du perso devient alors le devant. Idem pour : Je tourne la camera à 180 degrés (Donc je vois derrière le perso) et donc le "derrière" du perso devient le "devant". Un peu a la Warframe si vous êtes connaisseur :)

J'espère que je me suis bien expliqué parce que j'ai l'impression d'avoir mélanger toute les explications ^^"

Et donc , tous ça tous pour vous demander comment y procédé ? J'ai essayé plusieurs méthodes avec transform.Rotate mais rien ne ce passe comme prévue :(

Donc si quelqu'un pourrait bien m'aider a résoudre ce problème ça serait vraiment cool !

Le script bien sûr pour vous éclairer sur la façon dont ça marche :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class RotateTheCameraAroundTheTarget : MonoBehaviour {
	
	public float turnSpeed = 4.0f;
	public Transform target;
	
	public Vector3 offset;
	
	void Start () {
	} 
	
	void LateUpdate()
	{
		offset = Quaternion.AngleAxis (Input.GetAxis("Mouse X") * turnSpeed, Vector3.up)  * offset;
		transform.position = target.position + offset; 
		transform.LookAt(target.position);
		
	}
}
Dernière édition par WolfProg le 28 Juil 2015 19:29, édité 1 fois.

Avatar de l’utilisateur
Steyo
Messages : 8
Inscription : 22 Juil 2015 16:35
Localisation : Bordeaux

Re: Comment changer de direction les axes X Y Z ?

Message par Steyo » 23 Juil 2015 00:48

Juste une idée, mais tu ne pourrais utiliser le Vecteur de ta caméra et l'attribuer à la direction dans laquelle tu et déplaces ?

Genre :

Code : Tout sélectionner

 public GameObject camera ; // Place la caméra dessus


void Update () {

		Vector 3 cameraDirection = camera.transform.position;
		Vector3 direction perso = cameraDirection;
	
	}


Avatar de l’utilisateur
WolfProg
Messages : 21
Inscription : 08 Nov 2014 11:31
Localisation : Nice

Re: Comment changer de direction les axes X Y Z ?

Message par WolfProg » 23 Juil 2015 10:17

Merci d'avoir répondu :)

Mais je n'ai pas trop compris ce que tu voulait faire par là, enfin j'ai suivi ton idée mais ensuite, comment faire pour que les axes du joueur sont égale à la rotation de la caméra ?

Désolé si c'est bête à comprendre mais je suis un peu perdu :mrgreen:

Avatar de l’utilisateur
Steyo
Messages : 8
Inscription : 22 Juil 2015 16:35
Localisation : Bordeaux

Re: Comment changer de direction les axes X Y Z ?

Message par Steyo » 23 Juil 2015 17:30

Au temps pour moi, je t'ai dit des bêtises. Il faut que tu stockes l'orientation de la camera dans une variable et que tu déplaces dans cette direction. Là tu vas avoir besoin de l'aide de quelqu'un d'autre parce que j'ai vraiment du mal avec l'orientation ^^'

Avatar de l’utilisateur
WolfProg
Messages : 21
Inscription : 08 Nov 2014 11:31
Localisation : Nice

Re: Comment changer de direction les axes X Y Z ?

Message par WolfProg » 23 Juil 2015 17:39

Ok pas grave et merci quand même :)

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: Comment changer de direction les axes X Y Z ?

Message par artemisart » 23 Juil 2015 18:15

Tu peux progressivement orienter le joueur quand il avance selon la direction de la cam avec RotateTowards par exemple : http://docs.unity3d.com/ScriptReference ... wards.html

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

Re: Comment changer de direction les axes X Y Z ?

Message par Alesk » 25 Juil 2015 13:56

Il est possible d'utiliser les vecteurs de direction du transform de la caméra pour déterminer la bonne direction à prendre :

camera.transform.forward
camera.transform.right
camera.transform.up

Bien entendu, pour obtenir les directions opposées, il faut multiplier ces vecteurs par -1
à partir de là, tu auras de quoi diriger ton personnage.

Avatar de l’utilisateur
WolfProg
Messages : 21
Inscription : 08 Nov 2014 11:31
Localisation : Nice

Re: Comment changer de direction les axes X Y Z ?

Message par WolfProg » 28 Juil 2015 19:24

Merci beaucoup j'ai enfin trouvé grâce a vous merci encore :D

Script (Tous simplement au final) :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class InDev_4 : MonoBehaviour {

	public Transform target;
	public float speedRotate;

	void Update () {
		float step = speedRotate;

		if(Input.GetButton ("Vertical")){
			transform.rotation = Quaternion.RotateTowards(transform.rotation, target.rotation, step);
		}
	}
}

Répondre

Revenir vers « (C#) CSharp »