(超能力论坛)想找个熟悉虚幻4和西佳佳的老师可以吗?
听说街霸5是虚幻4做的,那么像街霸这种搓招系统在虚幻4里是怎么靠蓝图实现的呢?比如按两下w加鼠标左键释放一个技能。新手自己摸索了半天都无法完美实现,想找个老师有偿指导一下。 虚幻商城有搓招系统的蓝图卖,可以买一个研究下 本帖最后由 w酱 于 2019-5-28 11:56 编辑coyote time(输入缓冲)了解一下,
先写一个array还是stack随便什么,然后tick的时候把输入键的id塞进缓存里,然后判断帧计数
之前按了几个指令多少帧按下了要干什么后面响应事件就完事了
虽然我觉得这种跟种引擎没关系就是了.....
natsu1211 发表于 2019-5-28 11:10
https://www.udemy.com/introduction-to-unreal-engine-4-ability-system/
感谢帮忙,可惜英文教程我看起来太吃力了 慕容断月 发表于 2019-5-28 11:25
虚幻商城有搓招系统的蓝图卖,可以买一个研究下
大佬可以麻烦给个搜索的关键词吗? w酱 发表于 2019-5-28 11:54
coyote time(输入缓冲)了解一下,
先写一个array还是stack随便什么,然后tick的时候把输入键的id塞进缓存 ...
可以详细一点吗亲,新手刚学还望见谅 就是个状态转移图,招数不多的话直接用数组+字符串匹配就可以,每一帧判断按键是否满足状态转换条件,满足就进下一状态,不满足就回到初始状态(比如不匹配、帧计数间隔过长等)。如果进入了出招的状态就出招,出完招回到初始状态。 Lunamos 发表于 2019-5-28 13:03
就是个状态转移图,招数不多的话直接用数组+字符串匹配就可以,每一帧判断按键是否满足状态转换条件,满足 ...
谢谢,我尝试一下 女仆高达 发表于 2019-5-28 13:01
可以详细一点吗亲,新手刚学还望见谅
我随便写点别的语言伪代码,对错也没研究,凑合看吧
public class Test_BufferedInput
{
void onCreate()
{
clearBuffer();
}
void clearBuffer()
{
ctTimer = 0;
for (int i = 0; i < 4; ++i) buffer = EInputBtnType.None;
}
void Push_Skill(string t)
{
//blabla...放点什么技能然后处理一下关掉状态什么的
}
public bool bCharacterReady = true;
public bool bCharacterCanAttack = true;
private EInputBtnType[] buffer = new EInputBtnType;
private int ctTimer = 0;
void onTick()
{
if (bCharacterReady) checkActionsOnTIck();
}
//逐帧检查状态
void checkActionsOnTIck()
{
//如果能放技能
if (bCharacterCanAttack)
{
//当前帧按下了W
if (InputProcessor.IsPressed(EInputBtnType.BTN_W))
{
buffer = buffer;
buffer = buffer;
buffer = buffer;
buffer = EInputBtnType.BTN_W;
}
//当前帧按下了鼠标左键
else if (InputProcessor.IsPressed(EInputBtnType.BTN_LMB))
{
buffer = buffer;
buffer = buffer;
buffer = buffer;
buffer = EInputBtnType.BTN_LMB;
}
//blabla...
//如果10帧以内有按键输入并且符合 w + w + lmb
if (ctTimer < 10)
{
if (buffer == EInputBtnType.BTN_LMB && buffer == EInputBtnType.BTN_W &&
buffer == EInputBtnType.BTN_W)
{
//放技能
Push_Skill("skill_w+lmb");
ctTimer = 10;
for (int i = 0; i < 4; ++i) buffer = EInputBtnType.None;
}
else
{
//按键不是这个组合
//blabla...
}
}
//按键超时,清空缓冲
else if (buffer != EInputBtnType.None)
{
ctTimer = 0;
for (int i = 0; i < 4; ++i) buffer = EInputBtnType.None;
}
ctTimer++;
}
//如果不能放技能,清空
else
{
if (ctTimer > 0)
{
ctTimer = 0;
for (int i = 0; i < 4; ++i) buffer = EInputBtnType.None;
}
//blabla...
}
}
}
本帖最后由 zag 于 2019-5-28 14:21 编辑
以前论坛里有人贴过分析街霸的指令系统的网页,
简单来说就是对于每一个角色的每一个技能你都需要有一个buffer(具体实现方法可以不同),
每个渲染循环你对输入进行处理的时候,根据技能的设置,也就是指令间无效指令的宽容程度等对buffer进行填充,最后释放先达到有效的技能
要实现街霸5的效果稍微有些复杂就是了 本帖最后由 慕容断月 于 2019-5-28 14:52 编辑
女仆高达 发表于 2019-5-28 12:56
大佬可以麻烦给个搜索的关键词吗?
https://www.unrealengine.com/marketplace/input-buffer
拿好
之前说的应该是这个输入预存的插件 和引擎毫无关系吧 w酱 发表于 2019-5-28 14:03
我随便写点别的语言伪代码,对错也没研究,凑合看吧
太感谢了!试着用你的方法去套用一下蓝图,真的帮助很大 慕容断月 发表于 2019-5-28 14:49
https://www.unrealengine.com/marketplace/input-buffer
拿好
谢谢大佬,这个正是我需要的
页:
[1]