public void AutoSpawn(GameObject forceTemplate = null) { var spawner = GetComponent <TE3RandomSpawner>(); var template = forceTemplate ? forceTemplate : spawner.GetRandomTemplate(); var spawned = spawner.SpawnInstance(template); spawned.transform.SetParent(transform); spawned.transform.localPosition = Vector3.zero; spawned.transform.rotation = Quaternion.Euler(TE3Utils.Vec3Lerp(minEulerRotation, maxEulerRotation, TE3Utils.Vec3Random())) * (preserveTemplateRotation ? template.transform.rotation : Quaternion.identity); spawned.transform.localScale = Vector3.Scale( TE3Utils.Vec3Lerp(minScale, maxScale, TE3Utils.Vec3Random()), preserveTemplateScale ? template.transform.lossyScale : Vector3.one ); if (m_SpawnedInstance) { Undo.DestroyObjectImmediate(m_SpawnedInstance); } Undo.RegisterCreatedObjectUndo(spawned, "Auto Spawned"); Undo.RecordObject(this, "Auto Spawned"); m_SpawnedInstance = spawned; Debug.Log("AutoSpawn2: " + spawned); }
public override Vector3 GetSpawnPositionCandidate(Transform transform) { // Get a random direction var dir2D = Random.insideUnitCircle; m_Dir3D = new Vector3(dir2D.x, 0f, dir2D.y).normalized; // Get distributed strength (focused on inner radius) m_Strength = Mathf.Pow(Random.value, distributionPower); // Get distributed distance var scale = TE3Utils.Vec3Max(transform.lossyScale); var dist = Mathf.Lerp(innerRadius * scale, outerRadius * scale, m_Strength); // Point candidate var pnt = transform.position + offset + m_Dir3D * dist; return(pnt); }
void Reset() { var self = GetComponent <Renderer>(); var lodGroupIdx = TE3Utils.FindLODGroupIndex(self); // Bail if no renderer, no lodgroup, or we're in lod0. if (lodGroupIdx < 1) { return; } // If we're in a LOD group, assume we want to source from LOD0. // (only allowed if there's a single renderer in LOD0) var lods = GetComponentInParent <LODGroup>().GetLODs(); if (lods[0].renderers.Length == 1) { source = lods[0].renderers[0]; } }
public override void DrawDebugGizmos(Transform transform) { if (!showDebugGizmo) { return; } var scale = TE3Utils.Vec3Max(transform.lossyScale); var or = outerRadius * scale; var ir = innerRadius * scale; var radius = or - ir; var steps = Mathf.RoundToInt(radius * 10f); var stepSize = radius / (float)(steps - 1); for (int i = 0; i < steps; ++i) { var strength = Mathf.Pow(1f - i / (float)steps, distributionPower); Handles.color = new Color(1f, 1f, 1f, strength); Handles.DrawSolidDisc(transform.position + offset, Vector3.up, ir + stepSize * i); } Handles.color = Color.gray; Handles.DrawSolidDisc(transform.position, Vector3.up, ir); }