Beispiel #1
0
 private void Awake()
 {
     if (comet == null)
     {
         comet   = FindObjectOfType <CometController>();
         cometRB = comet.GetComponent <CircleCollider2D>();
     }
 }
Beispiel #2
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.GetComponent <CometController>() != null)
        {
            CometController c = collision.GetComponent <CometController>();
            c.speedProgress = 0;
            c.currentState  = CometController.State.Idle;

            float   startPosHeight = Vector2.Distance(c.startPos.position, transform.position);
            Vector2 newAngle       = (c.transform.position - transform.position).normalized;
            c.startPos.position = newAngle * startPosHeight;
            c.startPos.up       = newAngle.normalized;
            c.GetComponent <Rigidbody2D>().velocity = Vector2.zero;

            logic.currentState = UILogic.State.IdleOnSun;
        }
    }
    /// <summary>
    /// CheckForwardの範囲内にあるオブジェクトをtagで識別して壊す。CometControllerを全ての星につけておく
    /// </summary>
    public void BreakTarget()
    {
        Vector2 forceDir = new Vector2(Random.Range(m_minForRandom, m_maxForRandom), 1f * m_pushPower);

        foreach (var item in m_colliders)
        {
            //もし隕石だったら撃ち返して数秒後に壊す
            if (item.tag == "Meteo" || item.tag == "Star")
            {
                Rigidbody2D rb2d = item.GetComponent <Rigidbody2D>();
                rb2d.AddForce(forceDir, ForceMode2D.Impulse);

                CometController cc = item.gameObject.GetComponent <CometController>();
                cc.m_isDead = true;
                cc.StartCoroutine("BreakThis");
            }
        }
    }
    IEnumerator spawnComet()
    {
        running = true;

        //hold astroid generation
        astroidGenerator.enabled = false;
        yield return(new WaitForSeconds(0.5f));

        //create commet
        GameObject comet = cometPool.getPooledObject();

        comet.SetActive(true);

        float spawnX = Random.Range(leftSpawn.transform.position.x, rightSpawn.transform.position.x);
        float spawnY = leftSpawn.transform.position.y;

        float rise = spawnY - this.transform.position.y;
        float run  = spawnX - (this.transform.position.x + Random.Range(-1.2f, 1.2f));

        float velY  = astroidGenerator.getSpeed();
        float scale = velY / rise;
        float velX  = run * scale;

        float theta    = Mathf.Atan(rise / run) * Mathf.Rad2Deg;
        float rotation = 90 - (theta < 0 ? -theta : theta);

        if (theta > 0)
        {
            rotation *= -1;
        }

        comet.SetActive(true);
        CometController controller = comet.GetComponent <CometController>();

        controller.enabled = true;
        controller.spawn(new Vector3(spawnX, spawnY, 0), velX, velY);
        comet.transform.eulerAngles = new Vector3(0, 0, rotation);
        //wait n seconds then turn astroids back on
        yield return(new WaitForSeconds(0.5f));

        astroidGenerator.enabled = true;

        running = false;
    }