コード例 #1
0
    private void Update()
    {
        if (stunned)
        {
            if (Time.time - stunTimer > stunDuration)
            {
                stunned = false;
            }
            else
            {
                rb.velocity = new Vector3(0, 0, 0);
                return;
            }
        }
        Vector2 towardPlayer = player.transform.position - transform.position;
        Vector2 steering     = towardPlayer.normalized;
        Vector2 force        = steering * followStrength * Time.deltaTime;
        float   dist         = towardPlayer.magnitude;

        if (shootingComponent != null)
        {
            if (dist < shootingComponent.distanceFromPlayer)
            {
                force *= -1; // puts distance
            }
            else if (dist < shootingComponent.distanceForShooting)
            {
                force = Vector2.zero; // maintains distance
                shootingComponent.SendMessage(nameof(EnemyShootingComponent.setActiveShooter), true);
            }
            else
            {
                shootingComponent.SendMessage(nameof(EnemyShootingComponent.setActiveShooter), false);
            }
        }
        if (dist > minDist)
        {
            force *= dist / minDist * offScreenBoost;
        }
        rb.AddForce(force);
        if (faceMove)
        {
            this.gameObject.transform.rotation = Quaternion.Euler(0, 0, faceOffset + (Mathf.Sign(towardPlayer.y)) * Vector3.Angle(new Vector3(1, 0, 0), new Vector3(towardPlayer.x, towardPlayer.y, 0)));
        }
        followStrength = followStrength * maxSpeed;
    }