void OnCollisionEnter(Collision collision) { GameObject box = collision.collider.gameObject; BoxTracker tracker = box.GetComponent <BoxTracker>(); if (tracker && tracker.boxCtrl) { //detectar se a velocidade do tracker está na direção desse objeto if (this.gameObject == tracker.aboutToHit) { tracker.LeaveTrack(); //tracker.Stuck(); } } }
void OnCollisionEnter(Collision collision) { GameObject box = collision.gameObject; BoxTracker tracker = box.GetComponent <BoxTracker>(); if (tracker) { if (mySwitch) { tracker.SwitchTrack(normallyOpen); } else { tracker.SwitchTrack(normallyClosed); } } }
void FixedUpdate() { float step = speed * Time.deltaTime; // utilizando pattern similar à Entity - System - Component for (int i = 0; i < boxes.Count; i++) { Transform previous, next; Vector3 position; GameObject box = boxes[i]; Rigidbody rbox = box.GetComponent <Rigidbody>(); BoxTracker tracker = box.GetComponent <BoxTracker>(); // se o tracker.previousId for o último dos waypoints, destruir box if (tracker.previousId >= waypoints.Length - 1) { tracker.LeaveTrack(); tracker.boxCtrl = null; continue; } // se ainda tiver algum waypoint seguinte, mover box na sua direção position = box.transform.position; previous = waypoints[tracker.previousId]; next = waypoints[tracker.previousId + 1]; box.transform.position = Vector3.MoveTowards(position, next.position, step); tracker.velocity = position != next.position ? speed * (next.position - position).normalized : tracker.velocity; // se a distância do box e do próximo waypoint for aproximadamente igual, if (Vector3.Distance(position, next.position) < 0.1f) { // incrementa o tracker.previousId, e move para o waypoint tracker.previousId++; } } // remover do BoxMovementController as caixas que saíram da esteira for (int i = 0; i < removeBoxes.Count; i++) { GameObject box = removeBoxes[i]; boxes.Remove(box); } removeBoxes = new List <GameObject>(); }