昨天羣裏一個朋友說他想嘗試着做一個多主角的遊戲。
比如一個小隊三個角色,可以自由的切換其中一個爲主操作角色,其他的變成AI。
這個問題其實有很多種解決方法,我這裏有一個最簡單的方法。
想法的示例圖如下:
新建一個空物體作爲多角色切換的管理,用Tab鍵來切換角色。
public GameObject[] MainPlayer;
private GameObject mpMainPlayer;// 主要角色
Vector3 forward;
public float speed = 1.0f;
[SerializeField]
private int iCharcaterCount = 0;
void Start()
{
forward = this.transform.TransformDirection(Vector3.forward);
}
void Update()
{
ChangeCharacter ();
SimpleMove ();
}
void ChangeCharacter()//角色切換
{
if(Input.GetKeyDown(KeyCode.Tab))
{
iCharcaterCount++;
if(iCharcaterCount >= MainPlayer.Length)
{
iCharcaterCount = 0;
}
mpMainPlayer = null;
}
switch(iCharcaterCount)
{
case 0 :
{
if(mpMainPlayer == null){mpMainPlayer = MainPlayer[0];Debug.Log(mpMainPlayer.name);}
if(MainPlayer[0].GetComponent<CharacterController>() == null)
{
MainPlayer[0].AddComponent<CharacterController>();
}
}break;
case 1:
{
if(mpMainPlayer == null){mpMainPlayer = MainPlayer[1];Debug.Log(mpMainPlayer.name);}
if(MainPlayer[1].GetComponent<CharacterController>() == null)
{
MainPlayer[1].AddComponent<CharacterController>();
}
}break;
case 2 :
{
if(mpMainPlayer == null){mpMainPlayer = MainPlayer[2];Debug.Log(mpMainPlayer.name);}
if(MainPlayer[2].GetComponent<CharacterController>() == null)
{
MainPlayer[2].AddComponent<CharacterController>();
}
}break;
default :
break;
}
}
void SimpleMove()//移動
{
if(Input.GetKey(KeyCode.W))
{
if (mpMainPlayer.GetComponent<CharacterController> () != null)
{
mpMainPlayer.GetComponent<CharacterController>().SimpleMove(forward * speed);
}
}
}
這樣就可以較爲簡單的做到切換角色了。