How can I find a point on a collider that is closest to my player.
I am trying to make a game where you can fly around a drone. I wanted to add some assists to make it easier to fly. My idea was to find the closest point on the map collider to the drone and add a force pushing the drone away from that point.
This is my code if it helps:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Drone : MonoBehaviour {
PlayerControls controls;
Rigidbody rb;
public GameObject Camera;
Vector2 move;
Vector2 rotate;
float defaultRotationMultiplier;
float power;
float rotationMultiplier = 2f;
float defaultPower = 5f;
private void Start() {
rb = GetComponent<Rigidbody>();
defaultRotationMultiplier = rotationMultiplier;
}
private void Awake() {
controls = new PlayerControls();
controls.Gameplay.South.performed += ctx => Flip();
controls.Gameplay.LeftStick.performed += ctx => move = ctx.ReadValue<Vector2>();
controls.Gameplay.LeftStick.canceled += ctx => move = Vector2.zero;
controls.Gameplay.RightStick.performed += ctx => rotate = ctx.ReadValue<Vector2>();
controls.Gameplay.RightStick.canceled += ctx => rotate = Vector2.zero;
}
private void FixedUpdate() {
if (move.y == 0) {
power = defaultPower;
} else if (move.y < 0) {
power = defaultPower - (Mathf.Pow(move.y, 2) * defaultPower);
} else if (move.y > 0) {
power = defaultPower + ((Mathf.Pow(move.y, 3)) * 90);
}
float Thrust = ((power * (85 - rb.velocity.magnitude)) / 90);
TextCounter.GetComponent<PowerCount>().power = Thrust;
rb.AddForce(transform.up * Thrust);
transform.Rotate(
Mathf.Pow(rotate.y * 2, 3) * 8 / 10 * rotationMultiplier,
Mathf.Pow(move.x * 2, 3) * 6 / 10 * rotationMultiplier,
Mathf.Pow(-rotate.x * 2, 3) * rotationMultiplier,
Space.Self);
}
void Flip() {
StartCoroutine(Slow());
Vector3 eulerRotation = transform.rotation.eulerAngles;
transform.rotation = Quaternion.Euler(0, eulerRotation.y, 0);
}
private IEnumerator Slow() {
Camera.GetComponent<CameraFollow>().slowSmooth = true;
rotationMultiplier = 0;
yield return new WaitForSeconds(0.2f);
rotationMultiplier = defaultRotationMultiplier;
yield return new WaitForSeconds(0.2f);
Camera.GetComponent<CameraFollow>().slowSmooth = false;
}
private void OnEnable() { controls.Gameplay.Enable(); }
private void OnDisable() { controls.Gameplay.Disable(); }
}
I have checked collider.closestPoint but it seems to be the center of the closest collider, not the closest point on the collider.
Sorry if I wasn't clear enough, it's my first time asking a question. Thanks for any help.
Comment