public override void UpdateBehaviour(float dt) { Vector3 characterPosition = CharacterActor.Position; float targetAngularSpeed = CharacterActions.movement.value.x * angularSpeed; characterPosition = CustomUtilities.RotatePointAround( characterPosition, characterPosition + ClosestVectorToRope, targetAngularSpeed * dt, currentRope.BottomToTop.normalized ); Vector3 targetAngularVelocity = (characterPosition - CharacterActor.Position) / dt; angularVelocity = Vector3.MoveTowards(angularVelocity, targetAngularVelocity, angularAcceleration * dt); Vector3 targetVerticalVelocity = CharacterActions.movement.value.y * climbSpeed * CharacterActor.Up; verticalVelocity = Vector3.MoveTowards(verticalVelocity, targetVerticalVelocity, verticalAcceleration * dt); CharacterActor.Velocity = verticalVelocity + angularVelocity; }