コード例 #1
0
    public void UpdateState()
    {
        OnStateUpdateStart?.Invoke();

        stepsSinceLastGrounded += 1;
        body.useGravity         = true;
        if (OnGround || SnapToGround() || CheckSteepContacts())
        {
            OnGroundedStateUpdate?.Invoke();
            stepsSinceLastGrounded = 0;

            if (groundContatctCount > 1)
            {
                ContactNormal.Normalize();
            }
        }
        else
        {
            ContactNormal = Vector3.up;
            OnInAirStateUpdate?.Invoke();
        }

        CollisionHandlerStateSheet.CompareAndInvoke(currentState, prevState);

        OnStateUpdateEnd?.Invoke();
    }
コード例 #2
0
        public static void CompareAndInvoke(CollisionHandlerStateSheet current, CollisionHandlerStateSheet prev)
        {
            var handler = current.handler;

            if (current.stepsSinceLastGrounded == 1 && prev.stepsSinceLastGrounded == 0)
            {
                handler.OnInAirStart?.Invoke();
            }
            if (current.groundContatctCount >= 1 && prev.stepsSinceLastGrounded > 0)
            {
                handler.OnGroundedStart?.Invoke();
            }
            if (current.steepContactCount >= 1 && prev.steepContactCount < 1)
            {
                handler.OnWallStart?.Invoke();
            }
        }
コード例 #3
0
 public void CopyValues(CollisionHandlerStateSheet src)
 {
     groundContatctCount    = src.groundContatctCount;
     steepContactCount      = src.steepContactCount;
     stepsSinceLastGrounded = src.stepsSinceLastGrounded;
 }
コード例 #4
0
 private void Start()
 {
     prevState    = new CollisionHandlerStateSheet(this);
     currentState = new CollisionHandlerStateSheet(this);
 }