Unity3D 游戏开发之Unity3D Native2D特性研究.docx_第1页
Unity3D 游戏开发之Unity3D Native2D特性研究.docx_第2页
Unity3D 游戏开发之Unity3D Native2D特性研究.docx_第3页
Unity3D 游戏开发之Unity3D Native2D特性研究.docx_第4页
Unity3D 游戏开发之Unity3D Native2D特性研究.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Unity3D 游戏开发之Unity3D Native2D特性研究精灵(Sprite)与精灵图集 虽然我们将Unity3D的2D特性成为Native2D,不过事实上Natvite只是相对于第三方插件而言的,从本质上Unity3D的2D仍然是属于3D的范畴。精灵(Sprite)是我们走进Native2D的第一个组件,所以的2D特性都是以这个组件作为基础。学习过2D游戏开发的朋友应该知道精灵其实就是我们在2D世界里一张贴图。好了,下面我们创建一个新的项目来演示如何使用Sprite组件吧!第一个让我们激动人心的特性是我们可以在创建项目的时候就决定一个项目是3D游戏还是2D游戏,如图,这里我们直接选择2D,因为我们今天要探索的是Unity3D的Native2D特性 进入Unity后我们将注意到Unity的工具栏上会出现一个2D/3D的选项按钮且在当前场景中2D按钮被激活,这意味着这是一个2D项目,通过切换该按钮我们可以发现,【狗刨学习网】Unity3D的Native2D就是将Unity3D的Z轴固定以后的效果,所以从本质上来讲Unity3D的Native2D还是3D引擎在2D效果下的一种实现。 我们注意到Sprite组件中有一个最重要的SpriteRenderer组件,该组件负责的是对Sprite的渲染,我们可以通过指定Sprite这个属性来指定的渲染的资源。我们选择其中的一个图片资源,可以看到其属性窗口: 其中TextureType用来指明贴图的类型,这里我们选择Sprite类型,因为只有这种类型的贴图才能提供给Sprite组件来使用。SpriteMod用来指定精灵是一张单个的图还是一系列图集,我们注意到这张图片是一个帧动画序列,所以我们应该选择Multiple类型。接下来,我们单击SpriteEditor按钮打开精灵编辑器,目的是将这些精灵图集分割成单个的图片。如果大家阅读过博主刚开始学习Unity3D时写过的文章,一定记得博主曾经用PhotoShop将一张帧动画序列图用切图的方式分割出来,再通过绘制贴图的方式来实现帧动画吧。这样是不是很麻烦啊?没关系,Unity3D的Nativie2D提供的精灵编辑器可以帮你快速地完成这一工作。文章出处:狗刨学习网。我们打开精灵编辑器: 大家可以看到这里博主将这张图片分割成了16个图片。这里有一个技巧是可以通过Trim按钮获得大小一致的图块,因为精灵编辑器可以帮助你判断图形的边界。这样做的好处是Unity可以帮你生成16张个帧动画序列,从而你可以任意地调用某一帧动画,然而资源管理器中并不会生成相应的文件,这样可以节省项目资源的大小。文章出处:狗刨学习网。如图:好了,接下来,我们来编写脚本来展示如何使用这组精灵动画:1. usingUnityEngine;2. usingSystem.Collections;3. 4. publicclassSpriteScript:MonoBehaviour5. 6. /向上的精灵集合7. publicSpriteUpSprites;8. /向下的精灵集合9. publicSpriteDownSprites;10. /向左的精灵集合11. publicSpriteLeftSprites;12. /向右的精灵集合13. publicSpriteRightSprites;14. 15. /上一次使用的精灵集合16. privateSpritelastSprites;17. /当前使用的精灵集合18. privateSpritecurrentSprites;19. 20. /当前帧序列索引21. privateintindex=0;22. /每秒帧数23. privatefloatfps=10;24. /当前经历时间25. privatefloatcurrentTime=0;26. 27. /角色当前状态28. privatePlayerStatestate;29. 30. /精灵渲染器31. privateSpriteRendererrenderer=null;32. 33. voidStart()34. 35. /初始化角色状态36. state=PlayerState.Idle;37. /初始化角色精灵集合38. currentSprites=UpSprites;39. lastSprites=currentSprites;40. /获取精灵渲染器41. renderer=GetComponent();42. 43. 44. 45. voidFixedUpdate()46. 47. if(Input.GetAxis(Horizontal)=1)48. state=PlayerState.Walk;49. SetSprites(RightSprites);50. MoveTo(newVector2(Time.deltaTime*2.5F,0);51. elseif(Input.GetAxis(Horizontal)=-1)52. state=PlayerState.Walk;53. SetSprites(LeftSprites);54. MoveTo(newVector2(-Time.deltaTime*2.5F,0);55. elseif(Input.GetAxis(Vertical)=1)56. state=PlayerState.Walk;57. SetSprites(UpSprites);58. MoveTo(newVector2(0,Time.deltaTime*2.5F);59. elseif(Input.GetAxis(Vertical)=-1)60. state=PlayerState.Walk;61. SetSprites(DownSprites);62. MoveTo(newVector2(0,-Time.deltaTime*2.5F);63. elseif(!Input.anyKey)64. state=PlayerState.Idle;65. 66. DrawSprites(currentSprites);67. 68. 69. /角色移动70. privatevoidMoveTo(Vector2offest)71. 72. /根据偏移量计算角色位置73. floatx=transform.position.x+offest.x;74. floaty=transform.position.y+offest.y;75. /使用2D刚体组件来移动精灵76. this.rigidbody2D.MovePosition(newVector2(x,y);77. 78. 79. /设置当前精灵集合80. privatevoidSetSprites(Spritesprites)81. 82. currentSprites=sprites;83. /如果当前精灵集合和上一次使用的精灵集合不等则表明要切换精灵集合84. if(currentSprites!=lastSprites)85. 86. lastSprites=currentSprites;87. index=0;88. 89. 90. 91. /绘制当前精灵集合92. privatevoidDrawSprites(Spritesprites)93. 94. /如果角色处于站立状态则显示第一帧95. if(state=PlayerState.Idle)96. renderer.sprite=sprites0;97. else98. currentTime+=Time.deltaTime;99. /如果当前时间大于帧动画渲染时间则需要渲染新的帧动画100. if(currentTime1/fps)101. /使索引增加并将当前时间清零以便于重新计数102. index+=1;103. currentTime=0;104. /使索引连续画面循环105. if(index=sprites.Length)106. index=0;107. 108. 109. 110. /渲染111. renderer.sprite=spritesindex;112. 113. 114. #region角色状态枚举定义#115. enumPlayerState116. 117. Walk,118. Idle119. 120. #endregion121. 那么,我们来看看实际的运行效果吧: 这是一个控制人物沿着上、下、左、右四个方向进行移动的动画效果,我们很容易就实现了。不过,我们代码似乎写了不少啊,那么有没有一种更好的方法呢?在Unity3D没有推出2D组件的时候,我们可以以贴图的形式来绘制一个Sprite,对于这种帧动画序列图片,我们可以通过offset来决定贴图上要显示的位置。不过这种方法似乎只对普通的贴图管用,对于Sprite无能为力。博主个人还是喜欢使用这种方式,毕竟有了精灵编辑器后,切图就是一件很简单的事情了。【狗刨学习网】下面,我们再来给出一个通用的脚本,该脚本可以实现任何连续帧动画的循环播放,适合在游戏中表现相对玩家来说静止的效果,比如在游戏中飘扬的旗子、飞来飞去的小鸟等等:1. usingUnityEngine;2. usingSystem.Collections;3. 4. publicclassFightScript:MonoBehaviour5. 6. /序列帧动画集合7. publicSpriteAnimations;8. /当前帧序列索引9. privateintindex=0;10. /每秒帧数11. publicfloatfps=10;12. /当前经历时间13. privatefloatcurrentTime=0;14. /精灵渲染器15. privateSpriteRendererrenderer;16. 17. voidStart()18. 19. /获取精灵渲染器20. renderer=GetComponent();21. 22. 23. voidFixedUpdate()24. 25. DrawSprite();26. 27. 28. /提供一个外部接口以便于随时改变动画29. publicvoidSetAnimations(Spritesprites,intindex)30. 31. this.Animations=sprites;32. this.index=index;33. 34. 35. /根据精灵集合播放动画36. voidDrawSprite()37. 38. currentTime+=Time.deltaTime;39. /如果当前时间大于帧动画渲染时间则需要渲染新的帧动画40. if(currentTime1/fps)4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论