//IEnumerator FishRoutine() //{ // while (true) // { // Vector3 center = fishManager.transform.position; // if (Vector3.Distance(transform.position, center) > fishManager.spawnRange) // { // turning = true; // } // else // { // if (turning) // { // speed = Random.Range(avgSpeed * 0.75f, avgSpeed * 1.25f); // } // turning = false; // } // if (turning) // { // Vector3 direction = center - transform.position; // transform.rotation = Quaternion.Slerp( // transform.rotation, // Quaternion.LookRotation(direction), // rotationSpeed * Time.deltaTime); // speed = Random.Range(catchUpSpeed * 0.75f, catchUpSpeed * 1.25f); // } // else // { // ApplyRules(); // } // yield return new WaitForSeconds(Random.Range(0.05f, 0.2f)); // } //} void ApplyRules() { // Rule 1: Go towards group center // Rule 2: Move towards goal of the group // Rule 3: Avoid other group members Vector3 vectorCenter = Vector3.zero; Vector3 vectorAvoid = Vector3.zero; float groupSpeed = 0; Vector3 goalPos = fishManager.GetGoalPosition(); float dist; int groupSize = 0; foreach (GameObject obj in fishManager.allFish) { if (obj != this.gameObject) { dist = Vector3.Distance(obj.transform.position, this.transform.position); if (dist <= neighbourDistance) { vectorCenter += obj.transform.position; groupSize++; if (dist < avoidanceDistance) { vectorAvoid += (this.transform.position - obj.transform.position); } FishLogic otherFish = obj.GetComponent <FishLogic>(); groupSpeed += otherFish.speed; } } } if (groupSize > 0) { vectorCenter /= groupSize; vectorCenter += goalPos - this.transform.position; speed = groupSpeed / groupSize; Vector3 direction = (vectorCenter + vectorAvoid) - transform.position; if (direction != Vector3.zero) { transform.rotation = Quaternion.Slerp( transform.rotation, Quaternion.LookRotation(direction), rotationSpeed * Time.deltaTime); } } }
void CreateGrid() { for (int i = 0; i < levelRawData.Length; i++) { int x = i / 5; int y = i % 5; if (levelRawData[i] != 0) { GameObject ballPrefabClone = (GameObject)Instantiate(ballPrefab, new Vector3(x - 2.5f, y - 3, 0), transform.rotation); fishCounter.Add(ballPrefabClone); FishLogic rememberLevel = ballPrefabClone.GetComponent <FishLogic>(); rememberLevel.level = levelRawData[i]; ballPrefabClone.gameObject.transform.localScale = new Vector3(1, ballPrefabClone.gameObject.transform.localScale.y - ((rememberLevel.level - 1) * 0.1f), 1); ballPrefabClone.gameObject.GetComponent <Renderer>().material = fishMaterials[rememberLevel.level - 1]; } } GameObject test = (GameObject)Instantiate(buttons[3], new Vector3(0, -5.36f, 0), Quaternion.identity); LvlIndicator setLevelIndicator = test.transform.Find("LevelIndicator 1").GetComponent <LvlIndicator>(); setLevelIndicator.lvl = LoadXMLData.idNumbers.IndexOf(ReloadLvl.levelIdCopy); }