位置: 编程技术 - 正文

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

编辑:rootadmin

推荐整理分享Unity3D游戏开发之实现血条技能培训(Unity3D游戏开发pdf),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:Unity3D游戏开发引擎,Unity3D游戏开发(第2版)pdf,Unity3D游戏开发(第2版)pdf,Unity3D游戏开发引擎,Unity3D游戏开发(第2版),Unity3D游戏开发(第2版),Unity3D游戏开发标准教程,unity3D游戏开发,内容如对您有帮助,希望把文章链接给更多的朋友!

喜欢我的博客请记住我的名字:秦元培,我的博客地址是 本文出处: 下面我们开始今天的Unity3D技能培训。 我们学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D、3D小规模游戏及网页游戏开发。

今天呢,我们来做一个在游戏中十分重要的组成元素:血条。血条是什么呢?血条是生命&#;的一种体现,就像《仙剑奇侠传三》电视剧中,当景天说他想让那些被邪剑仙害死的人活过来的时候,天帝说需要等量的生命&#;来换,所以电视剧中的结局就变成了景天留在世上的时间并不多了,雪见依偎着他坐在新安当门口的时候,天上忽然下起了雪。聊完了游戏,我们继续回到Unity3D中来,我们今天要实现的是基于2D贴图的血条组件的开发。在正式开始之前,我们先来了解下原理:血条由前后两张大小相等贴图组成,前面的贴图就是我们可以看到的血量贴图,而后面的贴图就是我们的背景贴图,通过改变血量贴图的宽度,我们就可以实现血条的效果。好,讲完了原理我们就来一起学习今天的内容吧!

首先,我们准备两张不同颜色的贴图,如图:

更多精彩请到 接下来,我们打开Unity3D创建一个新的项目,我们首先在场景中创建两个GUITexture对象,我们将这两个GUITexture对象分别命名为HPBackward、HPForward。在GUITexture中有一个很重要的属性PixelInset,它是一个Rect类型的&#;,用以描述GUITexture对象的左上角位置、宽度、高度。这里我们使用默认的坐标&#;,将宽度改为,将高度改为5。两张贴图的设置要保持一致。如图所示:

在这里需要讲一下PixelInset,由于GUITexture是采用的二维屏幕坐标来定位的,即左下角为(0,0),右上角为(1,1),所以我们不能直接使用三维坐标来改变GUITexture对象的位置。在Unity中有一个WorldToScreenPoint()方法可以将三维坐标转化为二为左边,所以我们的思路是获取目标物体的位置,将其转化为二维坐标,再赋&#;给GUITexture对象。好,基于这样的思路,我们可以编写下面的脚本:

[csharp] view plaincopyprint?using UnityEngine; using System.Collections; public class Texture2DHP : MonoBehaviour { //前景贴图 public Texture ForwardTexture; //背景贴图 public Texture BackwardTexture; //目标对象 public Transform Target; //水平偏移量 public float OffSetX=0.F; //垂直偏移量 public float OffSetY=0.F; //最大血量 public int MaxHP=; //当前血量 public int HP=; //血条宽度 public int mWidth=; //血条高度 public int mHeight=5; //前景 private Transform Forward; //背景 private Transform Backward; void Start () { //获得前景和背景 Forward=transform.Find("HPForward"); Backward=transform.Find("HPBackward"); //设置前景、背景贴图 Forward.guiTexture.texture=ForwardTexture; Backward.guiTexture.texture=BackwardTexture; //根据目标对象初始化血条位置 UpdateLocation(Target,OffSetX,OffSetY); } void Update () { UpdateLocation(Target,OffSetX,OffSetY); UpdateHP(HP); } //更新位置 private void UpdateLocation(Transform mTransform,float mOffSetX,float mOffSetY) { //获取目标对象高度 float mHight=Target.collider.bounds.size.y; float mScale=Target.transform.localScale.y; mHight=mHight * mScale; //将三维坐标转化为二维坐标 Vector3 mPos3d=new Vector3(mTransform.position.x,mTransform.position.y&#;mHight,mTransform.position.z); Vector2 mPos2d=Camera.main.WorldToScreenPoint(mPos3d); //更新贴图的位置 Forward.position=new Vector3(mPos2d.x/Screen.width&#;mOffSetX,mPos2d.y/Screen.height&#;mOffSetY,0); Backward.position=new Vector3(mPos2d.x/Screen.width&#;mOffSetX,mPos2d.y/Screen.height&#;mOffSetY,0); } //更新血量 public void UpdateHP(int mValue) { if(mValue<0 || mValue>MaxHP) return; SetGUITextureWidth(Forward.guiTexture, (int)(mWidth * (mValue/(double)MaxHP))); } //设置贴图宽度 private void SetGUITextureWidth(GUITexture mTexture,int mValue) { mTexture.pixelInset=new Rect(mTexture.pixelInset.x,mTexture.pixelInset.y, mValue,mTexture.pixelInset.height); } }

在上面的代码中,我们需要把握以下几点:

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

1、目标物体的高度是根据Collider来获取的,所以要使用血条组件的物体必须带有碰撞器。

2、通过WorldToScreenPoint()方法获取二维坐标后,要分别用x,y坐标去除以屏幕宽度、屏幕高度,目的是使坐标&#;介于0,1之间,因为GUITexture使用这样的坐标系。

3、当改变脚本中的血量和目标物体的位置时,血条位置和血条量会自动更新。换言之,我们只要要改变HP的&#;就可以实现血条数&#;的更新。

好了,现在我们在场景中创建一个空的GameObject,命名为Texture2DHP。我们将前面创建的两个GUITexture对象拖放到该对象下,使其成为子对象。我们把脚本拖放到Texture2DHP对象上,此时,我们应该可以看到下面的内容:

我们将开始项目前准备好的两张贴图导入项目并将它们赋给脚本,其中红色的为血量贴图,黄色的背景贴图。好了,到目前为止,一个血条组件已经基本成型了,为了让它可以在项目中复用,我们将其制作成预设。下面来讲解预设的制作方法:

预设,在Unity3D中称为Prefab,是一种可以复用的游戏体。我们首先在Project窗口中创建一个Prefab文件夹,然后在该文件下创建一个名为Texture2DHP的Prefab。我们将Hierarchy窗口中的Texture2DHP拖放到Prefab中,Prefab将变成亮蓝色,此时表明预设已经创建成功。保存项目,将Hierarchy窗口中的Texture2DHP对象删除,在接下来的游戏开发中,我们将会一直用到这个预设文件。好,我们现在来测试一下今天的成果,我们首先在场景中创建一个Cube和一个胶囊体,然后我们将Texture2DHP预设直接拖放到游戏场景中,设置其目标物体为Cube,血量HP为,将其改名为CubeHP。类&#;地,我们为胶囊体创建一个血条组件,设置其血量HP为,将其改名为CapsuleHP。好了,现在我们来运行游戏:

那么,我们如何在脚本中动态的改变血条的血量呢?我们只需要获取指定名称的Texture2DHP组件,然后获取Texture2DHP脚本并修改其中的HP的&#;就可以了。怎么样,效果还不错吧?不过基于这种方式实现的血条有一个问题,就是所有对象的血条都是在一个平面上的,这样血条的大小是不会随着距离摄像机距离的变化而表现出一种渐变的效果的,这是原理性的问题,我们目前还无法避免。测试模型的时候,经常出现无法获取模型高度的问题,暂时还没有想到较好的解决办法,如果大家有更好的想法,欢迎大家给我留言。那么,有没有更好的方法呢?有,那就是NGUI!好了,关于NGUI的问题,稍后会与大家分享。

Unity3D游戏开发之伤害数值显示 喜欢我的博客请记住我的名字:秦元培,我的博客地址是

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

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

标签: Unity3D游戏开发pdf

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

上一篇:unity3d游戏开发之简单的透明shader技能培训(Unity3D游戏开发培训课程大纲)

下一篇:Unity3D游戏开发之伤害数值显示(unity3D游戏开发)

  • 补提以前年度的盈余公积可以在本年任意月份提取吗
  • 出口免税收入的计税依据
  • 税收国家和地方的比例
  • 个人劳务报酬所得汇算清缴
  • 注册资金证明包含哪些
  • 收到增值税发票是进项还是销项
  • 进口货物的应纳增值税
  • 管理费用会计科目代码是多少
  • 包装物一次摊销的会计分录
  • 分公司注销所得税
  • 发票章丢失风险大吗
  • 不适用研究开发费用税前加计扣除政策的有
  • 一般纳税人增值税申报表
  • 建筑公司工程款支付审批流程
  • 多扣除了应交税费怎么调整?
  • 注册资本转让税率
  • 拿提成的工资怎么算
  • 工程项目分期付款
  • 建筑公司工地买空调
  • windows7远程桌面连接在哪里
  • 会计估计变更的会计处理方法
  • 银行余额调节表例题和答案
  • 房租发票需要缴房产税吗
  • 赠与合同要公证吗有效吗
  • 无票费用 规定
  • 入账成本包括增值税税额吗
  • 公司赞助商
  • 拔罐的好处和坏处除湿
  • 进口付汇业务流程
  • 国际税收协定有哪些主要内容
  • php 面向对象
  • 传承古老文化
  • Code For Better 谷歌开发者之声——使用谷歌浏览器 Chrome 更好地调试
  • vgrename命令 重命名卷组
  • mysql ndb innodb
  • wordpress安装插件无法复制
  • 因质量问题对方直接扣款怎么处理
  • 小规模纳税人无进项票怎么办
  • 想要上海名媛群群号
  • 资产合计数怎么算的
  • 经营性罚款和行政性罚款的区别
  • 车辆保险费用查询
  • 服务不动产和无形资产本期数,第19栏
  • 其它收益和递延收益的区别
  • 汇算清缴前跨年调账怎么调
  • 固定资产如何入账处理
  • 第三方支付利息
  • 法定盈余公积一般按照企业
  • 租金收入确认收入时间
  • 自创商誉是否需要纳税
  • 长期股权投资其他权益变动
  • 2020年专项扣除怎么填
  • 小微企业税控盘维护费每年都要交吗
  • 开支票如何做账
  • 年末未分配利润总额计算公式
  • 商品流通企业会计做账流程
  • 安装完成后如何检验安装的部分是否符合安装工艺
  • mysql的日志
  • win7系统突然退化
  • centos怎么查看文件
  • centos配置网络地址
  • 安装程序不运行怎么回事
  • Linux系统SCSI磁盘扫描机制解析及命令详细介绍
  • win7自带桌面时钟吗
  • win7 64位纯净版图标变成了一样该怎么办?win7旗舰版图标变成一样的解决方法
  • cocos 2d x
  • linux复制文件命令mv
  • linux 压缩解压缩
  • python到底怎么学
  • python如何配置
  • js去除hover样式
  • jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
  • unity3d怎么用
  • [置顶]公主大人接下来是拷问时间31
  • android shareuid
  • 一个绿色
  • jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
  • 税务局风险评估是什么意思
  • 请问各位专家金线吊乌龟有什么功效
  • 税务函调回来几天可以退税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设