When ability starts I want player to align with detected object (this is working) and then stop camera from controlling rotation of player and change movement so vertical inputs move player up and down - I want ofc player to stop reacting to gravity when thats happening
C#:
using Opsive.Shared.Events;
using Opsive.UltimateCharacterController.Character;
using Opsive.UltimateCharacterController.Character.Abilities;
using Opsive.UltimateCharacterController.Character.Abilities.Items;
using Opsive.UltimateCharacterController.Events;
using Opsive.UltimateCharacterController.Utility;
using UnityEngine;
[DefaultAbilityIndex(2001)]
[DefaultStartType(AbilityStartType.ButtonDown)]
[DefaultAllowRotationalInput(false)]
[DefaultInputName("Action")]
[DefaultUseRootMotionPosition(AbilityBoolOverride.True)]
[DefaultUseLookDirection(false)]
[DefaultDetectVerticalCollisions(AbilityBoolOverride.True)]
public class Climb : DetectObjectAbilityBase
{
[Tooltip("A reference to the Ultimate Character Controller character.")]
[SerializeField] private GameObject m_Character;
[Tooltip("Here you can set how fast the character can climb.")]
[SerializeField] private float m_Speed = 1.0f;
private Animator anim;
public override void Awake()
{
base.Awake();
anim = m_GameObject.GetComponent<Animator>();
}
protected override void AbilityStarted()
{
base.AbilityStarted();
TryMount();
}
private void TryMount()
{
var characterLocomotion = m_Character.GetComponent<UltimateCharacterLocomotion>();
if (characterLocomotion != null)
{
characterLocomotion.SetPositionAndRotation(m_DetectedObject.transform.position, m_DetectedObject.transform.rotation, false);
anim.SetInteger("AbilityIndex", 120);
anim.SetTrigger("AbilityChange");
}
}
public override void ApplyRotation()
{
base.ApplyRotation();
m_CharacterLocomotion.transform.rotation = m_DetectedObject.transform.rotation;
}
public override void ApplyPosition()
{
base.ApplyPosition();
float verticalInput = Input.GetAxis("Vertical");
if (verticalInput != 0)
{
m_CharacterLocomotion.MoveDirection = new Vector3(0, verticalInput > 0 ? m_Speed * Time.deltaTime : m_Speed * (-1) * Time.deltaTime, 0);
}
else
{
m_CharacterLocomotion.MoveDirection = new Vector3(0, 0, 0);
}
anim.SetFloat("ForwardMovement", verticalInput);
}
}