首页 > 代码库 > Unity3D ARPG游戏开发《最初的幻想》之第一张地图与跳跃的改善详解

Unity3D ARPG游戏开发《最初的幻想》之第一张地图与跳跃的改善详解

前面我们终于实现了人物动画、相机控制及昼夜系统,现在继续吧,为了方便继续编写的敌人之类的脚本,所以打算今天先把第一张地图画个大概。结果,画了我好久的地图….. ≡(▔﹏▔)≡

我对美术方面的天赋简直是惨不忍睹了…..加之地图中途画的差不多的时候Unity又崩溃了一次….忘了保存(ㄒoㄒ)。于是又忙活半天….这个地图完全靠临时发挥了,第一张地图我画了好几次了,基本上每次画出来的地形之类的都完全不一样,所以就不多解释了,就上一张大概的场景图吧:

Unity3D ARPG游戏开发《最初的幻想》之第一张地图与跳跃的改善详解(三) - 第1张  | 成功智慧网-最好的游戏编程开发技术网站!

看起来好简单吧?唉……开启编辑器,这时侯如果在场景中转悠的话,很轻易就可以发现人物跳跃的功能有些瑕疵,就是跳动速度太快,相机都晃的花眼…..

事实证明,偷懒是行不通的……那么现在还是打开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);				}			}

 之所以把东西写在按空格键里面,是因为节省些许性能。把代码如此改了之后,再回到游戏中运行试一下,跳跃果然要缓多了。