Page 1 sur 1

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

Publié : 19 Nov 2021 22:54
par Kaloverian
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

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

Publié : 20 Nov 2021 16:29
par Kaloverian
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 !