private void Update() { ScoutAvoidSystem temp = gameObject.GetComponentInChildren <ScoutAvoidSystem>(); if (temp.b_avoidUFOAtack == true) { AvoidAttack(); } v3_Scout.x = scoutTransform.position.x; v3_Scout.y = scoutTransform.position.y; v3_Scout.z = scoutTransform.position.z; /* * if (Input.GetKeyDown(KeyCode.W)) * { * ObjPoolManager.cl_ObjPoolManager.FireS1G1(); * ObjPoolManager.cl_ObjPoolManager.FireS1G2(); * * ObjPoolManager.cl_ObjPoolManager.FireS2G1(); * ObjPoolManager.cl_ObjPoolManager.FireS2G2(); * * ObjPoolManager.cl_ObjPoolManager.FireS3G1(); * ObjPoolManager.cl_ObjPoolManager.FireS3G2(); * * ObjPoolManager.cl_ObjPoolManager.FireS4G1(); * ObjPoolManager.cl_ObjPoolManager.FireS4G2(); * } */ }
void FixedUpdate() { if (b_IsAimed_Scout1 == true || b_IsAimed_Scout2 == true || b_IsAimed_Scout3 == true || b_IsAimed_Scout4 == true) { f_counterS1 -= Time.deltaTime; f_counterS2 -= Time.deltaTime; f_counterS3 -= Time.deltaTime; f_counterS4 -= Time.deltaTime; if (f_counterS1 < 5 || f_counterS2 < 5 || f_counterS3 < 5 || f_counterS4 < 5) { go_gunFire1.SetActive(false); go_gunFire2.SetActive(false); } if (f_counterS1 <= 0 && b_IsAimed_Scout1 == true) { b_IsAimed_Scout1 = false; f_counterS1 = 3; go_flame1.SetActive(true); go_flame2.SetActive(true); } if (f_counterS2 <= 0 && b_IsAimed_Scout2 == true) { b_IsAimed_Scout2 = false; f_counterS2 = 3; go_flame1.SetActive(true); go_flame2.SetActive(true); } if (f_counterS3 <= 0 && b_IsAimed_Scout3 == true) { b_IsAimed_Scout3 = false; f_counterS3 = 3; go_flame1.SetActive(true); go_flame2.SetActive(true); } if (f_counterS4 <= 0 && b_IsAimed_Scout4 == true) { b_IsAimed_Scout4 = false; f_counterS4 = 3; go_flame1.SetActive(true); go_flame2.SetActive(true); } } float distanceToTarget2 = Vector3.Distance(transform.position, pointPatrol1TransformTarget.position); float distanceToTarget3 = Vector3.Distance(transform.position, pointPatrol2TransformTarget.position); float distanceToTarget4 = Vector3.Distance(transform.position, ufo1TransformTarget.position); float distanceToTarget5 = Vector3.Distance(transform.position, ufo2TransformTarget.position); float distanceToTarget6 = Vector3.Distance(transform.position, ufo3TransformTarget.position); ScoutAvoidSystem temp = gameObject.GetComponentInChildren <ScoutAvoidSystem>(); // Scouts Behavior ---> // Scout 1 behavior if (this.gameObject.name == "scout1" && temp.b_avoidUFOAtack == false) { //Moving to Patrol Point 1 if (Vector2.Distance(transform.position, pointPatrol1TransformTarget.position) > 0.5f && b_movingToPatrolPoint1 == true && b_IsAimed_Scout1 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = pointPatrol1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, pointPatrol1TransformTarget.position) <= 0.5f) { b_movingToPatrolPoint1 = false; b_movingToPatrolPoint2 = true; } //Moving to Patrol Point 2 if (Vector2.Distance(transform.position, pointPatrol2TransformTarget.position) > 0.5f && b_movingToPatrolPoint2 == true && b_IsAimed_Scout1 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = pointPatrol2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, pointPatrol2TransformTarget.position) <= 0.5f && b_movingToPatrolPoint2 == true) { b_movingBackToBase = true; b_movingToPatrolPoint2 = false; } //Moving to Base if (Vector2.Distance(transform.position, mainStationTransformTarget.position) > 0.5f && b_movingBackToBase == true && b_IsAimed_Scout1 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = mainStationTransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, mainStationTransformTarget.position) <= 0.5f && b_movingBackToBase == true) { b_movingBackToBase = false; b_movingToPatrolPoint1 = true; } //Chasing UFO if (b_chasingUFO == true && b_IsAimed_Scout1 == false && b_chasingAsteroid == false) { ScoutSensor tempSensor = gameObject.transform.GetComponentInChildren <ScoutSensor>(); if (tempSensor.b_colIsUFO1 == true) { Vector3 targetDir = ufo1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsUFO2 == true) { Vector3 targetDir = ufo2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsUFO3 == true) { Vector3 targetDir = ufo3TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } } //Chasing Asteroid if (b_chasingUFO == false && b_IsAimed_Scout1 == false && b_chasingAsteroid == true) { ScoutSensor tempSensor = gameObject.transform.GetComponentInChildren <ScoutSensor>(); if (tempSensor.b_colIsAsteriod1 == true) { Vector3 targetDir = asteroid1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsAsteroid2 == true) { Vector3 targetDir = asteroid2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } } } // Scout 2 behavior if (this.gameObject.name == "scout2") { //Moving to Patrol Point 1 if (Vector2.Distance(transform.position, pointPatrol1TransformTarget.position) > 0.5f && b_movingToPatrolPoint1 == true && b_IsAimed_Scout2 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = pointPatrol1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, pointPatrol1TransformTarget.position) <= 0.5f) { b_movingToPatrolPoint1 = false; b_movingToPatrolPoint2 = true; } //Moving to Patrol Point 2 if (Vector2.Distance(transform.position, pointPatrol2TransformTarget.position) > 0.5f && b_movingToPatrolPoint2 == true && b_IsAimed_Scout2 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = pointPatrol2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, pointPatrol2TransformTarget.position) <= 0.5f && b_movingToPatrolPoint2 == true) { b_movingBackToBase = true; b_movingToPatrolPoint2 = false; } //Moving to Base if (Vector2.Distance(transform.position, mainStationTransformTarget.position) > 0.5f && b_movingBackToBase == true && b_IsAimed_Scout2 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = mainStationTransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, mainStationTransformTarget.position) <= 0.5f && b_movingBackToBase == true) { b_movingBackToBase = false; b_movingToPatrolPoint1 = true; } //Chasing UFO if (b_chasingUFO == true && b_IsAimed_Scout2 == false && b_chasingAsteroid == false) { ScoutSensor tempSensor = gameObject.transform.GetComponentInChildren <ScoutSensor>(); if (tempSensor.b_colIsUFO1 == true) { Vector3 targetDir = ufo1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsUFO2 == true) { Vector3 targetDir = ufo2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsUFO3 == true) { Vector3 targetDir = ufo3TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } } //Chasing Asteroid if (b_chasingUFO == false && b_IsAimed_Scout2 == false && b_chasingAsteroid == true) { ScoutSensor tempSensor = gameObject.transform.GetComponentInChildren <ScoutSensor>(); if (tempSensor.b_colIsAsteriod1 == true) { Vector3 targetDir = asteroid1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsAsteroid2 == true) { Vector3 targetDir = asteroid2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } } } // Scout 3 behavior if (this.gameObject.name == "scout3") { //Moving to Patrol Point 1 if (Vector2.Distance(transform.position, pointPatrol1TransformTarget.position) > 0.5f && b_movingToPatrolPoint1 == true && b_IsAimed_Scout3 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = pointPatrol1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, pointPatrol1TransformTarget.position) <= 0.5f) { b_movingToPatrolPoint1 = false; b_movingToPatrolPoint2 = true; } //Moving to Patrol Point 2 if (Vector2.Distance(transform.position, pointPatrol2TransformTarget.position) > 0.5f && b_movingToPatrolPoint2 == true && b_IsAimed_Scout3 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = pointPatrol2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, pointPatrol2TransformTarget.position) <= 0.5f && b_movingToPatrolPoint2 == true) { b_movingBackToBase = true; b_movingToPatrolPoint2 = false; } //Moving to Base if (Vector2.Distance(transform.position, mainStationTransformTarget.position) > 0.5f && b_movingBackToBase == true && b_IsAimed_Scout3 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = mainStationTransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, mainStationTransformTarget.position) <= 0.5f && b_movingBackToBase == true) { b_movingBackToBase = false; b_movingToPatrolPoint1 = true; } //Chasing UFO if (b_chasingUFO == true && b_IsAimed_Scout3 == false && b_chasingAsteroid == false) { ScoutSensor tempSensor = gameObject.transform.GetComponentInChildren <ScoutSensor>(); if (tempSensor.b_colIsUFO1 == true) { Vector3 targetDir = ufo1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsUFO2 == true) { Vector3 targetDir = ufo2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsUFO3 == true) { Vector3 targetDir = ufo3TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } } //Chasing Asteroid if (b_chasingUFO == false && b_IsAimed_Scout3 == false && b_chasingAsteroid == true) { ScoutSensor tempSensor = gameObject.transform.GetComponentInChildren <ScoutSensor>(); if (tempSensor.b_colIsAsteriod1 == true) { Vector3 targetDir = asteroid1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsAsteroid2 == true) { Vector3 targetDir = asteroid2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } } } // Scout 4 behavior if (this.gameObject.name == "scout4") { //Moving to Patrol Point 1 if (Vector2.Distance(transform.position, pointPatrol1TransformTarget.position) > 0.5f && b_movingToPatrolPoint1 == true && b_IsAimed_Scout4 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = pointPatrol1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, pointPatrol1TransformTarget.position) <= 0.5f) { b_movingToPatrolPoint1 = false; b_movingToPatrolPoint2 = true; } //Moving to Patrol Point 2 if (Vector2.Distance(transform.position, pointPatrol2TransformTarget.position) > 0.5f && b_movingToPatrolPoint2 == true && b_IsAimed_Scout4 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = pointPatrol2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, pointPatrol2TransformTarget.position) <= 0.5f && b_movingToPatrolPoint2 == true) { b_movingBackToBase = true; b_movingToPatrolPoint2 = false; } //Moving to Base if (Vector2.Distance(transform.position, mainStationTransformTarget.position) > 0.5f && b_movingBackToBase == true && b_IsAimed_Scout4 == false && b_chasingUFO == false && b_chasingAsteroid == false) { Vector3 targetDir = mainStationTransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (Vector2.Distance(transform.position, mainStationTransformTarget.position) <= 0.5f && b_movingBackToBase == true) { b_movingBackToBase = false; b_movingToPatrolPoint1 = true; } //Chasing UFO if (b_chasingUFO == true && b_IsAimed_Scout4 == false && b_chasingAsteroid == false) { ScoutSensor tempSensor = gameObject.transform.GetComponentInChildren <ScoutSensor>(); if (tempSensor.b_colIsUFO1 == true) { Vector3 targetDir = ufo1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsUFO2 == true) { Vector3 targetDir = ufo2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsUFO3 == true) { Vector3 targetDir = ufo3TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } } //Chasing Asteroid if (b_chasingUFO == false && b_IsAimed_Scout4 == false && b_chasingAsteroid == true) { ScoutSensor tempSensor = gameObject.transform.GetComponentInChildren <ScoutSensor>(); if (tempSensor.b_colIsAsteriod1 == true) { Vector3 targetDir = asteroid1TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } if (tempSensor.b_colIsAsteroid2 == true) { Vector3 targetDir = asteroid2TransformTarget.position - transform.position; float angle = Mathf.Atan2(targetDir.y, targetDir.x) * Mathf.Rad2Deg - 90f; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.RotateTowards(transform.rotation, q, f_rotationSpeed); transform.Translate(Vector3.up * Time.deltaTime * f_speed); } } } }