位置: 编程技术 - 正文

Unity3d人物的名称与血条的绘制方法(unity人物面板)

编辑:rootadmin
人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标。因为3D世界中的人物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的人物坐标换算成2D平面中的坐标,继而找到人物头顶在屏幕中的2D坐标最后使用GUI将名称与血条绘制出来。首先学习本文的重点内容,如何将游戏世界中任意3D坐标转换成屏幕中的2D坐标。根据这个方法计算出的2D坐标屏幕左下角的点为0.0 ,屏幕右上角的坐标为1.1 所以真实的2D坐标还得通过Screen.height 与Screen.width计算一下才行。1Vector2 position = camera.WorldToScreenPoint (worldPosition);在unity工程导入角色控制器组件,不知道角色控制器的朋友请阅读我之前的文章哈。创建一个Plane做为游戏的地面,然后利用角色控制器组件创建两个模型,一个做为主角,一个作为NPC,主角可以通过控制来移动从四周来观察NPC对象。由于地面的面积比较小移动主角时为了避免主角越界掉下去,我们做一个边界的物理层。物理层其实很简单,就是给平面四周放置四个平面在四周将平面包围着,给四周的四个平面绑定上Box Collider组件,这样主角就不会越界掉下去啦。因为没有给贴图所以效果上看不到这四个对象。 如下图所示,在场景是途中主角被四个平面包围这,即时它拼命的想往外条但是还是跳不出去。 创建脚本NPC.cs 然后把脚本挂在NPC对象身上,在脚本中我们绘制主角的血条以及名称。NPC.csusing UnityEngine;using System.Collections; public class NPC : MonoBehaviour { //主摄像机对象private Camera camera;//NPC名称private string name = "我是雨松MOMO"; //主角对象GameObject hero;//NPC模型高度float npcHeight;//红色血条贴图public Texture2D blood_red;//黑色血条贴图public Texture2D blood_black;//默认NPC血&#;private int HP = ; void Start (){//根据Tag得到主角对象hero = GameObject.FindGameObjectWithTag("Player");//得到摄像机对象camera = Camera.main; //注解//得到模型原始高度float size_y = collider.bounds.size.y;//得到模型缩放比例float scal_y = transform.localScale.y;//它们的乘积就是高度npcHeight = (size_y *scal_y) ; } void Update (){//保持NPC一直面朝主角transform.LookAt(hero.transform);} void OnGUI(){//得到NPC头顶在3D世界中的坐标//默认NPC坐标点在脚底下,所以这里加上npcHeight它模型的高度即可Vector3 worldPosition = new Vector3 (transform.position.x , transform.position.y &#; npcHeight,transform.position.z);//根据NPC头顶的3D坐标换算成它在2D屏幕中的坐标Vector2 position = camera.WorldToScreenPoint (worldPosition);//得到真实NPC头顶的2D坐标position = new Vector2 (position.x, Screen.height - position.y);//注解//计算出血条的宽高Vector2 bloodSize = GUI.skin.label.CalcSize (new GUIContent(blood_red)); //通过血&#;计算红色血条显示区域int blood_width = blood_red.width * HP/;//先绘制黑色血条GUI.DrawTexture(new Rect(position.x - (bloodSize.x/2),position.y - bloodSize.y ,bloodSize.x,bloodSize.y),blood_black);//在绘制红色血条GUI.DrawTexture(new Rect(position.x - (bloodSize.x/2),position.y - bloodSize.y ,blood_width,bloodSize.y),blood_red); //注解//计算NPC名称的宽高Vector2 nameSize = GUI.skin.label.CalcSize (new GUIContent(name));//设置显示颜色为黄色GUI.color = Color.yellow;//绘制NPC名称GUI.Label(new Rect(position.x - (nameSize.x/2),position.y - nameSize.y - bloodSize.y ,nameSize.x,nameSize.y), name); } //下面是经典鼠标点击对象的事件,大家看一下就应该知道是什么意思啦。void OnMouseDrag (){Debug.Log("鼠标拖动该模型区域时");} void OnMouseDown(){Debug.Log("鼠标按下时"); if(HP >0){HP -=5 ;} }void OnMouseUp(){Debug.Log("鼠标抬起时");} void OnMouseEnter(){Debug.Log("鼠标进入该对象区域时");}void OnMouseExit(){Debug.Log("鼠标离开该模型区域时");}void OnMouseOver(){Debug.Log("鼠标停留在该对象区域时");} }复制代码注解1:通过collider.bounds.size 可以拿到模型对应三个轴向的高度,但是模型是可以缩放的,所以真实的模型高度应当是原始高度乘以缩放系数才行。 transform.localScale可以拿到模型对应三个轴向的缩放系数,因为这里我们需要模型的高度,所以忽略X轴与Z轴。注解2:在这里我们计算血条的宽度,GUI.skin.label.Calcsize()这个方法是以默认的皮肤对象Label对象去参数对象的宽高。参数是new GUIContent(blood_Red)意思是拿红色血条的贴图的宽高,它将保存在返回的size中。最后以宽高将血条绘制在屏幕中,我们的血条采取两层。背景是黑色的,前面是红色的,当人物费血时红色血条减少。注解3: 这里通过字符串来获取它整体的宽度与高度,因为NPC的名称是可变的,所以我们需要动态的获取整体的显示区域。同样是以GUI.skin.label对象去调用CalcSize。【狗刨学习网】如下图所示,当使用鼠标点击NPC对象时,NPC头顶的血条将开始发生减血。这个例子我使用OnGUI绘制当然大家也可以在Hierarchy 视图中的创建GUI Texture 或者GUI Text对象 来实现,不过原理都是这样的 大家可以试试。

推荐整理分享Unity3d人物的名称与血条的绘制方法(unity人物面板),希望有所帮助,仅作参考,欢迎阅读内容。

Unity3d人物的名称与血条的绘制方法(unity人物面板)

文章相关热门搜索词:unity3d人物模型制作,unity3d人物素材,unity3d人物模型包,unity 人物属性,unity3d人物素材,unity3d人物模型包,unity游戏人物模型,unity3d人物模型包,内容如对您有帮助,希望把文章链接给更多的朋友!

Unity3D教程:性能优化 1、使用静态类型化在JavaScript中,使用静态类型化(StaticTyping)来代替动态类型化(DynamicTyping)对性能的优化非常重要。unity使用一种叫做类型推导(Typ

魔兽世界开发商动视暴雪迎来首个中国东家:腾讯 今年5月,腾讯北美游戏工作室裁员余人,仅保留商务合作员工,被裁人员占整体员工的%。年,腾讯游戏总裁任宇昕就曾透露,腾讯在海外收购的

unity3d动画操作以及动画实现 今天主要总结的是unity3d中内置动画操作,以及代码事件编写动画实现1.如何导入、执行外部动画在项目窗口中,首先,单击选择我们所准备的动画模型

标签: unity人物面板

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

上一篇:unity3d中动态增加、建立场景(unity 动态生成模型)

下一篇:Unity3D教程:性能优化(unity3d documentation)

  • 新办营利性医疗机构是否免征土地使用税和房产税?
  • 企业资产损失税前扣除管理办法2011215号第46条
  • 息税前利润变动率的计算公式
  • 小区业委会是否可以进行经营活动?
  • 税务局如何认定虚开
  • 建筑企业结转成本怎么算
  • 计提跟支付有啥区别
  • 终止经营的会计处理
  • 备用金每个月可以用几次
  • 特种设备电梯如何监管
  • 出口免税进项税额转出会计分录
  • 企业对于无法收回的应收账款
  • 保证金转租金的会计处理
  • 应付职工薪酬如何填列
  • 企业资产负债表图片
  • 国外客户手续费差异账务处理如何做?
  • 公司更名期间账户可以使用吗?
  • 购入汽车
  • 购买商标属于什么费用
  • 机票行业一定要开发票吗?
  • 进项税额转出是什么意思
  • 月末主营业务收入结转会计分录
  • 出售二手车税率3%减按2%征收的政策
  • 酒店小规模纳税人税率
  • 股权转让缴印花税公司用进账吗
  • 外币账户和外汇账户一样吗?
  • 资产负债表年初数和期末数代表什么
  • 标准差怎么算 例题
  • php tr td
  • 未确认融资收益怎么理解
  • 车辆赔偿款收条怎么写
  • 小规模纳税人交增值税吗
  • 采用定额法计算产品成本,其程序如何?
  • 数据库管理框架
  • 可以抵扣的项目有哪些
  • Cookie 的 SameSite 属性
  • 什么是资产评估的价值类型
  • tailf命令 查看100行
  • lvs命令详解
  • 新项目分哪几个阶段
  • 实收资本 增加
  • 收到银行结息收据3
  • 出口企业的出口比例怎么算
  • 企业向合伙企业分红怎么交税
  • 织梦可以放两个模板吗
  • 电商企业快递费怎么算
  • 什么科目需要结转到本年利润
  • sqlserver2005 master与msdb数据库备份恢复过程
  • 汇算清缴补缴所得税的报税利润表怎么报
  • 二手房交易需缴纳哪些费用
  • 应收账款计提减值准备会计处理
  • 你知道实施“营改增”对企业有哪些积极的效应么?
  • 审车费用表
  • 担保贷款借款人死亡
  • 银行业现金流量表
  • 未开票收入怎么填写增值税申报表
  • 应收账款和应付账款属于什么科目
  • 企业筹建期间开办费计入
  • 记账凭证负数怎么填写样板
  • linux系统转换为win系统脚本
  • win8系统本地连接在哪
  • linux 下VSFTP 530 Permission denied错误的解决方法
  • win7和linux双系统
  • xp怎么删除电脑系统
  • 分析师:董明珠让格力为豪赌买单
  • js格式化日期yyyy-mm-dd hh:mm:ss
  • Node.js中的核心模块包括哪些内容?
  • 用css滤镜实现的代码
  • python ints
  • js基于什么
  • 关于事件的报告范文
  • json初学
  • listview
  • 多线程 python
  • 简述python语言
  • 税收和社保不在同一地缴纳怎么办
  • 宁波出租车购买
  • 车辆缴纳购置税多少钱
  • 传统服务贸易和新兴服务贸易如何区分
  • 湖南增值税起征点
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设