Unity Cs玩家切换的操作

首先这里我们有俩个玩家,每一个玩家都有所对应的脚本以及操作,这里就需要用到对象数组去存储玩家(当然集合也可以使用,其方法大同小异),这里我用的是数组存储。

 private GameObject[] players;//玩家存放器

通过 GameObject.FindGameObjectsWithTag查询多个相同标签的对象

  players = GameObject.FindGameObjectsWithTag("Player");

为了方便知道对应玩家,这里给把玩家一一对应,避免出现找不到。
players[0] = GameObject.Find("Player1");
players[1] = GameObject.Find("G36C@Draw");

注:这里如果使用循环去依次查找玩家的话,用SetAction去隐藏其中一个玩家会出现下标异常的错误,因为隐藏玩家之后所对应的脚本,以及目标都会消失,无法获取。就相对于原本要查询俩个东西,一个东西突然消失找不到了,就异常了。

玩家的切换这里用到的是一个实时更新位置的一个操作,根据游戏的进行每帧进行调取玩家所对应的位置。通过查找Tag的方式取查找所对应的人的位置

player = GameObject.FindWithTag("Player").transform;

 void Update()
    {

        //每帧都调取更新玩家的位置
        player = GameObject.FindWithTag("Player").transform;

        if (feng >= 50)//当积分>50的时候开启切换玩家的功能
        {
            change = true;
            Changeplayer(change);//变换角色
        }
        //用于禁用玩家死后的脚本
        tt();

    }
 
    

tt()方法是用于禁用玩家的全部脚本,这里因为玩家有两位所以需要判定

 void tt()//角色死后脚本禁用
    {
        //玩家血量为空
        if (PlayerHp <= 0)
        {

            if (p1 != null)
            {
                //获取查找脚本,并关闭
                p1.GetComponent<PlayerACR>().enabled = false;
                p1.GetComponent<MouseLook>().enabled = false;
            }
            if (p2 != null)
            {
                p2.GetComponent<PlayerTwoG36C>().enabled = false;
                p2.GetComponent<MouseLook>().enabled = false;
            }
            //死亡UI
            PlayerDie.SetActive(true);
        }

 change = true;

Changeplayer(change);找到玩家并显示玩家,在原来玩家的位置上更新到另一个玩家

这里判断玩家是否存在,并给其所对应的操作。

 void Changeplayer(bool c)//换角色判断传入
    {
        if (c)
        {
    
        if (Input.GetKeyDown(KeyCode.Alpha1))//切换玩家2号
        {
                
                players[0].SetActive(false);//玩家1
                players[1].SetActive(true);//玩家2
                //players[0].GetComponent<PlayerACR>().enabled = false;
                //players[1].GetComponent<PlayerTwoG36C>().enabled = true;
                players[1].transform.position = player.position;
        }
        if (Input.GetKeyDown(KeyCode.Alpha2))//切换玩家1号
        {
                players[0].SetActive(true);
                players[1].SetActive(false);
                //players[0].GetComponent<PlayerACR>().enabled = true;
                //players[1].GetComponent<PlayerTwoG36C>().enabled = false;
                players[0].transform.position = player.position;
        }
    }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值