void docarry() { agentnav.stoppingDistance = 0.1f; if (!pickuptarget) { dropobject(); } else { this.transform.parent.LookAt(pickuptarget.transform); PickupController targetController = pickuptarget.GetComponentInChildren <PickupController>(); if (targetController) { // leader agent moves the pickup towards the destination, other agents maintain their carry position if (pickupCarryIndexAndPositionOffset.Key == targetController.leaderPikIndex) { agentnav.avoidancePriority = 10; agentnav.radius = 1; agentDestination = targetController.getPickupDestination() - carrytargetoffset; // update pickup's position Transform pickuptargetparent = pickuptarget.transform.parent; pickuptargetparent.transform.position = this.transform.position + carrytargetoffset; // todo: what if agent falls off? check real game // when destination is reached, drop pickup if (Vector3.Distance(transform.position, agentDestination) <= agentnav.stoppingDistance) { dropobject(); } } else { agentnav.avoidancePriority = 1; agentnav.radius = 1; agentDestination = pickuptarget.transform.position - carrytargetoffset; } if (agentcontroller && startingcarry) { agentcontroller.soundPlayer.loop = true; agentcontroller.soundPlayer.clip = agentcontroller.carryClip; agentcontroller.soundPlayer.Play(); startingcarry = false; } } else { Debug.LogError("Pickup controller not found for carrying"); } } }