Unity Camera Change C#

时间:2015-06-26 14:44:35

标签: c# unity3d

我有三个角色,每个角色都有一个相机连接到它们。默认它们被禁用但是一个。我做了一个字符选择器,它应该改变它们。我有一个问题,我可以移动选定的一个但是相机停留在最后一个。 这是脚本:

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    using UnityStandardAssets.Utility;


    public class GameManageer : MonoBehaviour {



        public Camera[] cams = new Camera[3];
        public Character CurrentCharacter;
        public List<Character> Characters = new List<Character>();
        public List<Item> AllItems;
        bool ShowCharWheel;
        public int SelectedCharacter;
        public int lastCharacter;
        public static GameManageer Instance;



        void Awake(){
            Instance = this;

            foreach (Character c in Characters){
                c.Instance = Instantiate(c.PlayerPrefab, c.HomeSpawn.position, c.HomeSpawn.rotation) as GameObject;
                c.Instance.GetComponent<PlayerController>().LocalCharacter = c;
            }
            ChangeCharacter(Characters[PlayerPrefs.GetInt("SelectedChar")]);
        }


        // Use this for initialization
        void Start () {


        }

        // Update is called once per frame
        void Update () {


            if (Input.GetKey (KeyCode.C)) {
                ShowCharWheel = true;
            } else {
                ShowCharWheel = false;
            }



        }


        void ChangeCharacter(Character c){

            lastCharacter = SelectedCharacter;
            SelectedCharacter = Characters.IndexOf (c);

            cams [SelectedCharacter].gameObject.SetActive (true);
            cams [lastCharacter].gameObject.SetActive (false);
            CurrentCharacter = c;
            Characters [lastCharacter].Instance.GetComponent<PlayerController> ().CanPlay = false;
            Characters [SelectedCharacter].Instance.GetComponent<PlayerController> ().CanPlay = true;              
            PlayerPrefs.SetInt ("SelectedChar", SelectedCharacter);
        }



        void OnGUI(){
            if (ShowCharWheel) {


                GUILayout.BeginArea(new Rect(Screen.width - 64, Screen.height - 192,64,192));
                foreach (Character c in Characters){
                    if (GUILayout.Button(c.Icon,GUILayout.Width(64),GUILayout.Height(64))){

                        ChangeCharacter(c);
                    }

                }
                GUILayout.EndArea();
            }

        }
    }

    [System.Serializable]
    public class Character {

        public string Name;
        public Texture2D Icon;
        public GameObject PlayerPrefab;
        public GameObject Instance;
        public Transform HomeSpawn;
    }
    [System.Serializable]
    public class Item{
        public string Name;
        public Texture2D Icon;
        public ItemInstance InstancePrefab;
    }

2 个答案:

答案 0 :(得分:0)

这应该做的工作:

cams[SelectedCharacter].enabled = true;
cams[lastCharacter].enabled = false;

答案 1 :(得分:0)

使用深度:

foreach (Camera cam in cams)
{
    cam.depth = cam == cams[SelectedCharacter] ? 10 : 0;
}

我认为这里真正的问题是你在场景中有更多的摄像机,你必须管理,除了最后和当前选择的角色......在这种情况下:

foreach (Camera cam in cams)
{
    cam.SetActive(cam == cams[SelectedCharacter]);
}