昨天群里一个朋友说他想尝试着做一个多主角的游戏。
比如一个小队三个角色,可以自由的切换其中一个为主操作角色,其他的变成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);
}
}
}
这样就可以较为简单的做到切换角色了。