Unity3D 游戏开发之提示栏的工作实现详解.doc_第1页
Unity3D 游戏开发之提示栏的工作实现详解.doc_第2页
Unity3D 游戏开发之提示栏的工作实现详解.doc_第3页
Unity3D 游戏开发之提示栏的工作实现详解.doc_第4页
Unity3D 游戏开发之提示栏的工作实现详解.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Unity3D 游戏开发之提示栏的工作实现详解欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌。 昨天把GUI做了点出来,攻击之类差不多算是正常了。不过,现在无论是人物还是敌人,在生命为零的时候都不会再有其后的结果了。生命为零,理应死掉了才对。那么今天就先完成这一点吧,文章出处【狗刨学习网】。 打开编辑器,在_Script文件夹下双击打开PlayerControl脚本,首先来完善玩家角色的死亡。 在“判断”标签中,定义一个用于判断玩家是否死掉了的bool变量: private bool m_isDead=false;/是否死亡 然后在先前定义的GetStat函数最后加上一句判断玩家是否死掉了的语句: if(m_currentLife=0)m_animationDeath.wrapMode=WrapMode.ClampForever;m_animation.CrossFade(Death);m_isDead=true; 在这里判断当前生命是否为零,如果为零,首先将死亡的动画状态设定为只播放一次,然后播放死亡的动画。并同时把m_isDead设定为True。最后还要在Update函数中加上这样一句: if(!m_isDead)Attack();Move ();这时用于判断人物死亡后,就不给玩家控制人物了。 现在回到编辑器中运行游戏,当玩家生命为零,就死掉了,再也无法做什么了. = 玩家的死亡解决了,接下来是敌人的。 打开Enemy脚本,在Update函数中,加上一句判断敌人是否死亡的语句: if(!m_changeState.m_isDead) 案后将Update函数中的所有函数啊、语句什么的全都移动到这个判断语句中,然后再后边的GetState函数中进行死亡动画的播放: void GetState()m_currentLife=m_changeState.m_life;if(m_currentLife=0)m_animationm_animationDeath.wrapMode=WrapMode.ClampForever;m_animation.CrossFade(m_animationDeath);Destroy(m_transform.rigidbody);m_transform.collider.isTrigger=true; 这里就是判断敌人生命是否为零。为零就播放一次死亡动画,并将碰撞器的isTrigger设置为True(这时为了以后计算敌人死亡后会留下什么宝物准备的),并将rigidbody毁掉,免得敌人“哗”地一下,就掉得不见了。 运行游戏,查看一下效果。不出所料的话,应该是没问题了。 不过,这里有那么点问题。前面我将在Update函数中调用的GetState函数放在了判断敌人是否在Idle状态的else语句里面了,也就是说,这样一来,如果敌人处于idle状态,就不会发生生命值同步了,那么敌人就不会减生命了这里只需要把GetState函数移动到if(!m_isDead)前面就行了。 如图: 接下来。我觉得应该先把下边那个提示栏弄出点东西来,不然老那么光秃秃的也不好看。现目前能有什么提示信息呢?大概是生命减少之类的了吧。这个我就使用富文本了,节约、美观。 界面的布局的最后效果就是这样的了: 首先,点击提示栏,新建一个富文本框,就像如图中那般大小即可,将Anchor全都勾选,然后随便打几个字以作实验。 同时在它的旁边再新建一个ScrollBar在Anchor中勾选Right、Top和Bottom,在这个ScrollBar中再新建两个 Sliced,分别命名为Thumb和Track,都是将Anchor中的勾选完了的。选择好两个Sliced的背景,将Track缩放至 ScrollBar一样大小,而Thumb的宽跟Track一样,高则取一个合适的值即可。最后将这两个Sliced分别拖放给ScrollBar的 Thumb和Track(要选择ScrollBar的形式为Verticle),再勾选富文本框里面的Allow Scroll,将前面做好的ScrollBar拖给他,就完成了。这里为了美观起见,我还新建了一个Sliced作为富文本框的背景,就是这样! 运行游戏,东西差不多都没问题,只是符文本框在拖动的时候,太过于缓慢了,想要快一点的话,就还要改一改ScrollBar中的Increment,改成20就比较快了: 如果光有这些的话,当然不行。他还必须得实时显示游戏中的数据才可以。所以下面,继续写脚本了! 又是折腾好久,以下内容,依然是实验过后的最终结果,其他就不详叙了。 功能以经达到,现在慢慢道来:接上面的内容,实现提示栏的内容显示额方法,原本我是想新建一个脚本,理应数据绑定来实现的,最后失败了,改成了直接修改原来的BattleChange脚本来实现。 首先吧,新建一个标签,我明名为“TipsBar”,然后将这个标签指定给了提示栏的那个富文本框。接下来打开BattleChange脚本,在最前面定义一个富文本的脚本对象: private dfRichTextLabel m_dfTxet;/定义提示栏的脚本对象 在这里原本因为Start函数没有用到,我是把它删掉了的,所以现在还得定义回来,然后在Start函数中获取对象: void Start()m_dfTxet=GameObject.FindGameObjectWithTag(TipsBar).GetComponent();/获取提示栏的脚本对象 最后,就可以在脚本里对提示框的富文本内容进行修改了: public void Damage(int m_attack)if(m_life0)m_realAttack=(int)Random.Range(m_attack-m_attack*0.25f,m_attack+m_attack*0.25f);/随机伤害值,范围在正负25%以内/Debug.Log (伤害:+m_realAttack);if(m_realAttack-m_defense0)m_life-=(m_realAttack-m_defense);m_dfTxet.Text+=(+m_name+被狂殴了一顿,生命减少+(m_realAttack-m_defense)+点);if(Random.value0.9f)m_dfTxet.Text+=(看看上面那鲜红的字迹,就知道你造就了多少杀戮了!);elsem_life-=1;m_dfTxet.Text+=(+m_name+皮糙肉厚,生命只减少了+(m_realAttack-m_defense)+点);if(Random.value0.9f)m_dfTxet.Text+=(看看上面那鲜红的字迹,小心被咔嚓掉哦!);if(m_life=0)m_life=0;m_isDead=true;m_dfTxet.Text+=(+m_name+惨遭杀戮,抽搐了几下,死掉了.); 这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论