void Start() { Application.targetFrameRate = Screen.currentResolution.refreshRate; // Filling in for player while terrain loads TerrainControllerSimple terrain = FindObjectOfType <TerrainControllerSimple>(); if (terrain != null) { terrain.SetPlayer(startPoint); } if (deathScreen != null) { deathScreen.gameObject.SetActive(false); } if (pauseScreen != null) { pauseScreen.gameObject.SetActive(false); } else { pauseScreen = GameObject.FindGameObjectWithTag("Pause"); if (pauseScreen != null) { pauseScreen.gameObject.SetActive(false); } } if (optionsScreen != null) { optionsScreen.gameObject.SetActive(false); } else { optionsScreen = GameObject.FindGameObjectWithTag("Options"); if (optionsScreen != null) { optionsScreen.gameObject.SetActive(false); } } if (fadeBlackScreen != null) { BlackFader = fadeBlackScreen.GetComponent <Image>(); if (BlackFader != null) { fadeBlackScreen.gameObject.SetActive(true); SetFade(false); } } ScreenX = Screen.width; ScreenY = Screen.height; globe = FindObjectOfType <Globe>(); InitGlobe(); //if (playerPrefab != null) //{ // bSpawningPlayer = true; // SetStartPosition(); //} if (loadingPanel != null) { loadingPanel.SetActive(false); } }
public void InitPlayerStart() { if (startPoint != null) { RaycastHit[] hits; Vector3 toNewPosition = Vector3.zero; Vector3 rayOrigin = startPoint.position + (Vector3.up * 50000f); Vector3 rayDirection = Vector3.down * 80000f; hits = Physics.RaycastAll(rayOrigin, rayDirection, 80000f); bool bFoundLandingSpot = false; if (hits.Length > 0) { // First try if ((Vector3.Dot(Vector3.up, hits[0].normal) > 0.95f) && hits[0].transform.gameObject.CompareTag("Land")) { bFoundLandingSpot = true; } while (!bFoundLandingSpot) { Vector3 newRandomSample = Random.insideUnitSphere * 1000f; hits = Physics.RaycastAll(rayOrigin + newRandomSample, rayDirection, 80000f); for (int i = 0; i < hits.Length; i++) { if ((Vector3.Dot(Vector3.up, hits[i].normal) > 0.95f) && hits[i].transform.gameObject.CompareTag("Land")) { bFoundLandingSpot = true; } } } int numHits = hits.Length; for (int i = 0; i < numHits; i++) { // Player position RaycastHit hit = hits[i]; Vector3 newPlayerPosition = hit.point + (Vector3.up * 2f); Transform spawnedPlayer = Instantiate(playerPrefab, newPlayerPosition, Quaternion.identity); player = spawnedPlayer; bSpawningPlayer = false; // Hook up systems to player TerrainControllerSimple terrain = FindObjectOfType <TerrainControllerSimple>(); if (terrain != null) { terrain.SetPlayer(player); } ObjectSpawner spawner = FindObjectOfType <ObjectSpawner>(); if (spawner != null) { spawner.SetPlayer(player); } SmoothMouseLook cam = FindObjectOfType <SmoothMouseLook>(); if (cam != null) { cam.body = player; } MiniMap miniMap = FindObjectOfType <MiniMap>(); if (miniMap != null) { miniMap.SetLookObject(player); } // Spawn player's objects ie. Vehicle int numObjs = playerObjects.Length; if (numObjs > 0) { Vector3 offset = player.forward * 50f * (i + 1); Vector3 spawnOffset = (Vector3.forward * 10f) + (Vector3.right * Random.Range(-6f, 6f)); Vector3 rayStart = newPlayerPosition; RaycastHit rayHit; if (Physics.Raycast(rayStart, offset, out rayHit)) { spawnOffset = Vector3.ClampMagnitude(rayHit.point - newPlayerPosition, Random.Range(10f, offset.magnitude)); } Vector3 rotationVector = Random.onUnitSphere; rotationVector.y = 0f; Quaternion spawnRotation = Quaternion.Euler(rotationVector); Transform newObj = Instantiate(playerObjects[i], newPlayerPosition + spawnOffset + Vector3.up, spawnRotation); newObj.gameObject.SetActive(true); } if (player != null) { break; } } } } else { bSpawningPlayer = false; } }