Track platforms so you can ride them around reliably.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| // @kurtdekker | |
| // | |
| // Purpose: to be able to track arbitrary moving surfaces | |
| // you want to hop on and ride around (platforms, etc.) | |
| // | |
| // Requires you to know if you are grounded or not. | |
| // | |
| // To use: | |
| // | |
| // Put this on any non-rotating moving platform object | |
| // and it will track its instantaneous velocity. | |
| // Put one of these on EVERY moving platorm. | |
| // | |
| // Over on your player controller: | |
| // | |
| // When your agent is grounded, raycast down from your agent | |
| // and GetComponent<PlatformMotionRecorder>() on the collider you hit. | |
| // | |
| // In your LateUpdate(), if there was a PlatformMotionRecorder found | |
| // above, get its .Movement property and add it to your own | |
| // movement amount this frame. | |
| // | |
| // That's it. You're done. | |
| // | |
| // Can be used with 2D or 3D, doesn't matter. | |
| // | |
| // Future stretch goal: | |
| // | |
| // - track target rotation in the same way | |
| // - make a GetMovement() method that accepts a "touch point" | |
| // from the playe. Use the last rotation to project curving | |
| // motion out appropriate to that point on the moving platform | |
| // (eg, the far corner versus the rotational center of it). | |
| // | |
| using UnityEngine; | |
| public class PlatformMotionRecorder : MonoBehaviour | |
| { | |
| public Vector3 Movement { get; private set; } | |
| Vector3 lastPosition; | |
| void Update () | |
| { | |
| Vector3 position = transform.position; | |
| Movement = position - lastPosition; | |
| lastPosition = position; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment