unity2d模板文档格式.docx
- 文档编号:19187996
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:5
- 大小:17.23KB
unity2d模板文档格式.docx
《unity2d模板文档格式.docx》由会员分享,可在线阅读,更多相关《unity2d模板文档格式.docx(5页珍藏版)》请在冰豆网上搜索。
添加游戏物体移动超出边框的控制文章出处狗刨学习网usingunityengine;
usingsystem.collections;
publicclassplayer:
monobehaviour{
publicfloatplayerspeed;
//usethisforinitialization
voidstart(){
}
//updateiscalledonceperframe
voidupdate(){
floatamttomove=
input.getaxis("
horizontal"
)*time.deltatime*playerspeed;
gameobject.transform.translate(Vector3.right*amttomove);
if(transform.position.x //如果方块移动超出游戏窗体右边,方框将从左边窗口进入
transform.position=new
Vector3(5.25f,transform.position.y,transform.position.z);
if(transform.position.x>
5.25){
//如果方块移动超出游戏窗体右边,方框将从左边窗口进入
Vector3(-7.5f,transform.position.y,transform.position.z);
}
}}
usingunityengine;
publicclassbullettile:
publicfloatbulletspeed;
privatetransformmytransform;
mytransform=gameobject.transform;
//定义炮弹移动速度
floatamttomove=bulletspeed*time.deltatime;
//让炮弹垂直向上移动
mytransform.translate(Vector3.up*amttomove);
//如果炮弹移动超出游戏场景则销毁炮弹
if(mytransform.position.y>
5.15){
destroy(this.gameobject);
//销毁当前对象}}}
publicgameobjectbulletprefab;
//获取发射器位置发射器的正上方
Vector3position=new
Vector3(transform.position.x,transform.position.y+transform.localscale.y/2.0f,transform.position.z);
//按下空格键发射子弹
if(input.getkeydown("
space"
)){
//实例化一个炮弹对象instantiate(bulletprefab,position,quaternion.identity);
篇二:
一种unity2d多分辨率屏幕适配方案
[原创]一种unity2d
多分辨率屏幕适配方案
此文将阐述一种简单有效的unity2d多分辨率屏幕适配方案,该方案适用于基于原生开发的unity2d游戏,即没有使用第三方2d插件,如uni2d,2dtoolkit等开发的游戏,ngui插件不受这个方案影响,可以完美和此方案配合使用。
---------------------------------------正式开始的分割线-----------------------------------------
先说明一些基本的概念:
1.屏幕的宽高比aspectRatio=屏幕宽度/屏幕高度
2.unity2d中摄像机镜头的尺寸决定了我们实际看到游戏内容的多少,在编辑器中我们可以通过调整摄像机camera的orthographicsize属性值来调整摄像机的大小。
如下图所示,当摄像机orthographicsize属性值等于当前屏幕高度单位的一半时,摄像机大小正好与屏幕大小相等。
注意这里提到的是屏幕单位高度的一半,这个数值是经过像素到单位比即pixelstounits换算的,unity2d中这个比例的默认值是100,即100像素等于1单位。
如果我们的游戏屏幕有640像素高,那么实际换算成单位高度则是
6.4个单位,当我们摄像机的orthographicsize值是3.2时,摄像机大小刚好与屏幕大小相等。
(可以通过此选项调整每张图片的像素单位比)
看到这里你可能会发出疑问,unity编辑器中只能直接调整摄像机的高度,那摄像机的宽度是如何确定的呢?
答案就是我们最前面提到的屏幕宽高比。
unity会根据当前屏幕实际的宽高比和摄像机的
orthographicsize值来计算出摄像机的宽度值,即:
摄像机实际宽度=摄像机orthographicsize*2*屏幕宽高比
也即是
摄像机实际宽度=摄像机高度*屏幕宽高比
我举个例子说明一下,iphone4的屏幕像素为640*960,宽高比为2:
3,假设pixelstounits值为100,那么如果设摄像机高度size值为4.8,那么摄像机实际宽度按照公式算出6.4,刚好就是屏幕的单位宽度。
---------------------------------------渐入佳境的分割线------------------------------------------
好了,讲了以上的东西我们就知道为何我们的游戏会在不同的屏幕分辨率的设备上有不同的显示了。
不同的屏幕分辨率,相同的摄像机orthographicsize值会产生不同的摄像机尺寸,不同的摄像机尺寸导致实际显示的游戏内容的不同。
接下来我再提出两个概念,为了方便后文的说明:
1.游戏有效内容,指游戏中一定需要完整显示在屏幕上的内容;
2.
我们的开发一般都会选择在一个固定的设计分辨率上进行,比如常用的ios竖屏游戏设计分辨率640*960,我们就以这个设计分辨率为例。
通常情况下,设计分辨率尺寸就是我们游戏有效内容的尺寸。
采用这个分辨率,我们将摄像机的orthographicsize值设为4.8。
假设我们不做任何多分辨率的适配处理,使我们游戏的有效内容区域和实际内容区域尺寸相同,都为6.4*9.6(已经做过像素到单位的换算,下同),让这个游戏运行在一款iphone5设备上(即屏幕是640*1136)时,我们来看看会发生什么情况。
为了更好的说明,我们先设变量:
游戏有效内容尺寸为gameValidcontentsize
游戏实际内容尺寸为gamecontentsize
摄像机尺寸为camerasize
实际屏幕尺寸为screensize
屏幕宽高比为aspectRatio
接着开始计算:
orthographicsize=4.8
aspectRatio=640/1136=9/16
camerasize.height=摄像机orthographicsize*2=4.8*2=9.6
camerasize.width=camerasize.height*aspectRatio=9.6*9/16=5.4
根据计算,我们得到实际摄像机的宽度为5.4,而游戏有效内容宽度是6.4,摄像机宽度小于游戏有效内容宽度,即camerasize.width 第一张是在640*960的设备上运行时的效果,一切正常。
第二张是在640*1136的设备上运行的效果,可以看到游戏内容被剪得很明显,右上角的按钮都快没有了。
如何解决这个问题呢?
最直接的想法是,如果我们的游戏在640*1136
屏幕的设备上,摄像机宽度依然保持是6.4
,那肯定就不会剪切了。
为了做到这一点,我们必须在运行时来调整camera的orthographicsize值。
方法很简单,还是套用上面讲到的公式:
aspectRatio=9/16
为了使camerasize.width=6.4,我们计算
camerasize.height=camerasize.width/aspectRatio=6.4*16/9(因为除不尽,后面就不继续写了)
camera的orthographicsize=camerasize.height/2约=5.69
我们再一次运行游戏,动态修改camera的orthographicsize值为5.69,可以看到:
宽的方面是完全显示出来了,可是上下都出现了的“黑边”(这里是蓝边,呵呵)。
这是因为摄像机的高度已经大于了游戏内容的高度,所以自然会出现没有内容的区域,即“黑边”。
为了解决这个问题,我们就需要给游戏增加上下边,直接上和黑边同尺寸的图是一种方法,但是还有一种更简易的办法,直接将游戏背景放大一些,以盖住黑边!
这个游戏比较简单,我们就用这个简易的方法,我们将游戏背景放大到1.3倍,如下图:
篇三:
unity2d射击游戏源码
usingsystem.collections;
privatestatestate=state.playing;
publicgameobjectprojectileprefab;
//bulletobject
publicgameobjectexplosionprefab;
if(state!
=state.explosion)
{
//amounttomove
floatamttomove=input.getaxisRaw("
)*playerspeed*time.deltatime;
//movetheplayer
transform.translate(Vector3.right*amttomove);
//screenwrap
if(transform.position.x transform.position=newVector3(-5.8f,transform.position.y,transform.position.z);
elseif(transform.position.x>
=5.8f)
transform.position=(unity,2d,模板)newVector3(5.8f,transform.position.y,transform.position.z);
)//positionoftheplane
instantiate(projectileprefab,position,quaternion.identity);
//setthebulletwithplane
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- unity2d 模板