private void Awake() { if (comet == null) { comet = FindObjectOfType <CometController>(); cometRB = comet.GetComponent <CircleCollider2D>(); } }
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; }