十五章:主角受攻击效果以及场景切换

本篇博客将《黑暗之光》开发的最后工作做完,包括之前未实现的主角被击效果,以及实际运行中的场景切换。

15.1 主角的受攻击效果

我们参照WolfBaby中的受攻击效果( 链接),制作主角的对应效果
    public float missRate = 0.25f;public GameObject HUDTextPrefab;private GameObject HUDTextGO;public GameObject playerHUDTextGO;private HUDText showText;private UIFollowTarget followTarget;public AudioClip missSound;public void BeDamage(int attackValue){int defence = Equipment._instance.defense + ps.defense + ps.defense_plus;float damage = attackValue * (200 - defence)/200 ;//float damage = int.Parse (temp);if (damage <= 1){damage = 1;}float value = Random.Range (0f, 1f);if (value < 0.5){//damage    }else{//missAudioSource.PlayClipAtPoint(missSound,transform.position);showText.Add("Miss",Color.blue,1);}}
并对相应物体赋初值
伤害效果的设置如下
    public GameObject playerBody;    //指定角色bodyprivate Color normalColor;void Awake(){normalColor = playerBody.renderer.material.color;}if (value < 0.5){//damage    showText.Add("-" + damage,Color.black,1);ps.hp_remain -= damage;StartCoroutine (ShowPlayerRed ());}IEnumerator ShowPlayerRed(){playerBody.renderer.material.color = Color.red;yield return new WaitForSeconds (0.5f);playerBody.renderer.material.color = normalColor;}

15.2 主角的受伤和死亡效果

接下来实现角色的受伤效果,hp小于0时死亡。首先在PlayerAttack的PlayerState中添加死亡状态
public enum PlayerState{normalWalk,normalAttack,skillAttack,Death    //死亡状态
}
并在hp小于0时
            if(ps.hp_remain <= 0){state = PlayerState.Death;}
在Update()中,当state = PlayerState.Death时,我们有
        else if(state == PlayerState.Death){animation.CrossFade(aniName_death);}
之后我们在WolfBaby的AutoAttack()中攻击主角并调用主角的BeDamage()函数,
if(aniName_nowAttack == aniName_normalAttack){if(attackTimer >= normalAttackTime){    target.GetComponent<PlayerAttack>().BeDamage(attackValue);    //访问Bedamage造成伤害aniName_nowAttack = aniName_idle;animation.CrossFade(aniName_idle);}}else if(aniName_nowAttack == aniName_crazyAttack){if(attackTimer >= crazyAttackTime){target.GetComponent<PlayerAttack>().BeDamage(attackValue);aniName_nowAttack = aniName_idle;animation.CrossFade(aniName_idle);}}
即实现了主角的受伤效果
在每次攻击完毕之后,我们要调用人物面板的FaceUI的SetFaceProperty()属性,以更新状态。在AutoAttack()函数,我们添加
FaceUI._instance.SetFaceProperty ();    
就可以生效,并且当角色死亡时,我们需要取消怪物的攻击以及人物的移动功能,因此在AutoAttack中加入
PlayerState playerAttackState = target.GetComponent<PlayerAttack> ().state;    //用playerAttackState,避免与state重名if (playerAttackState == PlayerState.Death){target = null;state = WolfBabyState.Idle;return;}
以及PlayerDirection的Update()中
if (pa.state == PlayerState.Death) return;
即可实现受伤以及死亡效果。

15.3场景间的切换

最后一步是将整个流程连接起来,通过初始化载入界面——>角色创建界面——>实际游戏场景,也就是Scene之间的切换。在开始动画里,我们有New Game和Load Game两个功能。
在File——>Build Setting中,导入场景
在控制New Game的按键脚本中,添加
    public void PressNewGame(){    PlayerPrefs.SetInt("dataFromSave",0);Application.LoadLevel (1);    //加载上图红框中的1场景}
即可进入角色创建界面
在角色创建场景中,需要保存所选角色和角色名,因此在OK按钮脚本中添加
    public void PressConfirmButton(){PlayerPrefs.SetString ("storeName", nameInput.value);    //存储名字PlayerPrefs.SetInt ("storeCurrentIndex", selectedIndex);    //存储角色    Application.LoadLevel (2);    //加载下一个场景}
在GameSetting中创建一个脚本为LoadRole,控制加载
public class LoadRole : MonoBehaviour {public GameObject magicianPrefab;    //获取两个角色的prefabpublic GameObject swordmanPrefab;void Awake(){int index = PlayerPrefs.GetInt ("storeCurrentIndex");    //得到输入的名字和角色string name = PlayerPrefs.GetString ("storeName");GameObject playerGO = null;if(index == 0){playerGO = GameObject.Instantiate(magicianPrefab) as GameObject;    //实例化}else if(index == 1){playerGO = GameObject.Instantiate(swordmanPrefab) as GameObject;}playerGO.GetComponent<PlayerStatus> ().name = name;    //通过实例化的  playerGO修改名字信息}}
就可以正常创建,角色名称等信息也正常显示。
总结:至此,游戏的基本功能都已实现,大致了解了整个游戏的框架以及实现方法。

RPG游戏《黑暗之光》流程介绍与代码分析之(十五):主角受攻击效果以及场景切换相关推荐

  1. RPG游戏《黑暗之光》流程介绍与代码分析之(五):背包系统的实现(上)

    第五章:背包系统 背包系统作为游戏中的一个重要功能,与游戏存在着诸多的交互性,购买商品.怪物掉落等各种情形都需要访问背包系统,结构较为复杂.因此背包系统将通过两篇博客进行分析. (上)部分包括 功能面 ...

  2. Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(上)

    最近开始接触游戏制作,用Unity制作一些简单的游戏进行入门.这几篇博客总结了Space Shooter的制作流程,并对代码进行了分析.一是方便自己日后进行回顾与补充,二是为了让让更多的游戏爱好者接触 ...

  3. Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(下)

    这部分内容关注的是游戏性的提升,包括音效.计分等功能的实现. 传送门: 太空射击(Space Shooter)流程介绍与代码分析(上) 太空射击(Space Shooter)流程介绍与代码分析(中) ...

  4. RPG游戏《黑暗之光》流程介绍与代码分析之(一):游戏载入界面的创建

    <黑暗之光>是一款中等大小的RPG游戏,在入门Unity后适合用来上手,了解一整套游戏开发流程以及游戏内的各种功能.借助几篇博客整理一下整体的开发步骤以及代码,方便自己回顾,也便于各位交流 ...

  5. RPG游戏《黑暗之光》流程介绍与代码分析之(十三):角色攻击系统的实现

    十三章:角色攻击系统 角色攻击是杀怪时的核心功能,攻击模式又可细分为普通攻击和技能攻击,其中技能攻击的信息存储在SkillInfoInList,本章节只涉及普通攻击部分. 为Magician添加一个P ...

  6. RPG游戏《黑暗之光》流程介绍与代码分析之(二):角色创建界面的实现

    第二章 角色创建 上一章中完成了初始化的场景界面的创建,本章就接着上一篇博客的内容,介绍角色创建的方法. 2.1 角色创建的UI界面 角色创建的背景采用与加载界面所用背景相同,并且Camera不需要移 ...

  7. RPG游戏《黑暗之光》流程介绍与代码分析之(十二):怪物系统的实现

    第十二章:怪物系统 怪物功能是交互的重要部分,涉及到任务系统.人物状态系统等等,设计起来也较为复杂. 首先将Model中的小狼拖入场景,命名为WolfBaby,并添加动画信息 12.1 小狼的状态切换 ...

  8. RPG游戏《黑暗之光》流程介绍与代码分析之(十四):角色技能系统的实现

    十四章:角色技能系统的实现 技能系统是本游戏开发的最后一部分内容,与普通攻击系统不同,我们需要添加释放技能的特效.动画以及播放时间.并将动画分为回复.Buff.单体和群体. 14.1添加技能的特效名称 ...

  9. RPG游戏《黑暗之光》流程介绍与代码分析之(四):任务系统的实现

    第四章:任务系统 这部分主要对任务系统进行设计,游戏的关键因素之一就是任务系统与玩家的交互,但在代码实现中并不算复杂.本篇博客主要通过一下几个方面实现任务系统. 任务模型的导入与任务UI界面的创建 任 ...

最新文章

  1. python语言入门电子版-python从入门到精通pdf
  2. 分布式服务框架 Zookeeper — 管理分布式环境中的数据
  3. Linux学习:shell命令
  4. Unity3d 游戏中集成Firebase 统计和Admob广告最新中文教程
  5. 32页,10米长的《BI建设地图》强在哪?我整理分享出来
  6. 微服务(MicroServices)
  7. bzoj1596[Usaco2008 Jan]电话网络*
  8. mac上用VMWare虚拟机装Ubuntu,搞定了
  9. mini2440 貌似复杂的mmu
  10. 深度克隆对象【前端每日一题-19】
  11. deferred initcalls与模块化
  12. 又一起“删库”跑路:链家程序员怒删公司 9TB 数据,被判 7 年!网友:真惨~...
  13. Wifidog 认证
  14. 吴恩达深度学习tensorflow版本问题
  15. 根据26字母排列来搜索排列全国城市
  16. 服务器显卡直通和GPU问题分析
  17. java 二十四节气源码
  18. command在计算机中的意义,MAC系统中Command键功能有哪些
  19. 使用matlab显示图像的一个坑:文件名或 URL 参数必须为字符向量、uigetfile出现要串联的数组的维度不一致
  20. 秒杀系统常用的削峰方法

热门文章

  1. 商业模式:为什么饭统学不了OpenTable
  2. Excel导入sql语句模板,解决转换时间戳问题
  3. 阿里云的安全性怎么样?
  4. 单链表——单链表的定义及基本操作(初始化、头插法尾插法建表、查找、插入、删除、判空等)
  5. 【pyinstaller】_get_sysconfigdata_name() missing 1 required positional argument: ‘check_exists‘
  6. 思维导图培训三:思维导图的应用
  7. webpack学习:性能优化
  8. Tokitsukaze and a+b=n (medium)
  9. web端如何实现导出功能?
  10. Linux 命令之软连接详解