コード例 #1
0
    public override void _IntegrateForces(Physics2DDirectBodyState bodyState)
    {
        Vector2 linearVelocity = bodyState.LinearVelocity;
        float   step           = bodyState.Step;

        PlayerInputInteraction playerInputInteraction = ListenToPlayerInput();

        linearVelocity.x -= this.floorHVelocity;
        floorHVelocity    = 0.0f;

        FloorContact floorContact = FindFloorContact(bodyState);

        ProcessSpawn(playerInputInteraction);
        ProcessShooting(playerInputInteraction, step);
        ProcessFloorContact(floorContact, step);
        linearVelocity = ProcessJump(playerInputInteraction, linearVelocity, step);
        linearVelocity = ProcessPlayerMovement(playerInputInteraction, linearVelocity, step);

        this.shooting = playerInputInteraction.Shoot;
        if (floorContact.FoundFloor)
        {
            floorHVelocity    = bodyState.GetContactColliderVelocityAtPosition(floorContact.FloorIndex).x;
            linearVelocity.x += floorHVelocity;
        }

        linearVelocity          += bodyState.TotalGravity * step;
        bodyState.LinearVelocity = linearVelocity;
    }
コード例 #2
0
 private void ProcessFloorContact(FloorContact floorContact, float step)
 {
     if (floorContact.FoundFloor)
     {
         this.airborneTime = 0.0f;
     }
     else
     {
         this.airborneTime += step;
     }
 }
コード例 #3
0
    private FloorContact FindFloorContact(Physics2DDirectBodyState bodyState)
    {
        FloorContact floorContact = new FloorContact(false, -1);

        for (int i = 0; i < bodyState.GetContactCount(); i++)
        {
            Vector2 contactLocalNormal = bodyState.GetContactLocalNormal(i);

            if (contactLocalNormal.Dot(new Vector2(0, -1)) > 0.6f)
            {
                floorContact.FoundFloor = true;
                floorContact.FloorIndex = i;
            }
        }

        return(floorContact);
    }
コード例 #4
0
 void Awake()
 {
     rigidbody2D = GetComponent<Rigidbody2D>();
     floorContact = transform.FindChild("FloorContact").gameObject.GetComponent<FloorContact>();
     animator = GetComponent<Animator>();
 }