コード例 #1
0
    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);
        }
    }
コード例 #2
0
    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;
        }
    }