Voici mon léger problème simple:
Dans ce script C#,dès que j'appuie sur une touche, j'instancie dynamiquement un objet B sur un objet A auparavant en rotation continue ou non..
Cet objet B est dévié par rapport à A d'un angle constant.
Cette déviation à angle constant fonctionne quand l'objet A n'est pas en rotation continue sur lui-même.
Ça foire dès qu'au moment où A est ou à subi une rotation continue sur lui-même.
Pourtant, après chaque instanciation dynamique,,l'objet instancié prend la composante de transform.rotation de l'objet A.
Où est le problème?
voici le code simple représentant le problème:
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class probleme : MonoBehaviour
{
public KeyCode droite;
public KeyCode accélerer;
public KeyCode vitesse_const;
public KeyCode stop_rotation;
public float vitesse_angulaire, accéleration_angulaire, angle_deviation,vitesse_trans;
public GameObject objetA, objetB;
float tr = 0;
int k = 0;
List<GameObject> ObjectList;
// Use this for initialization
void Start()
{
ObjectList = new List<GameObject>();
ObjectList.Add(objetA);
k++; // on incrément k car maintentant la liste a un élément, K représente le nombre d'élément dans la liste
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(droite))
{
// k etant le nombre d'élémént dans la liste, k-1 représente l'index de ce dernier élément.
ObjectList.Add(Instantiate(ObjectList[k-1])); // duplique le dernier élément présent dans la liste, et l'ajoute à la liste. sa position/rotation/scale... sont identique à l'élément précédent.
// vu qu'on a ajouter un élément a la liste, et que k n'est pas encore incrémenté, k deviens l'index du dernier élément de la liste.
ObjectList[k].name = "objet" + k; //définie le nom du dernier GameObject de la liste.
ObjectList[k].transform.Rotate(0, angle_deviation, 0, Space.Self);//permet la déviation de l'objet B par rapport
k++; // incrément k, car on a ajouter un élément à la liste. k redeviens le nombre d'élément dans la liste, et donc l'index du dernier élément est k-1
}//fin de if
if (Input.GetKey(accélerer))
{
tr += accéleration_angulaire;
}
if (Input.GetKeyDown(vitesse_const))
{
tr = vitesse_angulaire;
}
if (Input.GetKeyDown(stop_rotation))
{
tr = 0;//stoppe la rotation continue
}
// ici k-1 car k = nombre d'élément dans la liste, donc le dernier élément est k-1
ObjectList[0].transform.Rotate(0, 0, tr, Space.Self);//rotation continue sur l’axe local Z en fonction des précédents
ObjectList[k-1].transform.Translate(0, 0,vitesse_trans, Space.Self);
//appuis
}//fin de Update()
}//fin de Class