[Unity3D]Unity3D游戏开发之伤害数值显示

大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。众所周知,在RPG游戏策划中最为重要的一个环节是数值策划。数值策划是一个关于游戏平衡方面的概念,它是一种非常深奥的概念。

游戏从某种意义上 是多种选择的组合,因此假设一个游戏失去平衡,那么就会降低选择而影响游戏的乐趣。

数值策划人员通常须要依照一定的规则和方法将整个游戏系统的相关数值调整到一个合适的范围。以确保玩家能够有很多其它地选择以增强游戏的可玩性。数值策划是近年来国内游戏行业从国外游戏业引申过来的一个概念。博主觉得我们在学习游戏设计的过程中,除了专注于技术上的实现以外,还应该对游戏设计中的相关理论有所了解。关于数值策划的具体内容,大家能够从这里了解:http://baike.baidu.com/view/1756429.htm

好了,以下我们開始今天的内容:Unity3D游戏开发之伤害数值显示。如图所看到的,是博主十分喜欢的一部游戏《血雨前传:蜃楼》。这部游戏尽管脱离了前两部作品回合制的模式。以爽快的ACT横版过关模式再次进入玩家的视野中,可是相信仅仅有真正玩过这个游戏的人才知道这是一部地地道道的RPG游戏。诡异、独特的画面风格,古龙式武侠叙事风格都为这部作评带来了无限的生命力。而《雨血》系列更是近年来少有的走出国门、享誉国外的游戏。

这部游戏一招一式都非常华丽,并且爽快的打击感让人欲罢不能。

作为一部PRG游戏,在战斗中最重要的当属敌我两方生命值的对照,所以在战斗中实时显示玩家对敌人造成的伤害值十分重要。《仙剑奇侠传五前传》更是在战斗中加入了伤害统计。方便玩家对于战场局势的把握。好了,讲了这么多,我们来继续我们的Unity3D学习之旅,在以下的文章中,我们将使用Unity3D中的OnGUI()方法来实现伤害数值的 显示。

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

using UnityEngine;
using System.Collections;

public class DamagePopup : MonoBehaviour {

	//目标位置
	private Vector3 mTarget;
	//屏幕坐标
	private Vector3 mScreen;
	//伤害数值
	public int Value;

	//文本宽度
	public float ContentWidth=100;
	//文本高度
	public float ContentHeight=50;

	//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的位置是以相机的世界单位来衡量的。

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

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

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

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

接下来,为Enemy编写一个脚本:

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(20,40);
		}
	}
}

这里我们设定玩家对敌人造成的伤害值为20到40,执行程序,我们会得到以下的结果:

因为这里博主使用的是非精确碰撞,所以导致程序一開始角色就和胶囊体发生了碰撞,而OnTrigger()方法因为仅仅能在碰撞開始的时候捕捉碰撞。所以这里仅仅显示了一次伤害值。

理论上仅仅有当玩家攻击胶囊体,才会触发伤害值的显示。只是这个问题再这里我们能够先不追究,因为我们关注的是伤害数值的显示。

到眼下为止,这个问题已经圆满的攻克了。

有朋友可能会问:为什么人家的游戏里显示的伤害效果看起来那么眩目,而你的程序却仅仅能显示普普通通的文字呢?对于这个问题,我们这里给出两种思路,留给大家自己去探究啊。

第一种方法是在项目中创建一个GUISkin,然后在DamagePopup脚本中加入一个GUIStyle类型的成员变量mStyle。通过该变量我们能够引用到在项目中创建的GUISkin。

这样,我们就能够定义总体的GUI样式。此时,我们将OnGUI中的方法改动为:

GUI.Label(new Rect(mPoint.x,mPoint.y,ContentWidth,ContentHeight),Value.ToString(),mStyle);

这样我们就能够实现自己定义的文字效果了。另外一种方法是使用贴图,即首先准备0-9的数字图片,然后我们将Value各个数位上的数字分别截取出来,依据截取的结果来绘制贴图,这样相同能够实现自己定义的效果。好了。今天的内容就是这样了。感谢大家关注我的博客,希望大家能够喜欢今天的内容。

每日箴言:活得优雅些,别人压不垮你,内心的强大才是真正的强大。

喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei
      转载请注明出处。本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/27492689

时间: 2024-10-10 08:39:16

[Unity3D]Unity3D游戏开发之伤害数值显示的相关文章

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

众所周知,在RPG游戏策划中最为重要的一个环节是数值策划.数值策划是一个关于游戏平衡方面的概念,它是一种非常深奥的概念.游戏从某种意义上 是多种选择的组合,因此如果一个游戏失去平衡,那么就会减少选择而影响游戏的乐趣.数值策划人员通常需要按照一定的规则和方法将整个游戏系统的相关数值调整到一个合适的范围,以确保玩家可以有更多地选择以增强游戏的可玩性.数值策划是近年来国内游戏行业从国外游戏业引申过来的一个概念,我们在学习游戏设计的过程中,除了专注于技术上的实现以外,还应该对游戏设计中的相关理论有所了解

Unity3D ARPG游戏开发《最初的幻想》之GUI背包系统实现

昨天做了角色暴击…GUI浮动提示栏.现在的话,终于该继续前天被残忍打断的物品栏之类的GUI界面了! 首先还是把“属性”.“物品”.“技能”.“系统设置”几个按钮放上去罢. 我是这样设计的: 美工方面确实不是俺的长处,资源也都是用的DaikonGUI自带的. 新建一个Panel,用于盛放这几个按钮,Anchor设置为Right和Bottom即可. 然后再将这个Panel命名为“MyBottomBar”,在这个Panel中新建四个按钮,放上相应的图标即可.如果为了好看点,还可以设置Havor状态的显

关于《Unity3D/2D游戏开发从0到1》书籍再版说明

关于<Unity3D/2D游戏开发从0到1>第一版本在2015年7月1日全国发行,累计得到不少国内高校教师.培训机构的好评.但是由于Unity官方对于技术不断的升级与版本的快速迭代,基于Unity4.6版本的教学知识体系,则略显滞后.    随着2017年7月份,Unity2017.1正式版本的推出,<Unity3D/2D游戏开发从0到1>书籍的再版,则正式提上日程. 目前2017年8月份再版工作已经进行过半,现在给各位小伙伴汇报一下工作,希望得到更好的建议.现在说说第二版本的总体

《Unity3D/2D游戏开发从0到1》正式出版发行啦

书籍信息:   书籍的名称: <Unity3D/2D 游戏开发从0到1>   书号(ISBN): 978-7-121-26239-5    出版社: 电子工业出版社   发行时间:2015年7月1日 写作背景:    2015年6月30日我收到电子工业出版社张迪老师寄来,正式发行的<Unity3D/2D游戏开发从0到1>书籍.这本凝结着大半年心血的作品让我感慨万千.   本人从事游戏.软件与教学十多年,一直梦想可以进一步服务于全国广大的游戏与软件从业开发人员.14年下半年电子工业出

Unity3D 入门 游戏开发 Unity3D portal game development

Unity3D 入门 游戏开发 Unity3D portal game development 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:[email protected] E-mail: 313134555 @qq.com 视频学习链接:Video learning link: [教学视频]深入浅出Unity3D--第一篇-何韬-CSDN学院-在线学习教程 u3d 4.6 c#  性能上 比 java脚本 好一些 C # is better than a Java

《Unity3D/2D游戏开发从0到1》正式出版发行

去年个人编写的Unity书籍正式在2015年7月正式发行,现在补充介绍一下个人著作.书籍信息: 书籍的名称: <Unity3D/2D 游戏开发从0到1> 书号(ISBN): 978-7-121-26239-5 出版社: 电子工业出版社 发行时间:2015年7月1日 写作背景: 2015年6月30日我收到电子工业出版社张迪老师寄来,正式发行的<Unity3D/2D游戏开发从0到1>书籍.这本凝结着大半年心血的作品让我感慨万千. 本人从事游戏.软件与教学十多年,一直梦想可以进一步服务于

Unity3D ARPG游戏开发《最初的幻想》之第一张地图与跳跃的改善详解

前面我们终于实现了人物动画.相机控制及昼夜系统,现在继续吧,为了方便继续编写的敌人之类的脚本,所以打算今天先把第一张地图画个大概.结果,画了我好久的地图….. ≡(▔﹏▔)≡ 我对美术方面的天赋简直是惨不忍睹了…..加之地图中途画的差不多的时候Unity又崩溃了一次….忘了保存(ㄒoㄒ).于是又忙活半天….这个地图完全靠临时发挥了,第一张地图我画了好几次了,基本上每次画出来的地形之类的都完全不一样,所以就不多解释了,就上一张大概的场景图吧: 看起来好简单吧?唉……开启编辑器,这时侯如果在场景中转

Unity3D ARPG游戏开发《最初的幻想》之强化敌人AI,折腾的GUI

 昨天搞了死亡的完善与提示栏的工作.今天的话,首先再升级一下敌人的Ai吧.毕竟在玩家在敌人身后使劲攻击的话,这敌人也都不会有反应的,太不合理了. 打开Enemy脚本,在最前面"变量"标签中,先定义一个计数器,因为必须考虑到被同类"误伤"的情况: private int m_attackMeCount=0;//被一个同类对象攻击的次数 然后再在最下面的WaitForAttack函数中将自己的对象传入自己的攻击对象,以作判断: m_damageTarget.m_ch

Unity3D/2D游戏开发从0到1

这篇是计算机中Oracle类的优质预售推荐>>>><Unity3D/2D游戏开发从0到1> Unity3D/2D游戏开发从0到1(含DVD光盘1张) 采用 "案例化"教学思路, 以个人长期线下培训讲义为蓝本:讲解透彻.循序渐进.突出与优化游戏开发实战技巧:附有全国Unity游戏研发职位笔试面试真题集锦.Unity开发常见错误与分析.游戏开发职位简历模板 编辑推荐 按照"案例化"教学特点,全书贯穿两个重量级游戏的开发全过程讲解,让学