勇者与羁绊 游戏开发日志(七)

8 篇文章 0 订阅
2 篇文章 0 订阅

开发进度

完成了一部分卡牌使用的逻辑

流程图

在这里插入图片描述
绿色的表示是一个持续性的状态
红色的表示逻辑判定
蓝色的表示行为

流程叙述

Idle状态:
当这张卡牌抽到手牌时,其Active被设置为true的时候进入了Idle状态。
然后,通过在抽卡的方法中给刚刚抽上来的每张卡都发送"OnDraw"事件。

OnDrawEvent行为:
TODO:每张牌都会执行其在抽上来时触发的事件。
当所有的事件触发完成后,进行一下判定,判定这张卡是否是能被使用的卡,比如诅咒卡中大部分就是不能被使用的卡。如果是能使用的卡就进入监听状态。

监听(Listener)状态:
持续的对玩家的行为进行监听。
主要是监听玩家是否点击了这张卡牌,如果点击了,就进入选中状态。
当一张卡牌进入选中状态的同时,会给所有其它处于监听状态的卡牌发送一个事件,告诉它们现在已经有被选中的家伙了,你们都先暂停监听吧,所以所有其它的卡牌都进入了等待(Wait)状态。

等待(Wait)状态:
只等待恢复事件的触发,使其重新回到监听状态。

选中(Chosen)状态:
此时这张卡牌被选中,会跟随鼠标移动。
同时,这张牌应该会显示在所有的卡牌的最上一层的图层。
当鼠标移动至一定高度以上,则进入待使用状态。
当点击鼠标右键,将会释放这张牌,触发释放行为。

待使用(WaitUse)状态:
因为卡牌的待使用分成两种情况,一个是需要选择目标才能使用,还有一个是无需目标即可使用。
所以将待使用状态分成了两种,并在此之前做了一个判定,判定其是否需要目标。
两种待使用状态均会监听以下事件:
右键点击鼠标:触发释放行为。
当鼠标移到至一定高度以下,触发释放行为。

需要目标:
被选中的卡牌需要移动到画面底部中央位置。
显示目标选择箭头并让其跟随鼠标移动。
TODO:给场上所有的敌人发送"Wait For Be Target"事件
TODO:等待目标敌人所传回来的"Use"事件

无需目标:
卡牌继续跟随鼠标移动。
当鼠标左键按下或弹起时,均会触发使用使用事件。
(因为进入选中状态仅由鼠标左键按下触发,所以其实有两种方式来使用卡牌:
一种是按着鼠标左键将卡牌拖动到使用区松开;
另一种是单击一下鼠标选中,移动到使用区之后再单击一下。)

使用(Use)行为:
TODO:在这里要调用卡牌脚本上的使用方法

释放(Release)行为:
将这张牌回归到原来的位置。包括其原来的图层。
还有隐藏目标选择箭头。
再给所有处于等待状态的卡牌发送恢复事件。

使用后(Used)状态:
使用完之后进入的状态。
隐藏目标选择箭头。
给所有处于等待状态的卡牌发送恢复事件。

实现方式

流程图上大多数的步骤都可以通过PlayMaker提供的Action来解决。
但仍然有少部分PlayMaker没有直接提供Action的部分。

问题一:卡牌跟随鼠标移动

虽然没有直接提供Action,但可以通过Action的组合来实现。
在这里插入图片描述
值得注意的是,Get Mouse里面的Normalize要取消勾选,勾选上的时候获得的数字是一个代表鼠标屏幕上所在的百分比位置的浮点数。

问题二:卡牌的图层变化

因为选中的卡牌是要显示在其它卡牌的图层上方的,但是PlayMaker貌似没有直接提供控制这个的Action。
因此我自己写了两个扩展:

	[ActionCategory(ActionCategory.GameObject)]
    [Tooltip("将物体调整到其父物体下的指定顺位上,0为最下层,-1为最上层")]
    public class SetChildIndex : FsmStateAction
    {
        public FsmOwnerDefault gameObject;
        public FsmInt index;
        public override void OnEnter()
        {
            Fsm.GetOwnerDefaultTarget(gameObject).transform.SetSiblingIndex(index.Value);
            Finish();
        }
    }

    [ActionCategory(ActionCategory.GameObject)]
    [Tooltip("获取该物体位于其父物体下的顺位编号")]
    public class GetChildIndex : FsmStateAction
    {
        public FsmOwnerDefault gameObject;
        public FsmInt store;
        public override void OnEnter()
        {
            store.Value = Fsm.GetOwnerDefaultTarget(gameObject).transform.GetSiblingIndex();
            Finish();
        }
    }

运行效果

在这里插入图片描述
在这里插入图片描述

寻找合作

目前需要Unity开发程序员UI美术二次元人物原画师
数值、关卡、剧情等策划如果有兴趣也可以来聊一聊交流交流
如果有想参与项目的小伙伴,或者只是单纯想交朋友的,都可以添加我QQ:425202998

测试用例(记录用)

测试用例一
情景:左键在一张卡牌上按下,在其未进入使用区前,松开左键
应有效果:左键按下后,卡牌应跟随鼠标移动,松开左键没有变化
测试结果:一致
测试用例二
情景:左键在一张卡牌上点击,在其未进入使用区前,按下鼠标左键或右键
应有效果:点击后,卡牌应跟随鼠标移动,再次按下后卡牌取消选中回到原来位置
测试结果:不一致
问题:没有添加鼠标左键和右键的按下事件,只添加了右键松开时回到原来位置的功能
解决:
在这里插入图片描述
测试结果:点击后无效果
问题:因为在Listener的时候鼠标左键点下,在进入Chosen时,仍然处于同一帧中,导致在Chosen时就直接触发了左键点下,进入了释放行为。
解决:
在这里插入图片描述
在Listener与Chosen添加一个状态用于过度到下一帧
测试结果:一致
测试用例三
情景:左键在一张卡牌上按下,在其未进入使用区前,按下右键
应有效果:按下后,卡牌应跟随鼠标移动,按下右键后卡牌取消选中回到原来位置
测试结果:一致
测试用例四
情景:鼠标左键按下或点击一张不可被使用的诅咒牌
应有效果:无事发生
测试结果:一致
测试用例五
情景:鼠标左键按下一张无需目标的卡牌,拖入使用区,松开左键
应有效果:触发这张卡牌的使用事件
测试结果:一致
测试用例六
情景:鼠标左键点击一张无需目标的卡牌,拖入使用区,按下左键
应有效果:触发这张卡牌的使用事件
测试结果:一致
测试用例七
情景:鼠标左键按下一张无需目标的卡牌,拖入使用区,按下右键
应有效果:不会触发使用,并回到手牌中原来的位置
测试结果:一致
测试用例八
情景:鼠标左键点击一张无需目标的卡牌,拖入使用区,按下右键
应有效果:不会触发使用,并回到手牌中原来的位置
测试结果:一致
测试用例九
情景:鼠标左键按下一张无需目标的卡牌,拖入使用区,再拖回手牌区
应有效果:不会触发使用,并回到手牌中原来的位置
测试结果:一致
测试用例十
情景:鼠标左键点击一张无需目标的卡牌,拖入使用区,再拖回手牌区
应有效果:不会触发使用,并回到手牌中原来的位置
测试结果:一致
测试用例十一(TODO)
情景:鼠标左键按下一张需要目标的卡牌,拖入使用区,在鼠标没有悬停在目标身上时松开左键
应有效果:拖入使用区时卡牌移动到中央位置,并出现箭头,松开左键后不会触发使用,维持箭头跟随鼠标移动,当再次点击敌人时,仍可将敌人选为目标。
测试结果:不一致
原因:这是一个TODO项:还没有做目标是否被选中的判定
测试用例十二(TODO)
情景:鼠标左键按下一张需要目标的卡牌,拖入使用区,在鼠标悬停在目标身上时松开左键
应有效果:以被悬停的目标为对象,触发这张卡牌的使用事件,箭头消失
测试结果:不一致
原因:这是一个TODO项:还没有做目标是否被选中的判定
测试用例十三
情景:鼠标左键按下一张需要目标的卡牌,拖入使用区,按下右键
应有效果:拖入使用区时卡牌移动到中央位置,并出现箭头,按下右键后不会触发使用,并回到手牌中原来的位置,箭头消失
测试结果:一致
测试用例十四
情景:鼠标左键点击一张需要目标的卡牌,拖入使用区,按下右键
应有效果:拖入使用区时卡牌移动到中央位置,并出现箭头,按下右键后不会触发使用,并回到手牌中原来的位置,箭头消失
测试结果:一致
测试用例十五(TODO)
情景:鼠标左键点击一张需要目标的卡牌,拖入使用区,当鼠标位于一个目标上时按下左键
应有效果:以该目标为对象,触发这张卡牌的使用事件,箭头消失
测试结果:不一致
原因:这是一个TODO项:还没有做目标是否被选中的判定

测试用例十六
情景:鼠标左键按下一张需要目标的卡牌,拖入使用区,再拖回手牌区
应有效果:拖入使用区时卡牌移动到中央位置,并出现箭头,拖回手牌区后不会触发使用,并回到手牌中原来的位置,箭头消失
测试结果:一致
测试用例十七
情景:鼠标左键点击一张需要目标的卡牌,拖入使用区,再拖回手牌区
应有效果:拖入使用区时卡牌移动到中央位置,并出现箭头,拖回手牌区后不会触发使用,并回到手牌中原来的位置,箭头消失
测试结果:一致

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值