首页 > 代码库 > Unity3D ARPG游戏开发《最初的幻想》之第一张地图与跳跃的改善详解
Unity3D ARPG游戏开发《最初的幻想》之第一张地图与跳跃的改善详解
前面我们终于实现了人物动画、相机控制及昼夜系统,现在继续吧,为了方便继续编写的敌人之类的脚本,所以打算今天先把第一张地图画个大概。结果,画了我好久的地图….. ≡(▔﹏▔)≡
我对美术方面的天赋简直是惨不忍睹了…..加之地图中途画的差不多的时候Unity又崩溃了一次….忘了保存(ㄒoㄒ)。于是又忙活半天….这个地图完全靠临时发挥了,第一张地图我画了好几次了,基本上每次画出来的地形之类的都完全不一样,所以就不多解释了,就上一张大概的场景图吧:
看起来好简单吧?唉……开启编辑器,这时侯如果在场景中转悠的话,很轻易就可以发现人物跳跃的功能有些瑕疵,就是跳动速度太快,相机都晃的花眼…..
事实证明,偷懒是行不通的……那么现在还是打开PlayerControl脚本改造一下吧。
在脚本的Move函数中,原本的跳跃功能只有短短两行,就是判断人物是否位于地面,在的话,就把人物向上抬升一段距离,结果造成跳跃过于突兀的效果。
现在的话,可以先把判断角色是否位于地面的那段if语句注释掉,删掉也可以。
为了使跳跃起来不那么突兀,我的想法是定义一个bool变量,当角色在地面上按下空格键时,变量为true,否则当角色跳起来超过一定高度就为false,判断高度的方式,我想来想去,用了射线检测的方式(当然,没用的错误的实验肯定不会写出来的)。
首先在最开始Start函数上面定义一个bool变量:
#region 判断 private bool m_jumpTmp=true;//判断是否可以跳跃 #endregion//然后在玩家按下空格后,定义一个临时的变量存放角色向下的方向,再判断角色是否位于地面,如果在地面,就可以挑。否则跳跃超过1.5米后,就得等落地了才能跳了: if(Input.GetKey(KeyCode.Space)) { Vector3 m_direction=m_transform.TransformDirection(Vector3.down);//方向向下的临时变量 if(m_controller.isGrounded) { m_jumpTmp=true; }else if(!Physics.Raycast(m_transform.position,m_direction,1.5f))//判断跳跃高度 { m_jumpTmp=false; } if(m_jumpTmp) { m_animation.CrossFade("Jump2"); m_transform.Translate(Vector3.up*m_jump*Time.deltaTime); } }
之所以把东西写在按空格键里面,是因为节省些许性能。把代码如此改了之后,再回到游戏中运行试一下,跳跃果然要缓多了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。