unity3d实现攻击扣血的流程

这个流程主要实现以下功能:界面上显示玩家当前的总血量,当被其他玩家发射的子弹打中后,会减1格血,血量为0时判定为死亡,会重置玩家的位置到出生点,并且重设血量为最大血量。实现这个逻辑,分了以下几个步骤。1.维护玩家血量相关信息。首先玩家血量要用图形化在界面上显示,首先需要在场景中建立一个GUITexture,这里起名为GUI_heart,来表示当前血量图片。为了控制血量的显示,为GUI_heartf附加了一个控制脚本,名为HeartControl.cs。这个脚本的内容如下:01.usingUnityEngine;02.usingSystem.Collections;03.04.publicclassHeartControl:MonoBehaviour{05.publicTexture2D[]heartImageArray;06.privateconstintmaxLives=5;07.privatestaticintlives=maxLives;08.09.publicstaticvoidDecreaseLive()10.{11.lives--;12.if(lives==0)13.{14.lives=maxLives;15.PlayerManager.selfPlayer.position=GameObject.Find("SpwanPlayer").transform.position;16.}17.}18.//Usethisforinitialization19.voidStart(){20.21.}22.23.//Updateiscalledonceperframe24.voidUpdate(){25.if(PlayerManager.selfPlayer!=null)26.{27.guiTexture.enabled=true;28.guiTexture.texture=heartImageArray[lives-1];29.}30.else31.{32.guiTexture.enabled=false;33.}34.35.36.}37.}这里heartImageArray表示不同血量所对应的血量图片,血量用心型图标来显示,5格血就是5颗心。把这个数组声明为public,可以在编辑器中,设置这个数组的尺寸,以及每个入口点所对应的图片,十分方便。maxLives就是最大血量有5格血,lives是当前人物的血量。在每帧更新函数Update()中,首先检查当前玩家的变量是否为空,为空可能是因为是Server端,这种情况下就不需要显示血量,因此将图片设为false:guiTexture.enabled=false;如果不为空,那么将根据当前血量的值,把对应数组中的图片赋值给这个guiTexture当前的texture,这样就实现图片随血量值的变化而变化。这里PlayerManager.selfPlayer中的PlayerManager我自己建立的一个全局的静态类,维护了唯一的静态变量privatestaticTransform_selfplayer,代表客户端所对应的玩家自己。这个类可以被所有脚本所访问,访问起来十分方便,实现如下:01.usingUnityEngine;02.usingSystem.Collections;03.usingSystem;04.05.publicstaticclassPlayerManager{06.07.privatestaticTransform_selfplayer=null;08.publicstaticTransformselfPlayer09.{10.get11.{12.return_selfplayer;13.}14.set15.{16._selfplayer=value;17.18.}19.}20.21.}后期随着逻辑的复杂,可以为这个脚本的玩家增加更多的数据来维护。然后是DecreaseLive函数,这个函数可以被外部所调用,给玩家减血,调用后,自动扣除一滴血,为0时,正如规定的一样,重设玩家血量为最大血量,并且找到重生点的位置,将玩家位置重置。2.控制子弹打中玩家的逻辑实现大体流程是先给玩家的人物身上附加一个释放子弹的脚本,当客户端自己的玩家按键触发技能时,就调用一个网络上的RPC,告诉所有客户端和服务器在本地创建一个飞行的子弹。并且在这个人物脚本里添加一个响应人物碰撞的事件函数,然后检查是不是碰撞的对象是子弹,而且不是这个人物所发射的,如果检测成功,就调用HeartControl脚本的减血函数。[狗刨学习网]这个脚本名为Shoot.cs,实现如下:001.usingUnityEngine;002.usingSystem.Collections;003.004.publicclassShoot:MonoBehaviour005.{006.publicTextureskillTex1;007.publicTextureskillTex2;008.publicTransformbulletPrefab;009.publicTransformexplosionEffect;010.publicAnimationClipattackAnim;011.012.//Usethisforinitialization013.voidStart()014.{015.016.}017.018.//Updateiscalledonceperframe019.voidUpdate()020.{021.if(networkView.isMine&&Input.GetKeyUp("2")){022.ShootBullet();023.024.}025.if(networkView.isMine&&Input.GetKeyUp("3")){026.ExplosiveEffect();027.028.}029.030.}031.032.voidOnGUI()033.{034.if(networkView.isMine)035.{036.if(GUI.Button(newRect((float)(0.5*Screen.width-6...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?