求教unity3d在做unity3d2d游戏开发pdf的动作贴图问题

[Unity3D]Unity3D游戏开发之2D贴图实现血条组件 - CSDN博客
[Unity3D]Unity3D游戏开发之2D贴图实现血条组件
& & & 各位朋友,大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是。
& &在上一篇文章中,我们以经典的打砖块游戏为例,讲解了一个游戏的完整实现过程。今天呢,我们来做一个在游戏中十分重要的组成元素:血条。血条是什么呢?血条是生命值的一种体现,就像《仙剑奇侠传三》电视剧中,当景天说他想让那些被邪剑仙害死的人活过来的时候,天帝说需要等量的生命值来换,所以电视剧中的结局就变成了景天留在世上的时间并不多了,雪见依偎着他坐在新安当门口的时候,天上忽然下起了雪。聊完了游戏,我们继续回到中来,我们今天要实现的是基于贴图的血条组件的开发。在正式开始之前,我们先来了解下原理:血条由前后两张大小相等贴图组成,前面的贴图就是我们可以看到的血量贴图,而后面的贴图就是我们的背景贴图,通过改变血量贴图的宽度,我们就可以实现血条的效果。好,讲完了原理我们就来一起学习今天的内容吧!
& & 首先,我们准备两张不同颜色的贴图,如图:
& & 接下来,我们打开创建一个新的项目,我们首先在场景中创建两个对象,我们将这两个对象分别命名为、。在中有一个很重要的属性,它是一个类型的值,用以描述对象的左上角位置、宽度、高度。这里我们使用默认的坐标值,将宽度改为,将高度改为。两张贴图的设置要保持一致。如图所示:
& & 在这里需要讲一下,由于是采用的二维屏幕坐标来定位的,即左下角为,右上角为,所以我们不能直接使用三维坐标来改变对象的位置。在中有一个WorldToScreenPoint()方法可以将三维坐标转化为二为左边,所以我们的思路是获取目标物体的位置,将其转化为二维坐标,再赋值给对象。好,基于这样的思路,我们可以编写下面的脚本:
  using UnityE
  using System.C
  public class Texture2DHP : MonoBehaviour
   //前景贴图
   public Texture ForwardT
   //背景贴图
   public Texture BackwardT
//目标对象
   public Transform T
   //水平偏移量
   public float OffSetX=0.05F;
   //垂直偏移量
   public float OffSetY=0.05F;
   //最大血量
   public int MaxHP=100;
   //当前血量
   public int HP=100;
   //血条宽度
   public int mWidth=64;
   //血条高度
   public int mHeight=5;
   //前景
   private Transform F
   //背景
   private Transform B
   void Start ()
//获得前景和背景
Forward=transform.Find(&HPForward&);
Backward=transform.Find(&HPBackward&);
//设置前景、背景贴图
Forward.guiTexture.texture=ForwardT
Backward.guiTexture.texture=BackwardT
//根据目标对象初始化血条位置
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 * mS
//将三维坐标转化为二维坐标
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)
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);
& &在上面的代码中,我们需要把握以下几点:
& &1、目标物体的高度是根据来获取的,所以要使用血条组件的物体必须带有碰撞器。
& &2、通过WorldToScreenPoint()方法获取二维坐标后,要分别用,坐标去除以屏幕宽度、屏幕高度,目的是使坐标值介于之间,因为使用这样的坐标系。
& &3、当改变脚本中的血量和目标物体的位置时,血条位置和血条量会自动更新。换言之,我们只要要改变的值就可以实现血条数值的更新。
& &好了,现在我们在场景中创建一个空的,命名为。我们将前面创建的两个对象拖放到该对象下,使其成为子对象。我们把脚本拖放到对象上,此时,我们应该可以看到下面的内容:
& & 我们将开始项目前准备好的两张贴图导入项目并将它们赋给脚本,其中红色的为血量贴图,黄色的背景贴图。好了,到目前为止,一个血条组件已经基本成型了,为了让它可以在项目中复用,我们将其制作成预设。下面来讲解预设的制作方法:
& & 预设,在中称为,是一种可以复用的游戏体。我们首先在窗口中创建一个文件夹,然后在该文件下创建一个名为的。我们将窗口中的拖放到中,将变成亮蓝色,此时表明预设已经创建成功。保存项目,将窗口中的对象删除,在接下来的游戏开发中,我们将会一直用到这个预设文件。好,我们现在来测试一下今天的成果,我们首先在场景中创建一个和一个胶囊体,然后我们将预设直接拖放到游戏场景中,设置其目标物体为,血量为,将其改名为。类似地,我们为胶囊体创建一个血条组件,设置其血量为,将其改名为CapsuleHP。好了,现在我们来运行游戏:
& &那么,我们如何在脚本中动态的改变血条的血量呢?我们只需要获取指定名称的组件,然后获取脚本并修改其中的的值就可以了。怎么样效果还不错吧?不过基于这种方式实现的血条有一个问题,就是所有对象的血条都是在一个平面上的,这样血条的大小是不会随着距离摄像机距离的变化而表现出一种渐变的效果的,这是原理性的问题,我们目前还无法避免。博主测试模型的时候,经常出现无法获取模型高度的问题,暂时还没有想到较好的解决办法,如果大家有更好的想法,欢迎大家给我留言。那么,有没有更好的方法呢?有,那就是!好了,关于的问题,博主稍后会与大家分享。希望大家继续关注我的博客哦。今天的内容就是这个样子啦,博主期待和大家一起成长,加油!
& &每日箴言:对于单纯善良的人来说,这个世界其实不复杂
& & 喜欢我的博客请记住我的名字:秦元培,我的博客地址是。
&&& 转载请注明出处,本文作者:秦元培,本文出处:
本文已收录于以下专栏:
相关文章推荐
名字牌包括2D,3D名字牌两种,区别在于2D是基于屏幕坐标的名字牌,将名字牌的gameobject结点挂在UI相机下,不会受3D场景中物件的影响,3D名字牌可以视为游戏场景内的一部分物件,名字牌跟随角...
1、显示分为三成:背景框、血条、血条阴影代码放在血条和血条阴影上通过控制速度speed实现变化分层。。
1、即改变血条的localscale.x 实现血条显示的变化。
2、通过IEnumerato...
各位朋友大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是。今天博主想和大家探讨的是RPG游戏中剧情呈现的相关策略,我们知道一个RPG游戏主要是通过将玩...
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。
        首先吐槽下CSDN的升级吧,从昨天晚上博客就打不开,今天倒是可以打开了,可是...
大家首先要去Unity官网下载UniRx插件,,,这个插件是做什么用的呢,,,这里咱们简单说一下:通常,unity的网络操作需要使用到WWW和协程(Coroutine),但是,使用协程(Corouti...
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。
引言今天我想和大家聊聊在Unity3D中关于场景的动态加载的问题。众所周知在Un...
各位朋友大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是。今天想和大家分享的是uGUI中分页效果的实现,我们知道相对NGUI来说uGUI在功能覆盖上来...
一、Animation简介动画原本是指由许多连续的图片在人眼前面快速播放,肉眼因视觉残像产生错觉,而误以为画面活动的作品。 但在 Unity3D 中的“ Animation”【动画】 系统应该这样理解...
Unity3D第一天,主要学习了3D对象的添加,同时添加了刚体和碰撞体的组件。而C#作为脚本,学习了一点点语法
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)请教问题,2d动作游戏的动作要怎么制作【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:78,297贴子:
请教问题,2d动作游戏的动作要怎么制作收藏
动作的动画,如果是制作关键帧,无法实现类似3D效果的动画,难道只能画一系列图来实现,还是有更好的解决方法,求开导啊,困扰我好久了!
达内unity3d培训全程&实战教学&,unity3d金牌讲师授课.免费unity3d课程试听中!到达内unity3d学院学习unity3d,只需4个月速成unity3d游戏工程师.
2D动作?横版?还是2.5?官方的DEMO是很有参考价值的东西,我们现在做一个横版跑酷游戏,2D的,都是帧动画多粒子是个奢侈的东西
登录百度帐号推荐应用后使用快捷导航没有帐号?
只需一步,快速开始
&加载中...
查看: 11666|回复: 14
请教一下这种,类似水波纹的效果在unity3d里怎么实现?
TA的其他好贴
马上注册,加入CGJOY,让你轻松玩转CGJOY。
才可以下载或查看,没有帐号?
QQ图片36.jpg (77.73 KB, 下载次数: 603)
13:01 上传
&&请教一下这种,类似水波纹的效果在里怎么实现?贴图?材质?
如何让别人关注你?
本楼回复(<span id="dp_count_)
如何让别人关注你?
一个扭曲材质,不过比较耗性能
本楼回复(<span id="dp_count_)
如何让别人关注你?
很不错 收益了
本楼回复(<span id="dp_count_)
如何让别人关注你?
下不下来啊
本楼回复(<span id="dp_count_)
如何让别人关注你?
看了LZ的帖子,我只想说一句很好很强大!
本楼回复(<span id="dp_count_)
如何让别人关注你?
这种扭曲材质网页游戏不清楚&&但是手机游戏的话最好别用&&手机是带不动的& &这种扭曲效果放到手机里就是一张黑色的片
本楼回复(<span id="dp_count_)
如何让别人关注你?
你好,我是Julie,广州一家手游公司的HR,我们公司急招3D特效、场景原画、角色原画、3D场景&角色,另有策划、技术岗位热招中,工作地点在广州天河华夏路30号。待遇好商量,项目挺给力的哦& &,如果有兴趣可以加QQ详聊,有认识3D特效、场景原画高手也欢迎推荐哦~
本楼回复(<span id="dp_count_)
如何让别人关注你?
本楼回复(<span id="dp_count_)
如何让别人关注你?
我也想知道
本楼回复(<span id="dp_count_)
如何让别人关注你?
Powered by扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 2692|回复: 4
Unity3D学习笔记(七)光与影
16排名1昨日变化主题帖子积分
蛮牛币268200
在线时间2070 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
还记得大明湖畔的容嬷嬷吗?噢不对,还记得第二章里在游戏世界里添加的太阳光吗?虽然作为上帝创造了光,照亮了世界,但为了平衡世界还缺少一样东西,没错,它就是——影子!仔细观察一下游戏场景,发现的确所有东西都没有影子呢。那么本章就再以上帝的角色用LightMapping(光照贴图)为这个虚拟世界添加影子。选中太阳光对象,当时我把它改名成了“Sun”,在检视面板里可以看到Shadow Type(阴影类型)是No Shadows(无阴影)。点击下拉列表,有两种阴影类型可以选择:Hard Shadow(硬化阴影)和Soft Shadow(柔化阴影)。所谓硬化不是说影子比较坚硬,而是影子的轮廓比较清晰。后者比前者多了两个选项:Softness(柔化度)和Softness Fade(柔化渐隐),调整这两个参数可以让影子的边缘看起来模糊一点,更加逼真。另外还有Strength(强度)选项,可以用来调节阴影的强度。调整Resolution(分辨率)选项可以更改产生阴影的质量,越高效果越好,当然性能消耗也越大。Bia(偏斜度)不知道是用来干什么的,拖到最小和最大好像对阴影没什么影响,暂时就先放一边。
1.jpg (486.32 KB, 下载次数: 4)
11:40 上传
咦,本章这么快就结束了?不,好戏才刚刚开始呢。Unity不仅仅提供了(Directional Light)平行光源,还提供了Spot Light(投射光源)、(Point Light)点光源、(Area Light)区域光源类型,用官方的图来表达更直接点吧。其中区域光源是用来做烘焙用的,这个以后再介绍。我是不会告诉你其实我也一知半解的啊哈哈……
2.jpg (354.2 KB, 下载次数: 1)
11:40 上传
可以在选中光源对象后更改检视面板中的Type(光源类型),不过太阳光已经是平行光源了,所以为了测试,就再创建一个光源来练手。点击主菜单中的“游戏对象→创建其他对象→投射光源”。在检视面板中可以调整投射光源的Range(距离)和Spot Angle(投射角度),这两个参数很好理解。然后用旋转工具和移动工具调整好光源的照射方向,此时由于太阳光太亮,几乎看不到投射光源的光。因此要么减少太阳光的Intensity(强度),要么增加投射光源的强度,方便起见我选择了后者。顺便也可以把光源的Color(颜色)调整喜欢的类型比如说……粉红?^_^。啊啊,我还是改回白色吧。不管怎么说,光的颜色和亮度对游戏场景的气氛渲染起着至关重要的作用。还有一个压轴参数,Cookie(请原谅我也不知道该如何翻译它,可以理解为光照纹理),点击右边的小圆点,然后选择一张纹理。用技术型的表述方式是该纹理的透明通道(Alpha通道,点这里叫度娘来科普啦)将被作为蒙板,以决定光照在各个位置的亮度。如果是投射光源或平行光,则必须是纹理。其中如果是平行光源,则还可以设置CookieSize(光照纹理缩放)。另外如果是点光源,则需要一个CubeMap(映射立方体)。听起来蛮复杂的,但是动手操作一下发现其实很好理解,选择好纹理后越透明的地方光线越暗,否则越亮。那么这个有什么用呢?呵呵,看自己发挥想象力了呗!
3.jpg (538.02 KB, 下载次数: 1)
11:40 上传
4.jpg (482.75 KB, 下载次数: 1)
11:41 上传
如果是点光源,那么就必须要制作一个映射立方体,右键点击工程面板“创建→映射立方体”。选中它之后就会在检视面板中出现6个面,分别对应前后左右上下的Cookie。方式与投射光源的Cookie制作相同,只要把纹理拖上去即可。制作完映射立方体后别忘了拖到点光源的Cookie上。
5.jpg (360.43 KB, 下载次数: 2)
11:41 上传
其实我觉得吧,如果把映射立方体的六个面分别贴上蜂窝状的纹理,然后让它旋转起来,颜色还要不停的变化,那不就是一个舞厅里的旋转球灯了吗?哈哈。那么下一章就来写写Unity动画功能的使用。作者:黄旭杨 /archives/30
如何深入学习;unity几种动画类型;unity纹理贴图;unity限制旋转角度范围;unity3d用做游戏;unity [unity3d 获得旋转角度;unity3d 5 2d动画;unity3d 选择角色;unity贴图透明;unity 边缘光;unity cubemap 怎么用;unity3d渲染设置;unity结束游戏;unity场景选择;unity 游戏开始菜单;unity 不够暗;unity3d 5.1烘焙贴图;unity 场景烘焙;怎么学习unity3d;如何学习unity3d;unity3d的学习总结;unity3d 学习;unity3d学习需要什么;unity3d深入学习;unity3d如何学习;unity 动画类型;unity贴图纹理;unity适用的纹理图;unity 旋转角度限制;unity左右角度旋转;unity3d可以做2d游戏吗;unity3d 做2d游戏;unity3d旋转角度;unity3d旋转角度对比;unity3d 最小旋转角度;unity3d 旋转一定角度;unity3d 2d动画;fade和unity3d 角色选择;unity透明贴图;unity 边缘;unity 5unity3d 5.3.3渲染设置;unity 游戏结束;unity 多场景 选择;unity 游戏菜单;unity 变暗;unity3d烘焙 贴图;unity烘焙场景;unity3d干什么;unity3d 添加纹理;unity 光照贴图;unity光照 烘焙;unity影子;unity影子没有了;unity 模糊处理;unity怎么设置分辨率;unity有几种光源;unity 光源;unity 点光源;unity移动 光源;unity加光源;unity 创建场景;场景渲染unity3d 烘焙场景;unity场景贴图;unity 干什么;unity方向键
每日推荐:
蛮牛相关业务合作(市场合作/项目需求/人才招聘)联系-崇慕 QQ:
254/150排名<font color="#FF昨日变化2主题帖子积分
初来乍到, 积分 54, 距离下一级还需 96 积分
初来乍到, 积分 54, 距离下一级还需 96 积分
在线时间16 小时
太经典啦&&对我帮助很大
每日推荐:
121/50排名<font color="#FF昨日变化9主题帖子积分
注册看看, 积分 21, 距离下一级还需 29 积分
注册看看, 积分 21, 距离下一级还需 29 积分
在线时间6 小时
好帖!留名!这种贴最值得送硬币的说!
每日推荐:
61314/1500排名<font color="#FF昨日变化1主题帖子积分
蛮牛粉丝, 积分 1314, 距离下一级还需 186 积分
蛮牛粉丝, 积分 1314, 距离下一级还需 186 积分
蛮牛币1594
在线时间279 小时
太好了&&感谢
每日推荐:
72079/5000排名<font color="#FF昨日变化主题帖子积分
日久生情, 积分 2079, 距离下一级还需 2921 积分
日久生情, 积分 2079, 距离下一级还需 2921 积分
蛮牛币4982
在线时间240 小时
太好了&&感谢
每日推荐:
蛮牛论坛干货区作者}

我要回帖

更多关于 unity 2d动作游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信