[RESOLU] transform.Tanslate avec Space.Self ne respecte pas le repère du parent

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
Kaloverian
Messages : 341
Inscription : 10 Août 2016 03:03

[RESOLU] transform.Tanslate avec Space.Self ne respecte pas le repère du parent

Message par Kaloverian » 19 Nov 2021 22:54

bonjour,

Quand j'écris ce code;

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class trajet_dans_autre_repere : MonoBehaviour
{
    float a,b,c;

    public GameObject objet,empty;

    Vector3 vect;

    public float rayon,speed;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {  
        objet.transform.parent=empty.transform;
        a=rayon*Mathf.Cos(speed * Time.time);
        b=0;
        c=rayon*Mathf.Sin(speed * Time.time);
        
        vect.x=a;
        vect.y=b;
        vect.z=c;

        objet.transform.localPosition=vect;
    }
}

la trajectoire dépend des composantes rotationnelles de l'empty,parent de l'objet

Quand j'écris maintenant ce code:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class essai : MonoBehaviour
{  

    public GameObject objet,empty;
    public Vector3 vect;
    // Start is called before the first frame update

    public float speed;
    void Start()
    {
        objet.transform.parent=empty.transform;
    }

    // Update is called once per frame
    void Update()
    {
        objet.transform.Translate(speed*Time.deltaTime*vect,Space.Self);
        
    }
}

la trajectoire ne dépend plus des composantes rotationnelles de l'empty,parent de l'objet translaté.

Pourquoi cela?
Peut-on remédier à cela dans le second code en utilisant toujourrs la fonction transform.Translate ou une fonction très similaire?
(iIl devrait exister dans l'API une fonction du genre transform.localTranslate( ))


merci de votre aide
Dernière édition par Kaloverian le 20 Nov 2021 16:29, édité 2 fois.

Avatar de l’utilisateur
Kaloverian
Messages : 341
Inscription : 10 Août 2016 03:03

Re: transform.Tanslate avec Space.Self ne respecte pas le repère du parent

Message par Kaloverian » 20 Nov 2021 16:29

je me suis trompé car si je modifie le code n°2 comme ceci:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class essai : MonoBehaviour
{  

    public GameObject objet,empty;
    public Vector3 vect,vect2;
    // Start is called before the first frame update

    public float speed;
    void Start()
    {
        objet.transform.parent=empty.transform;
        empty.transform.Rotate(vect2,x,vect2.y,vect2.z,Space.Self);
    }

    // Update is called once per frame
    void Update()
    {
        objet.transform.Translate(speed*Time.deltaTime*vect,Space.Self);
        
    }
}
l
la trajectoire est modifiée !

Répondre

Revenir vers « (C#) CSharp »