Quantcast
Channel: Questions in topic: "attach"
Viewing all articles
Browse latest Browse all 168

How would I attached a gameobject to a prefab that is spawned at a specific time?

$
0
0
I have the following script to make a ladybird (fly) attach a gameobject to follow its path. In the script, the gameobject is not attaching to the ladybird in the application during play, even though the gameobject is assigned and a debug logger states that the gameobject is active. Even though the gameobject is active, I don't see the object in the play view or in the editor view. ---------- using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Linq; using Berry.Utils; [RequireComponent(typeof(Chip))] public class Ladybird : IBomb, IAnimateChip, IChipLogic { public static List targetStack = new List(); // public location for starting point public Slot starting = new Slot(); // public objects public GameObject FlyTorVid; // public boolean for grid locations public bool Top; public bool TopRight; public bool TopLeft; public bool Bottom; public bool BottomRight; public bool BottomLeft; public bool Left; public bool Right; public static bool ladybirdfly; public bool flylock = false; Chip _chip; int birth; // Event count at the time of birth SessionAssistant.main.eventCount int branchCount; public Transform directionSprite; Slot target; public string seed = ""; public Chip chip { get { return _chip; } } void OnDestroy() { if (target != null && targetStack.Contains(target)) { targetStack.Remove(target); } } void Awake() { _chip = GetComponent(); birth = SessionAssistant.main.eventCount; AudioAssistant.Shot("LadybirdCreate"); // Video GameObject FlyTorVid turned off //FlyTorVid.SetActive (false);//false } float speed; // Coroutine destruction / activation public IEnumerator Destroying() { if (birth == SessionAssistant.main.eventCount) { chip.destroying = false; yield break; } chip.busy = true; chip.gravity = false; chip.Play("Flying"); AudioAssistant.Shot("LadybirdCreateBee"); //stop the audio file when boolean event changes foreach (SpriteRenderer sr in GetComponentsInChildren()) sr.sortingLayerName = "Foreground"; if (chip.slot) { FieldAssistant.main.BlockCrush(chip.slot.coord, false); FieldAssistant.main.JellyCrush(chip.slot.coord); } chip.ParentRemove(); Vector3 startPosition = chip.transform.position; Vector3 lastPosition = transform.position; Vector3 tagetPosition; if (!target) target = FindTarget(); speed = Random.Range(3f, 4f) / Vector3.Distance(startPosition, target.transform.position); if (ladybirdfly) { Debug.Log ("slow speed"); if (Vector3.Distance (target.transform.position, startPosition) <= 1.0f) { speed = Random.Range (0.3f, 0.3f) / Vector3.Distance (startPosition, target.transform.position); }else if (Vector3.Distance (target.transform.position, startPosition) <= 3.0f && Vector3.Distance (target.transform.position, startPosition) > 1.0f){ speed = Random.Range (1f, 1f) / Vector3.Distance (startPosition, target.transform.position); }else if (Vector3.Distance (target.transform.position, startPosition) <= 5.0f && Vector3.Distance (target.transform.position, startPosition) > 3.0f) { speed = Random.Range (2f, 2f) / Vector3.Distance (startPosition, target.transform.position); } else { speed = Random.Range (3f, 3f) / Vector3.Distance (startPosition, target.transform.position); } } Vector3 normal = (target.transform.position - startPosition).normalized; normal = new Vector3(-normal.y, normal.x, 0); Debug.Log (Vector3.Distance(target.transform.position, startPosition)); normal *= Vector3.Distance(target.transform.position, startPosition) * Random.Range(0.2f, 0.2f); // 0.2f, 0.4f if (Random.value > 0.5f)//0.5 normal *= -1; //-1 float time = 0f; // time = 0f; float angle = 0; // time < 1 while (time < 1) { time += Time.deltaTime * speed; tagetPosition = target.transform.position + normal * Mathf.Sin(Mathf.PI * time); transform.position = Vector3.Lerp(startPosition, tagetPosition, EasingFunctions.easeInOutQuad(time)); angle = Vector3.Angle(directionSprite.up, transform.position - lastPosition); if (Vector3.Angle(-directionSprite.right, transform.position - lastPosition) > 90) angle *= -1; directionSprite.Rotate(0, 0, angle * Time.deltaTime * 15); // 15 lastPosition = transform.position; yield return 0; } SessionAssistant.main.EventCounter(); Slot _target = target; if (seed != "") { Chip pu = FieldAssistant.main.AddPowerup(_target.coord, seed); pu.busy = true; _target.chip = pu; yield return 0; SessionAssistant.main.EventCounter(); } Crush(_target.coord); chip.busy = false; chip.gravity = true; AudioAssistant.Shot("LadybirdCrush"); SessionAssistant.main.EventCounter(); targetStack.Remove(target); yield return new WaitForSeconds(0.1f); chip.Play("Destroying"); AnimationAssistant.main.Explode(transform.position, 5, 7); while (chip.IsPlaying("Destroying")) yield return 0; Destroy(gameObject); } Slot FindTarget() { Slot result; switch (LevelProfile.main.target) { case FieldTarget.Block: Block[] blocks = Slot.all.Values.Where(x => x.block != null && x.block is Block && !targetStack.Contains(x)) .Select(x => x.block as Block).ToArray(); if (blocks.Length > 0) { result = blocks[Random.Range(0, blocks.Length)].slot; targetStack.Add(result); return result; } break; case FieldTarget.Color: case FieldTarget.Jelly: case FieldTarget.None: case FieldTarget.Jam: case FieldTarget.Duel: case FieldTarget.SugarDrop: { List chips = new List(FindObjectsOfType()); chips = chips.FindAll(x => !x.busy).ToList(); int potential = -1; int z = 0; List resultChip = new List(); foreach (Chip c in chips) { if (c.chipType == "Ladybird" || !c.destroyable) continue; if (c.destroying || !c.slot || targetStack.Contains(c.slot)) continue; z = c.GetPotencial(); if (potential < z) { resultChip.Clear(); potential = z; } if (potential == z) resultChip.Add(c); } if (chip.jamType != "") resultChip = resultChip.FindAll(x => Jam.GetType(x.slot) != chip.jamType).ToList(); if (resultChip.Count > 0) { result = resultChip[Random.Range(0, resultChip.Count)].slot; targetStack.Add(result); return result; } break; } } Slot[] targets = Slot.all.Values.Where(x => !targetStack.Contains(x) && x != chip.slot && x.chip != null).ToArray(); result = targets[Random.Range(0, targets.Length)]; targetStack.Add(result); return result; } bool Crush(int2 coord) { Slot s = Slot.GetSlot(coord); FieldAssistant.main.BlockCrush(coord, false); FieldAssistant.main.JellyCrush(coord); if (s && s.chip) { s.chip.SetScore(3f); s.chip.jamType = chip.jamType; s.chip.DestroyChip(); AnimationAssistant.main.Explode(s.transform.position, 3, 7); } return coord.IsItHit(0, 0, LevelProfile.main.width - 1, LevelProfile.main.height - 1); } public List GetDangeredChips(List stack) { if (stack.Contains(chip)) return stack; stack.Add(chip); return stack; } #region Mixes public void LadybirdsMix(Chip secondary) { StartCoroutine(LadybirdsMixRoutine(secondary)); } IEnumerator LadybirdsMixRoutine(Chip secondary) { chip.busy = true; chip.destroyable = false; yield return 0; List ladies = new List(); int count = 1; if (secondary.chipType == "Ladybird") count = 2; if (chip.slot.jam) chip.jamType = chip.slot.jam.type; for (int i = 0; i <= count; i++) { Chip l = ContentAssistant.main.GetItem("Ladybird" + Chip.chipTypes[Random.value > 0.5f ? chip.id : secondary.id]); l.destroyable = false; l.transform.position = chip.slot.transform.position; l.transform.localScale = Vector3.one; l.transform.SetParent(Slot.folder); l.transform.Find("LadybirdBody").rotation = Quaternion.Euler(0, 0, Random.Range(0f, 360f)); l.jamType = chip.jamType; if (secondary.chipType != "Ladybird") l.GetComponent().seed = secondary.chipType; ladies.Add(l); } chip.Minimize(); SessionAssistant.main.EventCounter(); foreach (Chip l in ladies) { if (l == null) continue; Animation a = l.GetComponent(); while (a.isPlaying) yield return 0; l.destroyable = true; l.jamType = chip.jamType; l.DestroyChip(); } chip.busy = false; chip.HideChip(false); } // ******************* LadybirdsTor function for tornado public void LadybirdsTor(Chip secondary) { StartCoroutine(LadybirdsTorRoutine(secondary)); starting = chip.slot; startingCoord (starting); Debug.Log (starting); FlyTorVid.transform.position = starting.transform.position; FlyTorVid.SetActive (true); Debug.Log ("FlyTorVid is rendering on"); Debug.Log (FlyTorVid); } IEnumerator LadybirdsTorRoutine(Chip secondary) { chip.busy = true; chip.destroyable = false; yield return 0; List ladies = new List(); int count = 1; if (secondary.chipType == "Ladybird") count = 0; ladybirdfly = true; if (chip.slot.jam) chip.jamType = chip.slot.jam.type; for (int i = 0; i <= count; i++) { Chip l = ContentAssistant.main.GetItem("Ladybird" + Chip.chipTypes[Random.value > 0.5f ? chip.id : secondary.id]); l.destroyable = false; l.transform.position = chip.slot.transform.position; l.transform.localScale = Vector3.one; l.transform.SetParent(Slot.folder); l.transform.Find("LadybirdBody").rotation = Quaternion.Euler(0, 0, Random.Range(0f, 360f)); // of 360f l.jamType = chip.jamType; ladies.Add(l); } chip.Minimize(); SessionAssistant.main.EventCounter(); foreach (Chip l in ladies) { if (l == null) continue; Animation a = l.GetComponent(); while (a.isPlaying) yield return 0; l.destroyable = true; l.jamType = chip.jamType; l.DestroyChip(); } chip.busy = false; chip.HideChip(false); } public void startingCoord(Slot startpoint){ foreach (Side side in Utils.allSides){ Vector3 rotation = new Vector3(); switch (side) { case Side.Bottom: if (startpoint[side] != null){ Bottom = true; } break; case Side.BottomRight: if (startpoint[side] != null){ BottomRight = true; } break; case Side.BottomLeft: if (startpoint[side] != null){ BottomLeft = true; } break; case Side.Left: if (startpoint[side] != null){ Left = true; } break; case Side.Top: if (startpoint[side] != null){ Top = true; } break; case Side.TopRight: if (startpoint[side] != null){ TopRight = true; } break; case Side.TopLeft: if (startpoint[side] != null){ TopLeft = true; } break; case Side.Right: if (startpoint[side] != null){ Right = true; } break; } } // vid location for Grid starting top left if (Top == true && TopLeft == true && Left == true) { TopLeft = true; } else { TopLeft = false; } if (Top == true && TopRight == true && Right == true) { TopRight = true; } else { TopRight = false; } if (Right == true && BottomRight == true && Bottom == true) { BottomRight = true; } else { BottomRight = false; } if (Left == true && BottomLeft == true && Bottom == true) { BottomLeft = true; } else { BottomLeft = false; } // vid start location if (TopLeft == true){ startpoint = startpoint[Side.TopLeft]; return; } if (TopRight == true){ startpoint = startpoint[Side.Top]; return; } if (BottomLeft == true){ startpoint = startpoint[Side.Left]; return; } if (BottomRight == true){ //startpoint = startpoint[side.BottomRight]; return; } } // ******************* deploy ladybird **************** public string[] GetClipNames() { return new string[] { "Destroying", "Flying" }; } public string GetChipType() { return "Ladybird"; } public bool IsMatchable() { return true; } public int GetPotencial() { return 15;// 15 } #endregion } ---------- The line that says: FlyTorVid.SetActive (true); is the gameobject that I am setting active when the ladybird is moving as one gameobject after a combination of both ladybirds put together. The second count is "0", but I tried to alter it by changing it to "1" on the line: if (secondary.chipType == "Ladybird") count = 0; and still have no luck on rendering the gameobject.

Viewing all articles
Browse latest Browse all 168

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>