void Update() { if (head != null && head.activeSelf) { transform.position = Vector3.Lerp(transform.position, head.transform.position, 0.5f); Vector3 moveDirection = head.transform.position - transform.position; if (moveDirection != Vector3.zero) { float angle = Mathf.Atan2(-moveDirection.x, moveDirection.y) * Mathf.Rad2Deg; transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward); } } else { if (secondaryHead && !head.activeSelf) { if (!destroing) { StartCoroutine(slowDestoy()); } } else { HeadPool.goHeadSpriteInPool(gameObject); } } }
public IEnumerator attachCreature() { tempBack = mainHead.GetComponent <EnemyHead>().back; if (tempBack != null) { for (int i = 0; i < 50; i++) { if (tempBack.GetComponent <EnemyBack>().back != null) { if (tempBack.GetComponent <EnemyBack>().back.GetComponent <EnemyTail>() != null) { tempTail = tempBack.GetComponent <EnemyBack>().back; break; } tempBack = tempBack.GetComponent <EnemyBack>().back; } else { break; } } } attachingCreature = true; yield return(new WaitForSeconds(0.8f)); tempBack.GetComponent <EnemyBack>().back = back; back.GetComponent <EnemyBack>().front = tempBack; TailPool.goInPool(tempTail); HeadPool.goHeadInPool(gameObject); }
IEnumerator slowDestoy() { destroing = true; for (int i = 0; i < 7; i++) { gameObject.transform.localScale -= new Vector3(0.02f, 0.02f, 0); yield return(new WaitForSeconds(0.01f)); } HeadPool.goHeadSpriteInPool(gameObject); destroing = false; }
IEnumerator createHead() { creatingHead = true; yield return(new WaitForSeconds(0.5f)); if (front == null || front.activeSelf == false) { headFromPool = HeadPool.getHead(); headFromPool.GetComponent <EnemyHead>().firstStart = false; headFromPool.transform.position = gameObject.transform.position; if (gameObject.GetComponent <EnemyBack>() != null) { gameObject.GetComponent <EnemyBack>().front = headFromPool; headFromPool.GetComponent <EnemyHead>().back = gameObject; } headSprite = HeadPool.getHeadSprite(); if (headSprite != null) { headSprite.transform.position = headFromPool.transform.position; headSprite.GetComponent <HeadSprite>().head = headFromPool; headSprite.transform.localScale = new Vector3(0, 0, 0); } yield return(new WaitForSeconds(0.01f)); headFromPool.GetComponent <EnemyHead>().isPlayerOnTarget = true; for (int i = 0; i < 28; i++) { headSprite.transform.localScale += new Vector3(0.005f, 0.005f, 0.005f); yield return(new WaitForSeconds(0.01f)); } yield return(new WaitForSeconds(0.05f)); creatingHead = false; yield return(new WaitForSeconds(Random.Range(5f, 25f))); headSprite.GetComponent <HeadSprite>().secondaryHead = true; headFromPool.GetComponent <EnemyHead>().secondaryHead = true; } else { creatingHead = false; } }
void Update() { if (player == null) { player = GameObject.Find("Player"); } //Логика движения змеи if (!secondaryHead) { if (firstStart) { if (transform.position != startPoint) { transform.position = Vector3.MoveTowards(transform.position, startPoint, Time.deltaTime * speed); } else { firstStart = false; } } else { if (isPlayerOnTarget) { transform.position = Vector3.MoveTowards(transform.position, player.transform.position, Time.deltaTime * speed); pointOnCircle = randomPiontOnCircle(); direction = new Vector3(pointOnCircle.x, pointOnCircle.y, 0f); } else { if (Mathf.Abs(transform.position.x) >= Mathf.Abs(screenSize.x) || Mathf.Abs(transform.position.y) >= Mathf.Abs(screenSize.y)) { if (Mathf.Abs(transform.position.x) >= Mathf.Abs(screenSize.x)) { direction = new Vector3(-direction.x, randomPiontOnCircle().y, 0f); transform.Translate(direction * Time.deltaTime * speed); if (Mathf.Abs(transform.position.x) >= Mathf.Abs(screenSize.x)) { transform.Translate(direction * Time.deltaTime * speed); if (Mathf.Abs(transform.position.y) >= Mathf.Abs(screenSize.x)) { isPlayerOnTarget = true; } } } if (Mathf.Abs(transform.position.y) >= Mathf.Abs(screenSize.y)) { direction = new Vector3(randomPiontOnCircle().x, -direction.y, 0f); transform.Translate(direction * Time.deltaTime * speed); if (Mathf.Abs(transform.position.y) >= Mathf.Abs(screenSize.x)) { transform.Translate(direction * Time.deltaTime * speed); if (Mathf.Abs(transform.position.y) >= Mathf.Abs(screenSize.x)) { isPlayerOnTarget = true; } } } } else { transform.Translate(direction * Time.deltaTime * speed); } } if (back == null) { HeadPool.goHeadInPool(gameObject); } } } else { tempBack = mainHead.GetComponent <EnemyHead>().back; if (tempBack != null) { for (int i = 0; i < 50; i++) { if (tempBack.GetComponent <EnemyBack>().back != null) { if (tempBack.GetComponent <EnemyBack>().back.GetComponent <EnemyTail>() != null) { tempTail = tempBack.GetComponent <EnemyBack>().back; break; } tempBack = tempBack.GetComponent <EnemyBack>().back; } else { break; } } } transform.position = Vector3.MoveTowards(transform.position, tempBack.transform.position, Time.deltaTime * speed * 1.5f); if (!attachingCreature) { StartCoroutine(attachCreature()); } } if (back.GetComponent <EnemyBack>().front != gameObject) { HeadPool.goHeadInPool(gameObject); } //Логика скорости if (System.Math.Round(score.score) % 10 == 0 && score.score > tempscore) { Debug.Log("+ Speed"); speed += 0.05f / GameObject.FindGameObjectsWithTag("EnemyHead").Length; tempscore += 10; } }