Hey all,
For a project, I’ve got planet-based combat as part of the gameplay. In short, I use forward movement and rotation followed by rotational and positional clamping to the planet’s surface. It uses a bit of spherical coordinate math, but that’s not important.
So, I have enemies that I’d like to follow my position, wherever I am on the sphere. This, however, is proving difficult. Using transform.LookAt(player.position) only works well when they’re closer on the sphere, but farther away, and I get a quasi-Gimbal Lock scenario.
What’s the best way to have something rotate so it’s forward vector propels itself toward an object on a sphere? Thanks in advance!
Also, here’s the code, so you get an idea of what I’m doing to “clamp” it and such.
// Applies yaw changes (DOESN'T WORK RIGHT :C)
transform.LookAt(player.transform.position);
// Applies forward movement
currentSpeed += Time.deltaTime * enemyPlanetAccel;
currentSpeed = Mathf.Clamp(currentSpeed, 0, enemyPlanetMaxSpeed);
currentSpeed -= Time.deltaTime / 2f;
transform.position += transform.forward * currentSpeed * Time.deltaTime;
// Correct turns/position to limit to planet's surface
Vector3 c2s = transform.position - planet.transform.position;
Quaternion newTurn = Quaternion.LookRotation(Vector3.Cross(transform.right, c2s), c2s);
transform.rotation = newTurn;
transform.position = sphericalToCartesian(new Vector3(landingRValue, cartesianToSpherical(transform.position).y, cartesianToSpherical(transform.position).z));
Thanks again for any help! ![]()