如何用Unity 2D制作一个像疯狂喷气机破解版ios的游戏

【图片】【非原创2D游戏教程】乓乓游戏【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:72,924贴子:
【非原创2D游戏教程】乓乓游戏收藏
#Unity2D游戏#写在开头的碎碎念:做了几年的游戏,因为很讨厌大学时教C#的老师,所以对Unity一直没啥兴趣。但想了好久了(大概两年?),还是想做自己想要的游戏,因为一直喜欢玩2D的游戏,并且2D游戏成本低一点,所以想着今年学一学Unity3D,再画多点时间学一学美术,能出一款自己的游戏。这几个月都在用零碎的时间看Unity3D相关的东西,觉得下面这个网站的2D教程都很不错,所以自己先照着网站的教程写了一下demo,觉得对于Unity3D开发2D很有帮助。因为网站是英文的,我在逛了下贴吧,发现好多都是初学者,所以用自己蹩脚的翻译大致翻译了一下教程,一是为了自己记录查看方面,二是希望能够帮助一下热爱游戏的初学者们,翻译有问题的地方还欢迎大家指正。游戏原文教程出处:https冒号//noobtuts点com/unity/2d-pong-game我把自己做好的demo放到了国内最大的同性交流平台网站上,基佬嗨皮网,供大家参考:https冒号//github点com/BloodDot/project4unity/tree/master/PongUnity 2D 乓乓游戏(一)这是一个只用38行代码就能够做出2d乒乓游戏的教程哟~ 当然,肯定是用unity游戏引擎来做的,安心啦,会一步步教的。给你个gif图,自己看游戏最终效果一点用都没有的前言这个游戏灵感来源于1972年的原始乒乓游戏(tm不就是抄的一样么),中文介绍只找到了互动百科,将就着看看咯()先来讨论一下游戏的规则,顺便再学习♂一下Unity的基本知识&( ̄︶ ̄)/就叫游戏的说明好了游戏规则会和原本的非常相(yi)像(yang),像控制左边和右边的挡板让球弹来弹去,弹到左边的墙,右边的人得分啦,反过来球弹到右边的墙,左边的人得分啦,但是球打到上下的墙肯定不会得分的,只会让球上下弹来弹去,然后弹到左右咯。所以要控制左右的板子接住球并回弹就哦了。其实这些都好废话,又不是zz,看gif图都懂的好伐。来看一下这个球打到板子上的回弹角度设定:如果球打到顶部的边角,就是那个绿色箭头,那么往上弹达到中间,看红色箭头,往回弹达到下面,蓝色箭头,自己看规则扯完了,其实不讲大家也都知道规则的,只是强迫症要把这段弄一弄开始讲Unity相关的东西咯为了做游戏,快用unity,学好unity,走遍天下都有利。首先,自己百度unity去下载和安装,不会装的,那怪我咯(?_o?ωo?)_关于unity的简介,我就借(chao)鉴(xi)一下百度百科了Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件。其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。顺便吐槽一下,百度百科中文翻译Unity3d竟然叫优美缔3D,瞎了再说一下,Unity虽然做游戏很方便,但是还是要写代码的,可以用C#,Javascript和Boo三种语言来写,选C#吧,微软大法好啊,虽然我因为大学时的C#老师太丑,这些年对C#都很嫌弃,但说实话,C#用起来的确很爽装完了Unity没,装完了就赶紧来开启Unity的学习之路吧激活你的Unity啦,选个人版,不要钱的,当然你有钱你随意不过5.0以前的Unity是要收钱的,但天朝一般都用破解版然后你自己注册或登录一下Unity的个人账号就可以进入到以下界面了,不知道怎么注册的,出门左转,问一下路人怎么用浏览器打开百度输入注册Unity账号看图,选下面的New Project,差不多就是新创建一个项目的意思然后取名字,按照官方的来吧,叫pong自己选项目的路径,最后记得选择2D项目点击Create project创建项目接下去泡一下泡面,等它loading完吧介绍一下Unity基本的操作界面啦看下面( ̄y▽ ̄)╭Hierarchy(层级视图):Hierarchy视图是主要放于游戏场景中具体的游戏对象,比如摄像机平面贴图、3D贴图、光源、箱子、球体、胶囊体、平面和地形等。任何一个全新的的游戏工程创建完毕后,默认都会创建一个游戏场景并且将主摄像机添加在该场景的Hierarchy视图中。对于3D游戏来说。摄像机可以让我们以不同的视角观察游戏世界。上面的是百度百科的,我不是安利百度百科,只是我没翻墙Project Area(项目区域):其实就是放我们游戏素材的地方,像Textures(贴图)啦,3D Models(3D模型)啦,Scripts(脚本代码)啦,等等。我们可以直接把这里的素材拖拽到层级视图上面实例化(不过代码不应该叫绑定,不叫实例)Scene(场景):就是显示我们游戏的地方,可以用鼠标拖拽或者用键盘控制场景的上下左右移动,也可以在层级视图双击里面的摄像头或者其他的对象定位到双击的目标Inspector(检视视图):显示当前选择对象的属性。举个栗子,当我们选择Main Camera(主摄像头)的时候,我们能够看到Position(位置),Rotation(旋转角度),Name(名称)等等全部关于摄像头的全部信息对于Unity这种组件式的游戏引擎来讲,刚创建的对象什么都没有(包括头发),我们要自己给场景里面添加组件。像Light(光效),Position(位置),Texture(贴图),3D Model(3D模型)等等。我们点击默认创建的Main Camera,可以从Inspector(检视视图)上看到它绑定的初始组件,Transform,Camera,GUI Layer,Flare Layer,Audio Listener。具体干什么用的,等之后用到了再讲吧。简单来说Unity的这种结构就有点像拼机器人,Main Camera就类似机器人的头,头里面有眼睛,耳朵,鼻子,嘴巴等等(这些就类似于刚才绑定在Main Camera上面的组件),把这些组件组合起来就是一个物体,然后游戏是由很多个物体组成的,就和机器人是由头,手,胸,脚等等组合起来的差不多(Main Camera:我来组成头部)变换工具(上图中的左上角,具体看下图):从左到右依次是手型工具(快捷键Q):按住鼠标左键拖动视角移动工具(快捷键W):选择物体后,物体会出现方向轴,拖动方向轴可以移动物体旋转工具(快捷键E):选择物体后,物体会出现旋转轴,拖动旋转轴可以旋转物体缩放工具(快捷键R):选择物体后,物体会出现缩放轴,拖动缩放轴可以缩放物体我反正没用快捷键,不过用多了撸啊撸放技能速度应该能提升吧(笑)播放暂停步进工具条:从左到右依次是播放:开始游戏,点击以后开始调试游戏,并且该按钮变成停止按钮,点击停止按钮来停止调试游戏暂停:当在调试游戏的时候,可以暂停游戏,修改一些数据,资源,脚本等来查看修改后的表现,不过在停止播放后,暂停游戏中修改的东西就会还原回播放之前的状态哦步进:前进到下一帧,关于帧频这个东西,如果不知道的话,可以自行百度以上是Unity编辑器的简单介绍,下面要进入游戏主体教程了哟吼吼吼吼
Unity 2D 乓乓游戏(二)来设置一下摄像头先吧我们在Hierarchy(层级)面板中选择Main Camera,如下图然后我们把目光焦点放到右侧的Inspector(检视)面板,将Background(背景)颜色改成黑色,设置图中的Size等等参数(你照着图中抄就好了)开始创建上下左右的墙壁了~我们要添加四面墙壁到游戏里面,在游戏里面这些墙壁的对象叫做Sprite(精灵),为什么叫这个英文名和中文翻译名,鬼才知道,或者我们也可以叫另一个稍微明白点的名字Texture(贴图)快把下面的图片下载下来你眼睛没有瞎,上面图片是白的,你选中看看就知道了把上面的图片放到项目的Assets文件夹里,我习惯在Assets里创建一个Sprites文件夹,把图片资源放在这个文件夹里面如下图所示Materials文件夹:用于存放Unity里面创建的MaterialPrefabs文件夹:用于存放Unity里面创建的Prefab,预制体(暂时听不懂没关系)Scenes文件夹:用于存放Unity里面创建的Scene,场景其实就是游戏场景,你可以保存一下当前的项目,保存的后缀名是.unity文件,这个其实就是当前的Unity场景,我们保存到Scenes文件夹里面Scripts文件夹:用于存放Unity里面创建的Script,也就是代码Sprites文件夹:用于存放图片素材创建游戏里面用到的墙壁吧我们选择Sprites文件夹,选中里面的两个墙壁图片,然后将Inspector(检视)面板中的属性设置为下图其实就只要设置Pixels Per Unit这个参数为1啦,这个参数是干嘛用的呢,从字面意思看是像素每单位,其实差不多就是这个意思了,就是多少单位占1个像素的意思,当我们设置为1的时候,那么墙壁的就是1个单位对应1个像素了(其实一般游戏框架里面都是默认这样,并没有这个参数可以设置的)把刚才的墙壁加入到游戏场景中先在Sprites文件夹里选中一个竖着的墙,然后拖拽到Scene(场景)面板中,如下图然后再拖两根横着的墙和一根竖着的墙,强迫症患者赶快对齐这四根棒子用鼠标拖肯定对不齐的,在左边的Hierarchy(层级)面板一根选中墙壁,然后在右边的Inspector(检视)面板输入坐标来对齐吧记得把墙壁重命名啊
今天先到这里,碎觉咯~
今天有直播吗,顶一个
我来看脚本的。。
唉 大佬怎么还没更
Unity 2D 乓乓游戏(三)给墙壁加上物理属性(让它能够和之后的小球基情的撞击)怎么加呢,不用担心啦,Unity就是因为它神奇的物理引擎而出名的,我们只要使用Unity提供的Collider组件就可以给墙壁添加物理碰撞属性啦,让我们先选中四个墙壁然后我们在右边的Inspector(检视)面板点击Add Component(添加组件),然后依次选择Physics2D-&Box Collider2D添加完后是这副样子&.&不用改参数哦,Unity就是这么智能,默认把碰撞框的大小设置成图片大小然后来Scene(场景)里面看看吧,每个墙壁是不是都有绿色边框围绕啊,那就是碰撞框我们再来添加一下中间的虚线放心老哥,你没瞎,选中下载虚线老规矩,设置一下Pixels Per Unit为1调整一下中间虚线的位置,和下图差不多就行了,虚线就不用添加物理组件了,它只是用来装饰的玩意轮到球拍登场了快下图选中下载图片吧~也是把Pixels Per Unit设置为1,这我就懒得贴图了拖两个球拍的图片放到一左一右,作为我们控制的两个玩家,强迫症记得对其哟~
Unity 2D 乓乓游戏(四)对了,还要重命名球拍,Unity自动生成的名字看着实在难受球拍也要加上物理组件Box Collider 2D,别问我为什么,难道你用空气做的球拍打球么接下来是个好玩的知识点了,我们在游戏里面是需要控制球拍上下滑动移动坐标的,但当球拍上下移动到撞墙了,我们怎么去做出一个撞墙的效果,让球拍不会跑出墙外面呢轮到Rigidbody(刚体)登场了,以下是百度百科:刚体是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。绝对刚体实际上是不存在的,只是一种理想模型,因为任何物体在受力作用后,都或多或少地变形,如果变形的程度相对于物体本身几何尺寸来说极为微小,在研究物体运动时变形就可以忽略不计。把许多固体视为刚体,所得到的结果在工程上一般已有足够的准确度。但要研究应力和应变,则须考虑变形。由于变形一般总是微小的,所以可先将物体当作刚体,用理论力学的方法求得加给它的各未知力,然后再用变形体力学,包括材料力学、弹性力学、塑性力学等的理论和方法进行研究。我们可以给有刚体的物体添加各种属性实现很多效果,比如可以给它添加重力,让物体能够自由落体啦,让物体碰撞到添加了碰撞体的物体后不能继续穿墙移动啦一般来说,使用了物理组件的话,移动的物体一般都要添加Rigidbody(刚体)组件的,有人要问为什么了,我也不知道,原文没写哈哈哈(我猜是一般物理游戏移动的东西都不能穿墙或者穿地面吧)我们选中那两块球拍,然后在Inspector(检视)面板里面依次按以下顺序添加Rigidbody 2D组件 AddComponent-&Physics 2D-&Rigidbody 2D。然后修改Rigidbody 2D属性,把Gravity(重力)设为0,因为我们在平面上控制球拍,并不需要球拍自由落体般下落,然后勾选Freeze Rotation Z(冻结Z轴旋转),为了让球拍碰撞后不旋转,然后设置Collision Dectection(碰撞检测)为Continuous(持续的),并且设置Interpolate为Interpolate(内插值),查了一下,设置后可以基于上一帧的变换来平滑本帧变换,差不多就是移动的时候看起来顺畅一点,没有卡的意思。好了,接下来开始写代码了,怕不怕━((*′д`)爻(′д`*))━!!!!我们需要写一个脚本来控制球拍的移动,选中球拍,然后在右边的Inspector(检视)面板里面添加脚本 Add Component-&New Script,取名叫MoveRacket,移动球拍的意思,选择CSharp语言我们在Project(项目)面板双击打开创建的脚本,打开后差不多是这个样子using UnityEusing System.Cpublic class MoveRacket : MonoBehaviour {
// Use this for initialization
void Start () {
// Update is called once per frame
void Update () {
}}可以看到里面有两个方法,Start方法是这个类初始化的时候运行的,就是你把这个脚本绑定在哪个物体上,当这个物体创建后,这个Start方法就会运行,然后这个Update方法是会一直运行的,大概是每秒运行60次的样子,反正根据设置的帧频来的但Update方法有个缺点,就是你游戏卡的时候,我们一般叫掉帧,也就掉帧频啦,Update是根据帧频来计算运行的次数的,那么帧频掉了,Update方法当然执行的次数就会不太准,对于我们这种要实时计算碰撞的游戏来说是不太好的所以轮到FixedUpdate方法出现了,Fixed是固定的意思,那么这个方法我们也就可以猜到了,就是不管我们游戏帧频怎么样算,这个方法都是在固定的时间点执行的,不会受影响,对于物理游戏来说,这个方法是再好不过的了。好,我们把Start方法和Update方法删了(反正用不到,占着位置干嘛,我又不是靠代码行数来算工资的),然后写一个FiexdUpdate方法using UnityEusing System.Cpublic class MoveRacket : MonoBehaviour {
void FixedUpdate () {
}}这个名字啊,不要弄错了啊,如果你是用的VS来写代码,可以用Ctrl+Shift+M快捷键来创建一些Unity内置的方法,这样就不用自己手打名字,也就不会搞错啦^o^不要忘记了我们创建这个代码是为了让球拍移动的,由于球拍添加了Rigidbody,所以我们可以用Rigidbody来移动球拍,Rigidbody里面有个属性叫velocity,就是刚体的速度向量,我摘抄一段圣典里面的话在大多数情况下,你不应该直接修改速度,因为这会导致不真实的行为。在每个物理步,不要再每个物体的速度,这将导致不真实的物理模拟。一个典型的例子,当你在第一人称射击游戏中使用跳跃的时候改变速度,因为你想立即改变速度。但我们这个不是真是的物理模拟啊,我只是要让拍子在游戏里上下移动而已,我又不管重力什么的。这玩意里面既然有个向量的单词,那肯定是向量啦,我们来复习一下向量是啥(其实就是XY坐标)一目了然吧,我们要上下移动,所以要给球拍一个向上或是向下的向量,其实就是Y轴的向量然后有人要问了,我们这个向量哪里可以得到啊所以说Unity引擎很好呢,引擎里面有个Input类,里面提供了一系列方法获取用户输入的信息,我们这次就用GetAxisRaw这个方法,直译就是获取原始轴,大致就是用户通过输入控制器提供改变坐标轴的值,然后用这个方法来获取控制器改变的坐标轴的值。我们回到编辑器,依照下列顺序打开InputManager,Edit-&Project Settings-&Input可以看到一个列表,其实这些都是输入控制器,我们这次就用默认自带的Vertical来控制球拍吧写两句代码来移动球拍吧using UnityEusing System.Cpublic class MoveRacket : MonoBehaviour {
public float speed = 30;
public string axis = &Vertical&;
void FixedUpdate () {
float v = Input.GetAxisRaw(axis);
GetComponent&Rigidbody2D&().velocity = new Vector2(0, v) *
}}可以看到我们通过Input.GetAxisRaw来获取了一个输入值,然后复制给Rigidbody2D的速度向量Y坐标上,看了上面的向量图可以知道,赋值为正是向上移动,赋值为负是向下移动。我们再回过头来看输入控制器的截图可以发现“S”键对应的是Negative Button,“W”键对应的是Positve Button,Negative数学里翻译是负的意思,也就是S是输入负值,Positive数学里翻译是正的意思,那么W就是正值了,所以赋值给Rigidbody2D的速度向量后,按“S”键是向下移动,“W”键是向上移动,和我们习惯的操作一样,真方便啊~然后speed是控制移动的速度,我们先设置为30吧。我们来运行一下游戏,发现可以通过S和W键来控制球拍的移动了,是不是有点小激动啊给两块球拍添加不同的输入控制器但是我们只是想控制单块球拍的移动啊,如果用一个控制器控制两块球拍,玩个球啊,打着多没意思啊那现在就要给两块球拍添加不同的控制器了,也很简单我们在控制器页面输入控制器的数量,多加一位,并把新的控制器命名为Vertical2,设置方向键控制正负按钮然后再选中右边的板子,在Inspector(检视)面板里,将Script组件里的Axis属性换成Vertical2跑一下,哦耶,我们可以左手控制左球拍右手控制右球拍了~
额···Unity3D的UI看着不是这个时代的
这让我想起了pong这个游戏,不知道有人玩过没
只用一个shader就能实现这个游戏
欢迎新手加入我们q群号码:,在大学遇到unity的问题,老师布置关于unity的课题,可以找我们帮你。刚进公司遇到一些不解的地方,一样可以帮助你。遇到动画问题,可以帮你解决大部分问题。对学习什么而迷茫,可以和我们一起聊聊现在的行业!其实我想说我的能力不算太强。但是我会帮助每一个有问题的同学,或者说我们一起解决你遇到的问题。群里面还是有几个大神的。欢迎新人加入!
Unity 2D 乓乓游戏(五)做个球先把下面这个球的图片下载一下然后设置一下我们刚才导入的图片把球的图片拖到场景里面来吧,看下面给球添加一下Collider(碰撞器)组件Add Component-&Physics 2D-&Box Collider 2D我们的球是要在碰到墙的时候回弹回来的,举个栗子,当面对面碰到墙的时候,是直接回弹回来,当以45度朝着墙碰的时候,它会以-45度回弹回来听起来有些复杂,涉及到了数学相关的知识,但Unity关于这方面提供了很完善的支持,用它自带的Physics Material,就能够实现回弹的效果,不用管其他杂七杂八的事情让我们来创建一个Physics2D Material吧在Project Area(项目区域)里面一次选择Create-&Physics2D Material,然后命名为BallMaterial在Inspector(检视)面板里面设置一下可以看到我们将Friction(摩擦力)设置为0 Bounciness(反弹力)设置为1然后在球的Collider的Material设置一下刚才创建的Material给球添加一下RigidbodyAdd Component-&Physics 2D-&Rigidbody 2D然后设置一下参数,像下面这样子好了,我们再来给球添加一个脚本,让它动起来吧Add Component-&New Script,并命名为Ballusing看下面的代码UnityEusing System.Cpublic class Ball : MonoBehaviour {
public float speed = 30;
void Start() {
// Initial Velocity
GetComponent&Rigidbody2D&().velocity = Vector2.right *
}}然后再加一个speed的变量,用来控制球速,并在初始化的时候,给球一个向右的速度,让它动起来点击调试,可以看到球在两个球拍之间回弹好了,直线的回弹已经有效果了,斜着的回弹我们要实现下面这种回弹的方向我们要给Ball脚本添加一个OnCollisionEnter2D方法,用来处理碰撞到物体时的回弹角度上面这个图是展示各个方向的向量值我们要确定的是,弹到球拍上方,中间和下方的向量值,比较发现,上中下是根据Y轴的值来区分的,而且都在-1到1的区间内,我们通过下面的方式来计算||
1 &- at the top of the racket||||
0 &- at the middle of the racket|||| -1 &- at the bottom of the racket那我们通过什么来确认球的Y轴值呢,这里的Y轴值不是指Y轴的坐标,而是只计算回弹方向的Y轴值,很明显,我们是球打在球拍上,球相对与球拍的位置,就是确认回弹方向的Y轴值,所以我们可以通过球拍的高度来计算Y轴值代码如下:float hitFactor(Vector2 ballPos, Vector2 racketPos,
float racketHeight) {
// ascii art:
1 &- at the top of the racket
0 &- at the middle of the racket
// || -1 &- at the bottom of the racket
return (ballPos.y - racketPos.y) / racketH}然后在碰撞方法里面分别判断左球拍,和右球拍的回弹计算void OnCollisionEnter2D(Collision2D col) {
// Note: 'col' holds the collision information. If the
// Ball collided with a racket, then:
col.gameObject is the racket
col.transform.position is the racket's position
col.collider is the racket's collider
// Hit the left Racket?
if (col.gameObject.name == &RacketLeft&) {
// Calculate hit Factor
float y = hitFactor(transform.position,
col.transform.position,
col.collider.bounds.size.y);
// Calculate direction, make length=1 via .normalized
Vector2 dir = new Vector2(1, y).
// Set Velocity with dir * speed
GetComponent&Rigidbody2D&().velocity = dir *
// Hit the right Racket?
if (col.gameObject.name == &RacketRight&) {
// Calculate hit Factor
float y = hitFactor(transform.position,
col.transform.position,
col.collider.bounds.size.y);
// Calculate direction, make length=1 via .normalized
Vector2 dir = new Vector2(-1, y).
// Set Velocity with dir * speed
GetComponent&Rigidbody2D&().velocity = dir *
}}好了,试试看吧,现在已经可以让球自由的弹来弹去了总结♂在这个教程里,我们学会了安装和使用Unity,能够创建场景,添加文理,运用基本的Unity物理系统和写一些简单的脚本记住啊,Unity用起来很简单,我们大多时候只需要用鼠标操作,以及些一些简单的脚本,就能够实现很多牛逼的效果,所以不用太害怕去创造新东西。下面列出一堆,你可以继续为这个游戏添加的有趣功能1.给小球添加追踪的效果2.添加音效3.添加一个显示分数4.让球动的越来越快5.加一个AI,现在我们只能左手和右手玩。。。6.添加一个初始菜单和结算界面7.发挥你的想象吧~
不依靠物理引擎,自己写反弹算法也可以啊,锻炼下自己的算法
辛苦楼主了
暖一下,乒乓游戏最大的难点就是如何控制球的反弹角度,当然现在有引擎直接写好了话说LZ,你在国内写注释也用英语吗?
登录百度帐号推荐应用【图片】一种笨办法用UGUI实现2D游戏血条【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:72,924贴子:
一种笨办法用UGUI实现2D游戏血条收藏
最近在做一个2D小项目,今天做完了人物头顶血条的实现和更随。网上关于UGUI做血条的教程并不多。我使用的是自己想出来的办法。并不是很好用,但是至少是可以做到的。UGUI做血条的重要控件非Slider莫属。于是我们可以想到在人物头顶放置Slider的方法。最简单粗暴的就是创建一个Slider成为人物对象的子物体。于是我们可以这样做:创建一个Slider,并把这个子物体删除(因为我们只是在做血条而已,你也可以选择禁用)。然后将Canvas的渲染模式调成世界坐标将Canvas和Slider的大小设定好,一般设定到与人物大小差不多即可(譬如这样),注意的是人物如果很小你需要的不是在T模式下调整而是改变Canvas和Slider的Scale。然后将血条改成你需要的颜色,使得Canvas成为人物的子物体即可(效果如图)看到这里,也许有人会问了。用这种办法做出来的血条,总是残留一个句柄,也就是在数值极端的时候并不能完全填满或者完全消失怎么办?其实要解决这个问题相当简单。我们只需要按照以下步骤来做即可:一、将Slider的Value设置为0二、将Fill物体在T模式下向右缩进至一个接近0 的值三、将Slider的Value设置为1,在T模式下调节Fill物体使得该物体与Background物体重合即可这样做完之后只需要在人物脚本中调用此Slider即可。还有一种办法是实例化出一个血条,在脚本中通过计算来确定显示位置。这样做的话要计算出不同模型的血条长度、宽度以及其他数值。在这里不详细说明了。直接附上简单的实例化代码供大家参考。
//height 变量其实就是 transform.localScale.y * gameObject.collider.size.y 的值
//blood 为血条物体
另外一种方法网上可以找到我就不作说明了
//bloodName作为public string 变量,反正要确保场景中不同的人物所实例化的血条名字不一样
Vector2 worldPosition = new Vector3(transform.position.x, transform.position.y + height);
GameObject tempObject = Instantiate(blood, worldPosition, Quaternion.identity) as GameO
tempObject.name = bloodN
GameObject.Find(bloodName).transform.parent =[注]
本文首发于游戏蛮牛论坛,作者均为本人,如需转载请注明出处。
首发帖子地址:
/thread-.html
(出处: -u3d游戏开发者社区【游戏蛮牛】)
如果还有其他关于Unity3D的问题,可以在本帖内留言。如果我能够解决我会尽力回答。以下问题在此统一回复,帖子内不再回复:Q:楼主哪里有Unity软件下载,可以发一份给我吗?A:Unity官网Q:楼主你有Unity汉化包吗?A:没有Q:我是小白不懂,请问学这个难吗?A:难得要死Q:学这个前景怎么样?A:学精通之后找了工地搬砖的工作Q:楼主你有好的教程吗,可以发给我吗,纯小白A:教程可以去游戏蛮牛Q:楼主你会修电脑吗?可以给我推荐一款电脑吗?怎么重装系统?A:滚你丫的!!!!!
楼主你够了
搞两个图片,血的宽度案%显示不就行了吗?
Vector2 worldPosition = new Vector3(transform.position.x, transform.position.y + height);???到底是2还是3???
这有什么简单粗暴的?我看过一本书里教的方法就是楼主说的方法
找到楼主的image做cd那个但是我新建image 已经没有Image Type属性
登录百度帐号推荐应用

我要回帖

更多关于 疯狂喷气机破解版 的文章

 

随机推荐