Je suivais cet exemple de fractale Unité:Comment est localScale réducteur dans cet exemple de code fractale pour l'unité
http://catlikecoding.com/unity/tutorials/constructing-a-fractal/
using UnityEngine;
using System.Collections;
public class Fractal : MonoBehaviour {
public Mesh mesh;
public Material material;
public int maxDepth = 20;
public int depth = 0;
public float childScale = 0.5f;
// Use this for initialization
void Start() {
gameObject.AddComponent<MeshFilter>().mesh = mesh;
gameObject.AddComponent<MeshRenderer>().material = material;
if(depth < maxDepth)
{
new GameObject("Fractal Child").AddComponent<Fractal>().Initialise(this);
}
}
// Update is called once per frame
void Update() {
}
private void Initialise(Fractal parent)
{
Debug.Log(gameObject.transform.localScale);
mesh = parent.mesh;
material = parent.material;
maxDepth = parent.maxDepth;
childScale = parent.childScale;
Debug.Log("childScale = " + childScale);
depth = parent.depth + 1;
transform.parent = parent.transform;
transform.localScale = Vector3.one * childScale;
Debug.Log("localScale = " + transform.localScale);
transform.localPosition = Vector3.up * (0.5f + 0.5f * childScale);
}
}
Jusqu'à ce point, j'ai une pile verticale de boîtes sur le dessus de chaque autre, où chaque boîte est la moitié de la taille de la boîte ci-dessous (childScale est réglé sur 0.5f). Ce que je n'arrive pas à comprendre, c'est pourquoi chaque gameobject (instance Fractal) a la moitié de la taille de son parent. childScale est toujours 0.5f, je ne vois pas comment il serait réduit à 0.25f, 0.125f etc dans ce code pour faire chaque instance qui est créée récursivement - la moitié de la taille de son parent.
Un conseil apprécié.
L'image ci-dessous est le résultat (notez que ceci utilise une échelle enfant de 0.9f pas 0.5f).
Salut, donc c'est seulement la ligne qui affecte le transform.parent qui cause réellement la réduction d'échelle? En faisant d'elle un enfant d'un autre objet, l'échelle locale entre en jeu. – smackenzie
Permettez-moi de le dire de cette façon. Echelle mondiale = échelle locale * échelle mondiale du parent. Lorsque l'unité fait le calcul ci-dessus, elle commence en haut et descend. L'échelle mondiale est appelée "échelle à perte" en passant. La définition du parent n'est pas ce qui provoque la réduction d'échelle, indiquant à l'objet qu'il fait la moitié de la taille de son parent. – Allen
Alors, que se passe-t-il si je refais soudainement un autre objet de jeu avec une échelle différente? L'acte de reparent ne le fera-t-il pas réévaluer son échelle locale par rapport à son nouveau parent? – smackenzie