怎样用unity3d 横版格斗实现格斗游戏中的搓招

怎样实现格斗游戏中的“搓招”呢?吧友们能否提供个思路?_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:62,187贴子:
怎样实现格斗游戏中的“搓招”呢?吧友们能否提供个思路?收藏
想试着用U3D做格斗游戏。但现在卡在了“搓招”这里。。不知道要怎么做啊。格斗游戏中有用小键盘的数字表示方向的术语(如4表示后,6表示前,9表示斜上前,5表示回中之类),所以自己试着写了一个这样的东西:格斗游戏中不是经常有“显示输入历史”这样的功能吗,想到了这个便这样写了出来。本来是想,在10个输入履历中,如果其中有三个方向236(↓↘→)是在一个固定短的时间内紧挨着输入的话,就判定为做出了236的出招。但写到这发现不会了。。不知道到底该怎么实现。。同样,奔跑(dash)的效果也是,快速输入66(前前)即可奔跑,这个又要怎么实现呢?求大佬们提供思路
达内unity3d培训全程&实战教学&,unity3d专家讲师授课.免费unity3d课程试听中!到达内unity3d学院学习unity3d,只需4个月速成unity3d游戏工程师.
另外以下是我写的一些其他的基本功能//控制角色移动==================================================================
void Move()
float h = Input.GetAxisRaw(&Horizontal&);
float v = Input.GetAxisRaw(&Vertical&);
//控制角色行走
if (State == PlayerState.Stand && IsGround && v != -1) {
rd.velocity = new Vector2(h * WalkSpeed, rd.velocity.y);
//控制角色下蹲
if (v & 0 && IsGround) {
IsCrouch =
SetState(PlayerState.Crouch);
if (v == 0 && IsGround) {
IsCrouch =
SetState(PlayerState.Stand);
//控制角色跳跃
float distancefromGround = transform.position.y - ground.transform.position.y;
if (v & 0 && IsGround)
rd.AddForce(Vector2.up * JumpPower);
//更新动画参数
anim.SetFloat(&Horizon&, h);
anim.SetFloat(&Vertical&, v);
anim.SetBool(&IsCrouch&, IsCrouch);
anim.SetFloat(&velocityY&, rd.velocity.y);
anim.SetBool(&IsGround&, IsGround);
anim.SetFloat(&GroundDistance&, distancefromGround);
} //判断角色是否在地面============================================================
void OnCollisionEnter2D(Collision2D col) {
if (col.collider.tag == &Ground&) { IsGround = }
void OnCollisionExit2D(Collision2D coll)
if (coll.collider.tag == &Ground&) { IsGround = }
做一个输入状态机是最完美的方案
3L正解,顺便太过依赖数组就是无限bug。
给你一个比较搓的思路。定义一个全局变量int skill=0,如果你要搓招的话肯定是左边方向键(开始)右边技能键(结束)。不妨定义左边的方向键为“1”,右边的技能键是“0”。那么当你input方向键的任意值,skill=1,当你input技能键的任意值,skill=0。然后在skill=1的时候写一个函数判断,比如得到的是“asdj”,(应该可以直接用字符串比较)那么人物的某个state就发生相应改变。
我有一个队列的思路1.输入任意有效按键,队列入一个字符2.到达上限(如10个),输入任意有效按键,队列出一个,然后入一个刚才输入的字符3.超时,清空队列所有字符。或者每过一个时间间隔,从队列中出 N 个字符4.每一帧 或 每 N 帧 在队列中比对是否存在有效字符组合,如66,然后改变状态(释放技能),并将这些字符组合出队列。缺点就是不能实现如鬼泣那样的,按下一些按键后,过一段时间再按下一些按键,来释放特别技能。要把这个一同实现又更复杂了。
个人的思路:通过2个模块来实现1.输入输出处理模块 2.技能表处理模块输入输出处理是将玩家的按键传递给技能表,或者如果玩家在规定时间内没有把键按出来,则传递一个中断的信息给技能表。技能表主要处理玩家搓招的情况,如果按错了就重置搓招状态,如果按对了,则放出技能并重置搓招状态。并将按键的结果传递给输入输出模块,然后该模块控制出招。技能表是搓招的关键:我的想法是将技能表存在一个树形的结构中:假设出招表里面有这么几个招式:1:aaaa2:aaab3:aabb4:abab5:bbba6:bbab转换成树状图则变为如下:一共有17个节点,1号节点为初始节点。比如,玩家按了AAAB,则玩家按第一个A后,进入2号节点,玩家按第二个A进入3号节点,玩家按第三个A进入4号节点,玩家按B,进入6号节点。这是发现下一个节点已经没有了,则输出玩家搓出了技能2.节点回到1号如果玩家按得是AABA,则一次遍历1-2-3-7后,发现7号节点下没有A对应的节点,则发现玩家按错了,这时候,这个搓招将会被打断,并重新开始一个以A开头的搓招,即回到2号节点代码如下:节点类:class skillNote{public char myK//该节点的输入值,就是上面所说的A和Bpublic int skillN//该节点的一些信息,有些格斗游戏每按一次键都会出一次招,则这个位置可以存储一些招式的动作攻击力之类的消息。如果东西较多,可以将int型改为能存储更多信息的类型,比如类或结构体public List&skillNote& nextN//下方节点表。比如上图1号节点的下方节点就是2和12号}技能表类:public class skillTbl{private skillNote startN//初始节点,即1号节点private skillNote currentN//当前节点,玩家按到哪个节点就算哪个public skillTbl()//初始化类,这边做一些节点的加载,你可以存数据库里面读取{////读取数据库信息,加载整个技能表//currentNote = startN//初始化当前节点}public int inPutKey(char key)//玩家按了某个键后调用{//在当前节点的下方节点中寻找是否有技能符合当前按键的节点foreach (skillNote n in currentNote.nextNote){if (n.myKey == key){if (n.nextNote != null){currentNote =//如果不是技能的最后一个节点,则将该节点设为当前节点}else{currentNote = startN//如果是最后一个节点,则将当前节点变为初始节点。}return n.skillN}}//没有符合当前按键的技能,重置按键foreach (skillNote m in startNote.nextNote){if (m.myKey == key){currentNote =return currentNote.skillN}}currentNote = startNreturn 0;//返回0表示中断}public void resetNote()//当一段时间内没有输入,则自动清空,规定时间内没有按键时调用,比如连按两下后是快速后撤,但第二下后没有在规定时间内按出来,则直接清零{currentNote = startN}}
以前看过一个DOTA卡尔的技能做法,可以参考下1定义一个整数2上火球整数+1
上冰球整数+10
上雷球整数+100
下球则减相应的值3若整数==3,则给阳炎天火
其他技能同理
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或【技术向】让2D游戏中的角色互相跟随,角色队列的实现_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:62,187贴子:
【技术向】让2D游戏中的角色互相跟随,角色队列的实现收藏
先看效果(GIF,但愿能动)所谓角色队列,就是多个角色按照贪吃蛇的走法,沿着前面角色的路线行走,从而形成的队列。这种东西经常出现在日式RPG游戏中,新手们把这个逻辑看成“走到离目标XX距离时停止”,实现后却事与愿违,今天就来说说这种逻辑到底怎么实现。大概思路:1、实时检测目标的位置,若 目标现在的位置与上次检查时的位置 的距离大于已知float _gap,就把现在的值add到List&位置&中。2、实时检测List的count,只要count大于已知float _stopCount,就让自己走向List[0]记载的位置。3、细节无需讨论。。。代码截图:全部逻辑只需这个代码,挂载到跟着别人走的东西上,把被跟随的目标的Transform拖拽到public Transform Target;上即可。---------------------【在这里复制代码】---------------------using UnityEusing System.Cusing System.Collections.G[RequireComponent(typeof(Rigidbody2D))]public class FollowMovement : MonoBehaviour {
public Transform TargetTF;
//要跟随的目标
public float RecordGap = 0.2f;
//目标移动多远记录一次距离
public float StopCount = 2f;
//记录还剩多少时停止移动
public float WalkSpeed = 10f;
public float RunSpeed = 20f;
public float SpeedLerpRant = 0.1f;
//速度变化的缓动率
public float StartRunCount = 5f;
//距离目标多远后开始跑(单位是List的Item数)
public bool Running {
get { return PosList.Count & StartRunC }
private Rigidbody2D R
private List&Vector2& PosList = new List&Vector2&();void Awake () {
Rig = GetComponent&Rigidbody2D&();
Rig.constraints = RigidbodyConstraints2D.FreezeR
Rig.gravityScale = 0f;}
void OnDisabled() {
//失去意识时清空记录
PosList.Clear();
void FixedUpdate() {
if (TargetTF) {
//清除已经到达的点
while (PosList.Count & 0 && Vector2.Distance(transform.position, PosList[0]) & RecordGap) {
PosList.RemoveAt(0);
if (PosList.Count & 0) {
//添加当前Target位置
if (Vector2.Distance(TargetTF.position, PosList[PosList.Count - 1]) & RecordGap) {
PosList.Add(TargetTF.position);
//处理移动
if (PosList.Count & StopCount) {
Rig.velocity = Vector2.Lerp(Rig.velocity, new Vector2(
PosList[0].x - transform.position.x,
PosList[0].y - transform.position.y
).normalized * (Running ? RunSpeed : WalkSpeed), SpeedLerpRant);
Rig.velocity = Vector2.Lerp(Rig.velocity, Vector2.zero, SpeedLerpRant);
PosList.Add(TargetTF.position);
}}----------------------【代码结束】-------------------------------
达内unity3d培训全程&实战教学&,unity3d专家讲师授课.免费unity3d课程试听中!到达内unity3d学院学习unity3d,只需4个月速成unity3d游戏工程师.
看样子楼主也是2d游戏爱好者,能否谈谈为何不选择gamaker,flash等引擎来开发2d游戏
新手,膜拜大神
顶一个!!!!!
问下楼主,知道u3d导入itween时出现error building package错误是为什么啊!求解,先谢过!
火星时代unity3d,争当游戏大触,月薪过万小意思,手绘技能,概念设计,商业应用一步到位,你与u3d游戏特效设计师只差一步,赶快点击吧!
膜拜一下大神!
顶一下 正好要用
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 unity3d 鱼群算法实现 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信