91 lines
3.5 KiB
Markdown
91 lines
3.5 KiB
Markdown
# Movement (Work In Progress)
|
|
|
|
## Dependencies
|
|
1. [ToggleState Module](https://git.syntriax.com/Syntriax/ToggleState)
|
|
2. [Trigger Module](https://git.syntriax.com/Syntriax/Trigger)
|
|
3. [Factory Module](https://git.syntriax.com/Syntriax/Factory)
|
|
|
|
Make sure to separately clone these modules along with this one too.
|
|
|
|
Or you can call ```git submodule init``` to get them automatically added (note that this method may cause conflicts if another module also imports one of these submodules too, only use if you are only using the `Movement` module)
|
|
|
|
---
|
|
|
|
## Getting Started 2D
|
|
|
|
### Automaticaly
|
|
#### Custom The Editor
|
|
|
|
1. Find the button on the Unity Editor's top panel named `Syntriax`, Under `Modules/Movement` open the window `Definition Creator`
|
|
2. You can find two buttons for both `Quick` and `Longer` presets, or you can define your own, then press `Create` button
|
|
3. Add `MovementDefinitionApplier` component to your Player `GameObject`
|
|
4. Put the name of the definition you created in the first step to `Startup Definition Name` field
|
|
- You can also call `MovementDefinitionApplier.LoadDefinition` method manually to load them via anoher script.
|
|
5. Connect your inputs to the `MovementController` ([Example with Input System](#input-system-example))
|
|
|
|
### Manually
|
|
#### Quick
|
|
|
|
1. Clone the module to a folder in your Assets folder
|
|
2. Add `MovementController` component to your Player `GameObject`
|
|
3. Add `GroundMovement1D` component to your Player `GameObject`
|
|
4. Connect your inputs to the `MovementController` ([Example with Input System](#input-system-example))
|
|
|
|
#### Longer
|
|
|
|
1. Clone the module to a folder in your Assets folder
|
|
2. Add `ToggleStateMonoBehaviour` component to your Player `GameObject`
|
|
3. Add `MovementController` component to your Player `GameObject`
|
|
4. Add `AirMovement1D` component to your Player `GameObject`
|
|
5. Add `GroundMovement1D` component to your Player `GameObject` (make sure it's bellow `AirMovement1D`)
|
|
6. Add a new empty child `GameObject` and add `Box2DColliderTrigger` component to it and place and resize it under the player for ground detection, optionally you can set the `CollisionMask` field on it to make sure it only detects specific layers
|
|
7. Connect your inputs to the `MovementController` ([Example with Input System](#input-system-example))
|
|
8. (Optional) Add a jumping script to see the effects better
|
|
|
|
---
|
|
|
|
This should give you a movement where you can disable the controller through the `IToggleState`, and you should be able to see a the movement changes when the character is not touching the ground.
|
|
|
|
You can add your own movement implementations with bases under the `Bases` folder, or straight up from the `IMovement` interface.
|
|
|
|
Or if you want you can write your own `MovementController` with using the `IMovementController` interface, too, but it should be enough for most cases.
|
|
|
|
---
|
|
|
|
### Input System Example
|
|
|
|
```cs
|
|
using Syntriax.Modules.Movement;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
|
|
public class MovementInputs : MonoBehaviour, Inputs.IMovementActions
|
|
{
|
|
private Inputs inputs = null;
|
|
|
|
private IMovementController movementController = null;
|
|
|
|
public void OnMovement(InputAction.CallbackContext context) =>
|
|
movementController.Move(context.ReadValue<Vector2>());
|
|
|
|
private void OnEnable()
|
|
{
|
|
if (inputs == null)
|
|
{
|
|
inputs = new Inputs();
|
|
inputs.Movement.SetCallbacks(this);
|
|
}
|
|
|
|
movementController =
|
|
movementController ?? FindObjectOfType<IMovementController>();
|
|
|
|
inputs.Enable();
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
inputs.Disable();
|
|
}
|
|
}
|
|
```
|