public void CreatePlayerShipDirectionReticles() { //Transform instancePlayerBodyTransform = instancePlayer.transform.Find("Body"); //Create ship direction reticles playerShipDirectionReticleTree = new GameObject("Player Direction Reticle Tree"); playerShipDirectionReticleTree.transform.parent = canvas.transform.Find("HUD Centre"); playerShipDirectionReticleTree.transform.SetSiblingIndex(0); //Make sure this is drawn underneath everything else for (int i = 0; i < playerShipDirectionReticleListLength; i++) { //Instantiate GameObject instancePlayerShipDirectionReticle = Instantiate( playerShipDirectionReticlePrefab, Vector3.zero, Quaternion.identity ); //Add to list playerShipDirectionReticleList.Add(instancePlayerShipDirectionReticle); //Put in tree //instancePlayerShipDirectionReticle.transform.parent = playerShipDirectionReticleTree.transform; instancePlayerShipDirectionReticle.transform.SetParent(playerShipDirectionReticleTree.transform, false); //Pass script vars DirectionReticle instancePlayerShipDirectionReticleScript = instancePlayerShipDirectionReticle.GetComponent <DirectionReticle>(); instancePlayerShipDirectionReticleScript.index = i; } }
private void UpdatePlayerShipFacingDirectionReticleUI() { if (playerShipDirectionReticleTree != null) { for (int i = 0; i <= playerShipDirectionReticleListLength - 1; i++) { //Get references Transform instancePlayerBodyTransform = control.generation.instancePlayer.transform.Find("Body"); GameObject instancePlayerShipDirectionReticle = playerShipDirectionReticleList[i]; /* * if (instancePlayerShipDirectionReticle == null) * { * return; * * //CreatePlayerShipDirectionReticles() * //instancePlayerShipDirectionReticle * //playerShipDirectionReticleList.Clear(); * } */ DirectionReticle instancePlayerShipDirectionReticleScript = instancePlayerShipDirectionReticle.GetComponent <DirectionReticle>(); //Position in front of player ship at distance relative to index Vector3 reticleWorldPos = instancePlayerBodyTransform.position + ((instancePlayerBodyTransform.rotation * Vector3.forward) * (playerShipDirectionReticleForwardOffset + (playerShipDirectionReticleSpacing * Mathf.Pow(1f + instancePlayerShipDirectionReticleScript.index, playerShipDirectionReticleSpacingPower)) * playerShipDirectionReticleScale) ); //Transform 3D world space to 2D canvas space instancePlayerShipDirectionReticle.transform.position = Camera.main.WorldToScreenPoint(reticleWorldPos); //Don't render when behind camera if (Vector3.Dot(reticleWorldPos - Camera.main.transform.position, Camera.main.transform.forward) < 0f) { instancePlayerShipDirectionReticle.SetActive(false); } else { instancePlayerShipDirectionReticle.SetActive(true); } } } }