协程实现回合制的基本方法

实现行动轮换的基本方式

        由女巫项目探究而来的优化版本。(框架)

        看上图,要求实现熊大,熊二,熊三按照顺序执行行动。

using System.Collections;
using UnityEngine;

public class BattleUnit : MonoBehaviour
{
    public new string name;

    public IEnumerator Action()
    {
        print(name + "行动!");
        yield return new WaitForSeconds(2f);
    }
}

        上面是挂载在每头熊上的脚本,用来管理每个熊的不同行为。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BattleManager : MonoBehaviour
{
    public List<GameObject> UnitList;

    private IEnumerator Start()
    {
        //要用 yield return 语句等待携程,首先后面得是个协程,而不是IEnumerator类型的变量,目前不清楚Unity底层是怎么实现Coroutine的
        //以下3种方式均能实现按列表中顺序执行对应的Action()
        for (int i = 0; i < UnitList.Count; i++)
        {
            yield return StartCoroutine(UnitList[i].GetComponent<BattleUnit>().Action());
        }

        

        for (int i = 0; i < UnitList.Count; i++)
        {
            IEnumerator x = UnitList[i].GetComponent<BattleUnit>().Action();
            yield return StartCoroutine(x);
        }

        

        for (int i = 0; i < UnitList.Count; i++)
        {
            IEnumerator x = UnitList[i].GetComponent<BattleUnit>().Action();
            Coroutine y = StartCoroutine(x);
            yield return y;
        }

    }
}

        上面是管理器类,挂载在上图的同名空物体上。用来执行顺序逻辑,按照列表UnitList执行。

已经在Inspector中设置好了。重点是利用协程实现等待效果的思想,yield return (Coroutine) 括号中应写入某个协程,注意不要写入IEnumertor类型的变量,不会报错但是没有效果。

执行结果:

        每间隔 2 秒轮到下一头熊行动。

优化行动顺序判定

        我们知道,在许多回合制游戏中,会有一个或多个因素决定轮换顺序,列如For the King中就是依靠敏捷来决定行动顺序。        

using System.Collections;
using UnityEngine;

public class BattleUnit : MonoBehaviour
{
    public new string name;

    public float speed;
    public IEnumerator Action()
    {
        print(name + "行动!");
        yield return new WaitForSeconds(2f);
    }
}

        为此,我们为BattleUnit添加speed字段,用以决定行动顺序。

还为熊熊们增加了鬼怪作为对手,并设置他们的速度为:

熊大 1,熊二 2,熊三 3,鬼1 11,鬼2 12,鬼3 13。

也就是说排序好后执行顺序为:鬼3》鬼2》鬼1》熊三》熊二》熊大。

更新战斗管理器脚本为

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BattleManager : MonoBehaviour
{
    public List<GameObject> UnitList;    

    private void Awake()
    {        
        ScheduleBattleUnit();
    }
    private IEnumerator Start()
    {        

        for (int i = 0; i < UnitList.Count; i++)
        {
            yield return StartCoroutine(UnitList[i].GetComponent<BattleUnit>().Action());
        }
    }

    private void ScheduleBattleUnit()//排序战斗单位,依据每个单位的速度,决定行动顺序
    {
        //用冒泡排序根据速度将列表降序

        int Count = UnitList.Count;
        List<GameObject> list = UnitList;

        for (int i = Count;i >= 0;i--)
        {
            for(int j = 1;j < i;j++)
            {   
                //如果前一个单位的速度小于后面一个,则把后一个单位的速度与前一个交换,以实现速度越快越先行动
                if (list[j-1].GetComponent<BattleUnit>().speed < list[j].GetComponent<BattleUnit>().speed)
                {
                    GameObject temp = list[j-1];
                    list[j-1] = list[j];
                    list[j] = temp;                    
                }
            }
        }
    }
}

这样一来,执行结果就变成了:

        

符合需求!

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moweiii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值