Unity3D技术之名称与血条绘制详解

Unity3d人物的名称与血条的绘制方法 人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标。因为3D世界中的人物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的人物坐标换算成2D平面中的坐标,继而找到人物头顶在屏幕中的2D坐标最后使用GUI将名称与血条绘制出来。 首先学习本文的重点内容,如何将游戏世界中任意3D坐标转换成屏幕中的2D坐标。根据这个方法计算出的2D坐标屏 阅读详情

人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标。因为3D世界中的人物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的人物坐标换算成2D平面中的坐标,继而找到人物头顶在屏幕中的2D坐标最后使用GUI将名称与血条绘制出来。

首先学习本文的重点内容,如何将游戏世界中任意3D坐标转换成屏幕中的2D坐标。根据这个方法计算出的2D坐标屏幕左下角的点为0.0 ,屏幕右上角的坐标为1.1 所以真实的2D坐标还得通过Screen.height 与Screen.width计算一下才行。

在Unity工程导入角色控制器组件,不知道角色控制器的朋友请阅读我之前的文章哈。创建一个Plane做为游戏的地面,然后利用角色控制器组件创建两个模型,一个做为主角,一个作为NPC,主角可以通过控制来移动从四周来观察NPC对象。由于地面的面积比较小移动主角时为了避免主角越界掉下去,我们做一个边界的物理层。物理层其实很简单,就是给平面四周放置四个平面在四周将平面包围着,给四周的四个平面绑定上Box Collider组件,这样主角就不会越界掉下去啦。因为没有给贴图所以效果上看不到这四个对象。哇咔咔~ 如下图所示,在场景是途中主角被四个平面包围这,即时它拼命的想往外条但是还是跳不出去,哈哈。

 

创建脚本NPC.cs 然后把脚本挂在NPC对象身上,在脚本中我们绘制主角的血条以及名称。本文章出自【狗刨网】

NPC.cs

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

using 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 = 100;

 

void Start ()

{

//根据Tag得到主角对象

hero = GameObject.FindGameObjectWithTag("Player");

//得到摄像机对象

camera = Camera.main;

 

//注解1

//得到模型原始高度

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);

//注解2

//计算出血条的宽高

Vector2 bloodSize = GUI.skin.label.CalcSize (new GUIContent(blood_red));

 

//通过血值计算红色血条显示区域

int blood_width = blood_red.width * HP/100;

//先绘制黑色血条

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);

 

//注解3

//计算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对象 来实现,不过原理都是这样的 大家可以试试 哇咔咔。

unity学习之怪物名称血条 欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频,我们致力于打造业内unity3d培训、学习第一品牌。       人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标。因为3D世界中的怪物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的怪物坐标换算成2D平面中的坐标 阅读详情

相关推荐

最新 unity 血条的另类制作-伤害减血加血自动回血

最新 unity 血条的另类制作-伤害减血加血自动回血   unity 血条的另类制作-伤害减血加血,最简单教程,菜鸟必看 血条的效果图: 做这个教程的目的,第一是为了巩固自己学到的知识,同时也可以帮助和我一起正在学习unity的童鞋们。因为有很多做血条的教程,不是复杂就是有错,要么就是要用NGUI等等插件,对于我们这些初学者,能清晰,简单的做到要的效果就

6430

【Unity3D】血条(HP)

需求实现: 前后箭头键或 W, S 键控制玩家前进和后退; 左右箭头键或 A, D 键控制玩家左右转向; 鼠标左键或空格键控制玩家发射炮弹; 玩家血条显示在屏幕左上角; 相机在玩家后上方的位置,始终跟随玩家,朝玩家正前方看; 玩家移动时,敌人转向玩家,当偏离玩家的角度小于5°时,发射炮弹; 敌人血条显示在其上方,并且始终看向相机。...........................

little_fat_sheep 9163

带变化刻度的血条(两种实现模式)

踩了很多坑,基于C#和Unity做了两种可以刻度变化的血条,一种随着刻度数量增多,刻度线像素宽会减小,一种是不受影响的,仅供游戏开发过程中的参考

unity3d学习笔记(十九)--ngui制作人物头顶的头像和血条

先上张图,自己做的一个demo。 这里的人物头像和血条是在3d世界生成的,所以有真正的纵深感和遮挡关系,废话不多说,看我是怎么实现的。 第一步,先在UI Root里制作头像和血条。 这个制作步骤基本和我前面一篇文章介绍头像血条的制作步骤一致,下面我截个图。 就是上面的HeroPanel,东西很简单,创建一个主面板HeroPanel,然后在里面创建一个Slider,用

lzhq1982的专栏 2万+

非凸问题的求解方法以及连续凸逼近SCA(Successive Convex Approximation)方法

非凸问题的求解方法 针对形如下式的函数: min⁡x∈XV(x)=F(x)+G(x)\min\limits_{{\bf{x}}\in X} V(x)=F(x)+G(x)x∈Xmin​V(x)=F(x)+G(x); 其中F为光滑的(不一定convex),G是convex的但是可能不可微,且存在:对于n维实矢量空间,有X=X1×...×XNX=X_1 \times...\times X_NX=X1​×...×XN​; x=(x1,...,xN)\bf{x} =(x_1,...,x_N)x=(x1​,...,xN

weixin_44535200的博客 2万+

RaiDrive+AList保姆级教程:5分钟搞定OneDrive/百度网盘挂载到本地(附WebDAV配置)

本文提供RaiDrive+AList的保姆级教程,5分钟内实现将OneDrive/百度网盘挂载到本地的详细步骤,包括WebDAV配置。通过AList统一转换云存储协议,RaiDrive虚拟磁盘挂载,显著提升多网盘管理效率,适合需要跨平台操作文件的用户。

weixin_28331555的博客 456

【NGUI】头顶血条(2D与3D的实现)

前言 游戏中的头顶血条是一种常见的小功能,一般游戏会要求做2D的头顶血条,这是因为这样能保证UI的大小不变,图片和文字不会产生变形引起的其他效果;反过来,3D的头顶血条会由于透视的原因会有近大远小的效果,看起来会更真实。 实现 资源的制作上,2D血条与3D血条都一样,需要注意的是,实现3D血条时需要将场景camera的CullingMask选中血条所在的图层即可,同时将UI camera的cu

coffeecato的个人博客 5415

从数据校准到论文呈现:fsQCA与NCA方法融合的完整实证研究指南

本文详细介绍了fsQCA(模糊集定性比较分析)与NCA(必要条件分析)方法融合的完整实证研究流程,从数据校准到论文呈现。通过软件操作技巧、R语言NCA包高效使用及论文写作规范,帮助研究者避免常见误区,提升研究质量与可靠性。特别适合需要进行组态分析的研究生和学者参考。

weixin_29215391的博客 417

Unity3D游戏编程-血条

Unity3D游戏编程-血条 文章目录Unity3D游戏编程-血条一、作业要求二、项目配置三、项目演示(1)视频演示(2)项目下载(3)文字说明(4)项目截图四、前置内容(1)IMGUI(2)UGUI五、实现过程和方法(算法)(1)IMGUI(2)UGUI六、分析两种实现的优缺点(1)IMGUI(2)UGUI七、参考资料 一、作业要求 血条(Health Bar)的预制设计。具体要求如下: 分别使用 IMGUI 和 UGUI 实现 使用UGUI,血条是游戏对象的一个子元素,任何时候需要面对主摄像机 分析两

学习记录 2946

从ST电机库到TI InstaSPIN:手把手对比两种主流FOC实现中的坐标变换差异

本文深入对比了ST电机库与TI InstaSPIN在FOC实现中的坐标变换差异,包括坐标系定义、变换系数和角度处理等关键点。针对BLDC和PMSM电机控制,提供了从理论到实践的移植方案,帮助工程师快速解决平台切换中的性能问题。特别解析了Clarke/Park变换在两种实现中的微妙差异及其对PI控制的影响。

weixin_28724661的博客 398

AutoSAR系列讲解(入门篇)2.1-AppL概述

该章主要是讲解SWC是如何在ECU中分布的

雪云飞星的博客 4万+

3D游戏设计-血条的预制设计

要求 分别使用 IMGUI 和 UGUI 实现 使用 UGUI,血条是游戏对象的一个子元素,任何时候需要面对主摄像机 分析两种实现的优缺点 给出预制的使用方法 实现 IMGUI实现 使用GUI.HorizontalScrollbar,通过其长度来表示血条的长度,以实现血条的可视化。 设置满血为100,实现加/减血功能,每次变化血量为10。 using System.Collections; using System.Collections.Generic; using UnityEngine; us

zwx54088的博客 2293

华为od 面试八股文_C++_01_含答案

华为od 面试八股文_C++_01_含答案

MISAYAONE的博客 5595

参考文章

Unity3D之人物头顶名称与血条更新与绘制 https://wenku.baidu.com/view/1ac8f9bfda38376bae1fae1e.html

m0_46612856的博客 187

u-boot-2014.10移植第22天----添加nand flash命令支持(四)

解决问题:nand0: MTD Erase failure: -5 drivers/mtd/nand/nand_bbt.c文件中初始化bbt/* * Allocate memory (2bit per block) and clear the memory bad block * table. */ this->bbt = kzalloc(len, GFP_

fulinux的博客 3632

第069篇:浸入边界法进阶

浸入边界法(Immersed Boundary Method, IBM)是处理流固耦合问题的强大数值方法。本文深入介绍直接力法、反馈力法、Ghost Cell方法和多域IBM等高级技术。通过Python实现完整的IBM求解器,展示处理移动边界、弹性边界和多体相互作用的方法。浸入边界法,直接力法,反馈力法,Ghost Cell,流固耦合,移动边界,弹性边界Navier-Stokes方程添加体积力项:∂u∂t+(u⋅∇)u=−1ρ∇p+ν∇2u+f\frac{\partial \mathbf{u}}{\part

2401_87715305的博客 412

Unity3D人物头顶名称与血条更新与绘制

人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标。因为3D世界中的人物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的人物坐标换算成2D平面中的坐标,继而找到人物头顶在屏幕中的2D坐标最后使用GUI将名称与血条绘制出来。 首先学习本文的重点内容,如何将游戏世界中任意3D坐标转换成屏幕中的2D坐标。根据这个方法计算出的2D坐

Game_List的博客 2057

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Unity3D之人物头顶名称与血条更新与绘制

背景是黑色的,前面是红色的,当人物费血时红色血条减少。可以拿到模型对应三个轴向的高度,但是模型是可以缩放的,所以真实的模型高度应当是原始高度乘以缩放系数才行。做为游戏的地面,然后利用角色控制器组件创建两个模型,一个做为主角,一个作为。可以拿到模型对应三个轴向的缩放系数,因为这里我们需要模型的高度,所以忽略。人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在。的名称是可变的,所以我们需要动态的获取整体的显示区域。意思是拿红色血条的贴图的宽高,它将保存在返回的。世界中的人物是会移动的,它是在。

小小姑娘 830

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Unity3d】使用GUI绘制人物头顶血条和名称

背景:最近自己在学习写小游戏的时候想要在玩家头顶显示玩家当前血量和名字遇到了此问题,在此攻略一下。 攻略:谷歌了一下,人物头顶和名称的显示大致上分为两种方法:使用UI组件设置和使用GUI绘制,我采用的方式是后者,在此之前尝试过前面的方法,但是总是出一些问题,这里讨论使用GUI绘制,使用组件设置稍后再去研究。 使用GUI绘制重在代码逻辑,这里贴出我的代码 private Camera Mia...

Goulandis 1966

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Unity3D研究院之人物头顶名称与血条更新与绘制(二十六)

http://www.xuanyusong.com/archives/1032       人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标。因为3D世界中的人物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的人物坐标换算成2D平面中的坐标,继而找到人物头顶在屏幕中的2D坐标最后使用GUI将名称与血条绘制出来。

chenluwolf的专栏 1975

unity3d游戏开发之血条与名字的设置

unity3d游戏开发之血条与名字的设置 欢迎大家光临我的博客! 欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌。 今天的内容是NPC头上的血条与名字的设置 具体分析,NPC血条的显示需要用到Vector2(二维向量)

fsqrocket的专栏 1506

Unity中如何制作血条或头顶名称

一.目的 1.想知道:Unity中如何制作血条或头顶名称 二.参考 1.Unity3d制作血条的三种方法

qq_40544338的博客 2392

unity3d 改变脚本名称_Unity3D研究院之人物头顶名称与血条更新与绘制(二十六)...

人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标。因为3D世界中的人物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的人物坐标换算成2D平面中的坐标,继而找到人物头顶在屏幕中的2D坐标最后使用GUI将名称与血条绘制出来。首先学习本文的重点内容,如何将游戏世界中任意3D坐标转换成屏幕中的2D坐标。根据这个方法计算出的2D坐标屏幕左...

weixin_39681486的博客 357

unity3d做会减少的血条_Unity 3D 血条制作

要求:分别使用 IMGUI 和 UGUI 实现使用 UGUI,血条是游戏对象的一个子元素,任何时候需要面对主摄像机分析两种实现的优缺点给出预制的使用方法思路:​ 由于之前一直有用IMGUI,还算熟悉,想法就是使用一个类似长方形的容器,实现血条效果。至于UGUI,按照老师上课所讲的,使用Slider,通过调整,实现。实现:IMGUI​ 新建一个Cube,作为游戏对象,或者空对象也可以,重...

weixin_35676504的博客 2035

unity3D制作血条跟随的研究

在制作游戏的时候都会用到血条

果vinegar的博客 3984
上一篇: Unity3D技术之进度条制作
下一篇: Unity3D技术之实现声波支付时的波纹详解
Qst_Baron
博客等级 码龄12年 15粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值