位置: 编程技术 - 正文

Unity3D游戏开发之伤害数值显示(unity3D游戏开发)

编辑:rootadmin

推荐整理分享Unity3D游戏开发之伤害数值显示(unity3D游戏开发),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:Unity3D游戏开发毕业论文,Unity3D游戏开发标准教程,Unity3D游戏开发标准教程,Unity3D游戏开发pdf,Unity3D游戏开发毕业论文,Unity3D游戏开发毕业论文,Unity3D游戏开发毕业论文,Unity3D游戏开发标准教程,内容如对您有帮助,希望把文章链接给更多的朋友!

喜欢我的博客请记住我的名字:秦元培,我的博客地址是 本文出处: 众所周知,在RPG游戏策划中最为重要的一个环节是数&#;策划。数&#;策划是一个关于游戏平衡方面的概念,它是一种非常深奥的概念。游戏从某种意义上 是多种选择的组合,因此如果一个游戏失去平衡,那么就会减少选择而影响游戏的乐趣。数&#;策划人员通常需要按照一定的规则和方法将整个游戏系统的相关数&#;调整到一个合适的范围,以确保玩家可以有更多地选择以增强游戏的可玩性。数&#;策划是近年来国内游戏行业从国外游戏业引申过来的一个概念,我们在学习游戏设计的过程中,除了专注于技术上的实现以外,还应该对游戏设计中的相关理论有所了解。关于数&#;策划的详细内容,大家可以从这里了解: 好了,下面我们开始今天的内容:Unity3D游戏开发之伤害数&#;显示。如图所示,是一部游戏《血雨前传:蜃楼》。这部游戏虽然脱离了前两部作品回合制的模式,以爽快的ACT横版过关模式再次进入玩家的视野中,但是相信只有真正玩过这个游戏的人才知道这是一部地地道道的RPG游戏,诡异、独特的画面风&#;,古龙式武侠叙事风&#;都为这部作评带来了无限的生命力。而《雨血》系列更是近年来少有的走出国门、享誉国外的游戏。这部游戏一招一式都很华丽,而且爽快的打击感让人欲罢不能。作为一部PRG游戏,在战斗中最重要的当属敌我双方生命&#;的对比,所以在战斗中实时显示玩家对敌人造成的伤害&#;十分重要。《仙剑奇侠传五前传》更是在战斗中加入了伤害统计,方便玩家对于战场局势的把握。好了,讲了这么多,我们来继续我们的Unity3D学习之旅,在下面的文章中,我们将使用Unity3D中的OnGUI()方法来实现伤害数&#;的 显示。

既然是基于OnGUI()方法的, 相信大家一定很熟悉了,所以我们直接给出代码:

[csharp] view plaincopyprint?using UnityEngine; using System.Collections; public class DamagePopup : MonoBehaviour { //目标位置 private Vector3 mTarget; //屏幕坐标 private Vector3 mScreen; //伤害数&#; public int Value; //文本宽度 public float ContentWidth=; //文本高度 public float ContentHeight=; //GUI坐标 private Vector2 mPoint; //销毁时间 public float FreeTime=1.5F; void Start () { //获取目标位置 mTarget=transform.position; //获取屏幕坐标 mScreen= Camera.main.WorldToScreenPoint(mTarget); //将屏幕坐标转化为GUI坐标 mPoint=new Vector2(mScreen.x,Screen.height-mScreen.y); //开启自动销毁线程 StartCoroutine("Free"); } void Update() { //使文本在垂直方向山产生一个偏移 transform.Translate(Vector3.up * 0.5F * Time.deltaTime); //重新计算坐标 mTarget=transform.position; //获取屏幕坐标 mScreen= Camera.main.WorldToScreenPoint(mTarget); //将屏幕坐标转化为GUI坐标 mPoint=new Vector2(mScreen.x,Screen.height-mScreen.y); } void OnGUI() { //保证目标在摄像机前方 if(mScreen.z>0) { //内部使用GUI坐标进行绘制 GUI.Label(new Rect(mPoint.x,mPoint.y,ContentWidth,ContentHeight),Value.ToString()); } } IEnumerator Free() { yield return new WaitForSeconds(FreeTime); Destroy(this.gameObject); } } 在上面的代码中我们需要把握下面几点:

1、根据Transform组件获取位置坐标,将此坐标转化为屏幕坐标及GUI坐标。

2、Unity3D中常见的四种坐标系:

a、世界坐标:场景中物体的坐标,使用 transform.position获得。

b、屏幕坐标:以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。如Input.mousePosition即为屏幕坐标。

c、视口坐标:视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。

Unity3D游戏开发之伤害数值显示(unity3D游戏开发)

d、GUI坐标:该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

3、在代码中我们将世界坐标先转化为屏幕坐标,再转化为GUI坐标

好了,下面我们将这个脚本绑定在一个空的游戏体上,并制作成预设,在下面的示例中,我们将使用这个预设。

如图,我们希望实现当角色攻击红色的胶囊体时,在游戏场景中显示玩家对胶囊体造成的伤害&#;。具体怎么做呢?我们可以先给模型和胶囊体加上碰撞器,并勾选IsTrigger使其成为一个触发器。我们分别将他们的tag设为Player和Enemy。接下来,为Enemy编写一个脚本:

[csharp] view plaincopyprint?using UnityEngine; using System.Collections; public class Enemy : MonoBehaviour { public GameObject PopupDamage; void OnTriggerEnter(Collider mCollider) { if(mCollider.gameObject.tag=="Player") { //克隆伤害弹出组件 GameObject mObject=(GameObject)Instantiate(PopupDamage,transform.position,Quaternion.identity); mObject.GetComponent<DamagePopup>().Value=Random.Range(,); } } } 这里我们设定玩家对敌人造成的伤害&#;为到,运行程序,我们会得到下面的结果:

由于这里使用的是非精确碰撞,所以导致程序一开始角色就和胶囊体发生了碰撞,而OnTrigger()方法由于只能在碰撞开始的时候捕捉碰撞,所以这里只显示了一次伤害&#;。理论上只有当玩家攻击胶囊体,才会触发伤害&#;的显示,不过这个问题再这里我们可以先不追究,因为我们关注的是伤害数&#;的显示。到目前为止,这个问题已经圆满的解决了。

有朋友可能会问:为什么人家的游戏里显示的伤害效果看起来那么眩目,而你的程序却只能显示普普通通的文字呢?对于这个问题,我们这里给出两种思路,留给大家自己去探究啊。第一种方法是在项目中创建一个GUISkin,然后在DamagePopup脚本中添加一个GUIStyle类型的成员变量mStyle,通过该变量我们可以引用到在项目中创建的GUISkin。这样,我们就可以定义整体的GUI样式。此时,我们将OnGUI中的方法修改为:

[csharp] view plaincopyprint?GUI.Label(new Rect(mPoint.x,mPoint.y,ContentWidth,ContentHeight),Value.ToString(),mStyle); 更多精彩unity3d技术文章请点击

unity常见问题之题 欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d

Unity3D游戏开发之如何用U3D截图的技能培训 喜欢我的博客请记住我的名字:秦元培,我的博客地址是

Unity3D导出exe窗口参数调整培训 欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d

标签: unity3D游戏开发

本文链接地址:https://www.jiuchutong.com/biancheng/372917.html 转载请保留说明!

上一篇:Unity3D游戏开发之实现血条技能培训(Unity3D游戏开发pdf)

下一篇:unity常见问题之20题(unity出现bug)

  • 销售软件系统退货怎么退
  • 补缴以前年度增值税以及滞纳金
  • 公务员抚恤费
  • 个体户申报重复申报怎么办
  • 小微企业印花税减免最新政策
  • 建筑公司核定征收所得税怎么算
  • 固定增长定价模型
  • 专用发票过期未抵扣怎么处理?
  • 叉车需要购置税吗
  • 核算无形资产的过程中,使用的会计账户有
  • 多交的所得税如何做分录
  • 什么是税收筹划风险?税收筹划风险的种类有哪些?
  • 交通费补贴报销的会计分录怎么做?
  • 投资性房地产租赁期开始日
  • 企业取得政府财政资金,收入时间如何确认?
  • 开给个人的通讯费发票能下账吗
  • 小规模企业申请破产流程
  • 税负几个点
  • 认缴制需要多久交完
  • 蔬菜营销方案案例范文
  • 报关单出口退税联在哪打印
  • 免税的销售额要怎么填入报表
  • 票据贴现手续费发票可以抵扣吗
  • 土地的契税和印花税记入什么科目
  • 利润表资产处置损益怎么填
  • 汇算清缴的费用合计是什么
  • 支付境外佣金的记账凭证
  • 统一社会信用代码查询官网
  • 厂房装修费用计入制造费用吗
  • 公司职员培训与管理
  • 拨号的用户名
  • 电脑隐藏软件图标快捷键
  • 职工福利费算职工薪酬吗
  • 简述linux系统
  • 桌面图标归纳
  • 负债的概念及流动负债的确认条件
  • 银行对账单干嘛用
  • 为什么linux这么受欢迎
  • 支付工资属于费用吗
  • 非货币性资产对外投资企业所得税例题
  • 二级路由器怎么配置
  • laravel实战教程
  • php htmlentities()函数的定义和用法
  • 小微企业延缓缴纳
  • 购买土地缴纳契税
  • 解决谷歌浏览器自动添加书签问题
  • 增值税折扣发票有折扣字样
  • 住宿专票可以抵增值税吗
  • 开具增值税专用发票是什么意思
  • 小规模纳税人如何界定
  • 织梦如何使用
  • 电子产品报废清理是否缴纳教育附加税
  • 外贸客户付款方式
  • 接受银行承兑汇票需要开通吗
  • 解决mysql数据库异常断电
  • 企业注销未抵扣完进项税怎么处理
  • 一般纳税人不得领用专票的情形
  • 坏账准备的账务处理会计分录
  • 固定资产报废会计
  • 在建工程转固定资产凭证附件
  • 外贸退税是算利润吗
  • 子公司如何向母公司开户
  • 成本核算的内容有哪几个方面
  • 项目估算主要包括
  • MySQL exists 和in 详解及区别
  • 注册表已被管理员禁用怎么处理
  • windows 8
  • linux十大常用软件
  • centos7怎么配置
  • win8/10功能
  • linux批量管理平台
  • 升级win10系统后电脑变卡处理方法
  • android sdk platform要安装吗
  • angularjs1.5
  • javascript+HTML5自定义元素播放焦点图动画
  • 深入理解计算机系统
  • python中的文件
  • 纳税人识别号不能含有IOZSV
  • 企业所得税季报资产总额怎么填
  • 福建农村医保怎么报销
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设