private void Update() { Vector3 position = transform.position; Vector3 target = targetPos.position; bool isSteering = GlobalSettings.isInSteering; if (rb.velocity.magnitude <= slowSpeed) { // print("we slow"); // A if (Vector3.Distance(position, target) <= closeDistance) { // print("we close"); //A i) behaviour //move to target, no turning if (!isSteering) { Kinematic.Arrive(rb, transform, targetPos.position, closeSpeed); } else { Steering.Arrive(rb, transform, targetPos.position, closeAcceleration, closeSpeed); } } else { // print("we far"); //A ii) behaviour //if angle btw forward and target close to 0, if (Vector3.Angle(transform.forward, target - position) <= 2f) { // then move forward if (!isSteering) { Kinematic.Arrive(rb, transform, targetPos.position, farSpeed); } else { Steering.Arrive(rb, transform, targetPos.position, farAcceleration, farSpeed); } } else { // else turn towards target if (isSteering || rb.velocity.magnitude < 1f) { Helper.Alignment(transform, target - position, stopRotationSpeed); } else { Helper.Alignment(transform, rb.velocity, stopRotationSpeed); } } } } else { // print("we fast"); //B // check arc infront of character float coneAngle = Helper.Map(rb.velocity.magnitude, 0f, farSpeed, fastAngle, slowAngle); if (Vector3.Angle(transform.forward, target - position) <= coneAngle) { // print("OhISee"); //B i) if (!isSteering) { Kinematic.Arrive(rb, transform, targetPos.position, farSpeed); } else { Steering.Arrive(rb, transform, targetPos.position, farAcceleration, farSpeed); } Helper.Alignment(transform, rb.velocity, moveRotationSpeed); } else { // print("OhImBlind"); // B ii) rb.velocity = Vector3.zero; //stop Helper.Alignment(transform, target - position, stopRotationSpeed); } } }
private void Update() { captureIcon.SetActive(isCapturer); if (isTagged) { if (isReturning) { ResetFlag(); isReturning = false; } isCapturer = false; // FREEZE rb.velocity = Vector3.zero; return; } if (!isCapturer && !isReviver && !isTagged && !isReturning) { if (findingNewTarget) { StartCoroutine(FindNewPosition()); } Debug.DrawLine(transform.position, targetPos, Color.green); } if (isCapturer && !isReturning) { targetPos = flagPos.position; } if (isReviver) { if (teamID == 1) { foreach (var guy in blueTeam) { var capturer = guy.GetComponent <Capturer>(); if (capturer.isTagged) { targetPos = capturer.transform.position; break; } } } else if (teamID == 2) { foreach (var guy in redTeam) { var capturer = guy.GetComponent <Capturer>(); if (capturer.isTagged) { targetPos = capturer.transform.position; break; } } } } Kinematic.Arrive(rb, transform, targetPos, wanderSpeed); Helper.Alignment(transform, rb.velocity, 1f); transform.rotation = Quaternion.Euler(0f, transform.eulerAngles.y, 0f); }