Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- [RequireComponent(typeof(CharacterController), typeof(EffectorHandlerComponent))]
- public class PlayerCharacterController : MonoBehaviour
- {
- [SerializeField] float moveSpeed = 8;
- [SerializeField] float gravity = 9.81f;
- CharacterController characterController;
- EffectorHandlerComponent effectorHandlerComponent;
- private void Awake()
- {
- characterController = GetComponent<CharacterController>();
- effectorHandlerComponent = GetComponent<EffectorHandlerComponent>();
- }
- public void Update()
- {
- //Input direction is 0 if we do nothing
- Vector3 moveDirection = Vector3.zero;
- //Get inputs for left and right
- if (Input.GetKey(KeyCode.D))
- {
- moveDirection = Vector3.right;
- }
- else if (Input.GetKey(KeyCode.A))
- {
- moveDirection = Vector3.left;
- }
- //Multiply moveDirection by moveSpeed and add gravity
- Vector3 moveVector = (moveDirection * moveSpeed) + Vector3.down * gravity;
- //Ask the effector handler for displacement vectors caused by any Effectors
- //If none displacement vector will be Vector3.zero and will change nothing
- //There are better ways than to call GetEffectorDisplacement every frame but for now this will do,
- //The cost is trivial either way
- Vector3 displacementVector = effectorHandlerComponent.GetEffectorDisplacements();
- //Call move every frame, not just when input so we can apply gravity and displacement
- characterController.Move((moveVector + displacementVector) * Time.deltaTime);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement