コード例 #1
0
 private void FixedUpdate()
 {
     if (hitTimer > 0f)
     {
         hitTimer -= Time.fixedDeltaTime;
     }
     else
     {
         if (toHit)
         {
             toHit = false;
             CharacterDeath.Kill(HitGetColliders);
         }
         if (Animator.CurrentSpriteAnimation == WhipAnimation)
         {
             if (Animator.IsFinished)
             {
                 SetValue(true);
             }
         }
         else if (WhipRequest)
         {
             AudioSource.Play();
             SetValue(false);
             Animator.SetAnimation(WhipAnimation);
             HitGetColliders.ShapeParameter.Offset.x = SpriteRenderer.flipX ? -HitOffsetX : HitOffsetX;
             hitTimer = HitTime;
             toHit    = true;
         }
     }
     WhipRequest = false;
 }
コード例 #2
0
 public bool Execute(AIActionList.Token token)
 {
     if (token.Source.SpriteRenderer.flipX)
     {
         AttackGetColliders.ShapeParameter.Offset.x = -AttackOffsetX;
     }
     else
     {
         AttackGetColliders.ShapeParameter.Offset.x = AttackOffsetX;
     }
     if (toAttack && !attackTimer.Execute(Time.fixedDeltaTime))
     {
         toAttack = false;
         CharacterDeath.Kill(AttackGetColliders);
     }
     return(true);
 }
コード例 #3
0
        public void Ray(Vector2 target)
        {
            if (!newAimTimer.Execute(Time.fixedDeltaTime))
            {
                newAimTimer.SetTime(NewAimTime);
                aimTime = Random.Range(MinAimTime, MaxAimTime);
            }

            Vector2 dir = target - (Vector2)Origin.position;

            Rest((Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg) + 90f);

            const float maxDistance = 1000f;

            LaserTransform.position = Origin.position;
            LaserTransform.rotation = Quaternion.Euler(0f, 0f, Angle);
            Vector2      raySize = new Vector2(0.375f, 0.5f);
            RaycastHit2D hit     = Physics2D.BoxCast(Origin.position, raySize, Angle, Direction, maxDistance, Action.ObstacleLayerMask);
            float        dis;

            if (hit.collider)
            {
                dis = hit.distance;
                LaserSpriteRenderer.size = new Vector2(1f, (dis * (1f / 0.625f)) + 0.5f);
            }
            else
            {
                dis = maxDistance;
                LaserSpriteRenderer.size = new Vector2(1f, dis);
            }
            LaserGameObject.SetActive(true);

            foreach (RaycastHit2D h in Physics2D.BoxCastAll(Origin.position, raySize, Angle, Direction, dis, Action.KillLayerMask))
            {
                OneShotAudioEffect effect = Action.LaserHitOneShotAudioEffectPooler.Get();
                effect.Set(h.transform.position);
                effect.gameObject.SetActive(true);
                CharacterDeath.Kill(h.collider);
            }
        }