예제 #1
0
    private void Update()
    {
        switch (currentState)
        {
        case SoulBallState.Move:
            if (Time.time >= t || v <= 1)
            {
                currentState = SoulBallState.Chase;
                v            = -v;
                //rb2d.velocity = Vector2.zero;
            }
            else
            {
                transform.Translate(outDir.normalized * v * Time.deltaTime);
                v = Mathf.Max(minSpeedOut, v - accelerationOut * Time.deltaTime);
            }

            break;


        case SoulBallState.Chase:
            Vector3 direction = target.position - transform.position;

            if (direction.sqrMagnitude < 0.1f)
            {
                rb2d.velocity = Vector2.zero;

                //rb2d.drag = 0;
                //bufferState = SoulBallState.Acquired;

                PlayerCharacter.Singleton.AddUltimateEnergy(4f);
                triggered = true;
                Die();
            }
            else if (!triggered)
            {
                float distance = v * Time.deltaTime;

                if (direction.sqrMagnitude <= distance * distance)
                {
                    transform.position = target.position;
                }
                else
                {
                    transform.Translate(direction.normalized * distance);
                }

                v = Mathf.Min(maxSpeedIn, v + accelerationIn * Time.deltaTime);
            }
            break;
        }
    }
예제 #2
0
    private void OnEnable()
    {
        target        = PlayerCharacter.Singleton.transform;
        rb2d          = GetComponent <Rigidbody2D>();
        rb2d.velocity = Vector2.zero;

        triggered    = false;
        currentState = SoulBallState.Move;
        t            = Time.time + timeIntervals + Random.Range(-0.2f, 0.2f);
        v            = Random.Range(6f, 10f);

        outDir = new Vector2(Random.Range(-1.0f, 1.0f), Random.Range(-1.0f, 1.0f));
    }