| 注册
home doc ppt pdf
请输入搜索内容

热门搜索

年终总结个人简历事迹材料租赁合同演讲稿项目管理职场社交

基于Unity3d引擎的ACT游戏设计与实现

平***苏

贡献于2021-08-16

字数:24775


基Unity3d引擎ACT游戏设计实现
Design and implementation of act game based on unity3d engine
容摘

游戏诞生始现游戏市场发生非常变化卡带游戏机现电脑专门游戏机等中素游戏重渡期素图占空间少颜色少初阶段电子计算机时代中采作制作游戏标准图片形式开始游戏处理芯片较低级然3d游戏相较运行图片严格颜色限制图片动态形式出现游戏开发中Unity工具发明游戏开发入门游戏开发困难课题中Unity引擎开发素风格2d横板动作游戏中会复刻典素游戏中游戏技结合前火热Unity物理引擎前游戏前技术进行重现游戏开发思路参考价值
关键词:素游戏 2d横板动作游戏 Unity物理引擎




Abstract
From the beginning of the game to now the game market has changed a lot from the game machine with card to the computer and special game console Among them the pixel game is a very important transition period Because the pixel image takes up less space and color it was adopted as the standard image form for making games in the early era of electronic computer Because the first game processing chip is relatively lowlevel it can't be compared with today's 3D games and the pictures that can run have strict appearance Color and size limits And pictures are almost always in dynamic form In today's game development the invention of unity's tool makes it no longer difficult for people who can yearn for game development to start game development In this project we will use unity engine to develop 2D board action game with pixel style in which we will copy the game skills of several classic pixel games and combine the current hot unity physical engine to reproduce the previous games with the current technology which has great reference value for the future game development ideas
Key words pixel game 2D board action game unity physical engine





目录
1 研究课题意义 1
2 游戏设计工具 2
3 游戏详细设计 3
31 设置游戏场景图 3
32 Tilemap部分工具 4
33 利Tilemap开始进行图制作 4
34 制作动画 5
35 制作玩家控制方式(安卓控制脚开发) 5
36 创建角色摄机 6
361 角色功实现 6
37 开发玩家角种状态 7
371 面状态 7
372 设置段跳(二段跳) 8
373 墙壁滑动状态 8
374 玩家前跳 10
375 二段跳跃蹬墙跳跃 11
376 墙角攀爬系统 12
377 玩家前残影效果 14
378 玩家攻击系统 16
38 敌系统 17
381 稻草模型 17
382 野猪模型 20
39 游戏图(Minimap) 23
310 话系统 24
311 玩家触碰敌受伤害玩家死亡重生系统 25
3111 重生系统 26
312 辅助工具Gizmos 27
4 开发总结 29
5 参考文献 30
6 致谢 31














1 研究课题意义

动作游戏(ActionGame)游戏中种强调玩家反应力手眼配合游戏机电脑辅动作游戏剧情般较简单通熟悉操作技巧进行游戏类游戏般较刺激性情节紧张声光效果丰富操作简单
动作游戏中FC游戏家机时代中较著名作品高桥名险岛松鼠战等游戏横板游戏作品引入胜剧情巧妙关卡设计成8090年代难忘游戏现PC游戏作品中动作游戏优秀作品更数胜数StudioMDHR开发游戏Cuphead正式发售约月部作品销量已突破百万关达星露谷物语Undertale饥荒等相水款游戏已成功登陆台成炙手热游戏作品TeamCherry开发空洞骑士款画面清新难度挑战动作险游戏里面丰富关卡设计适中难度吸引玩家疯狂然现种moba游戏射击游戏类网游动作游戏诞生然算非常炙手热年旧魅力减玩家群体玩家愿意通探索进行游戏探险合作类游戏玩家说游戏作品敬仰游戏开发者说智力创造力挑战
动作游戏分类实次研究课题动作游戏中横板闯关游戏游戏中玩家通控制角武器攻击敌消灭敌关游戏游戏中运游戏AI常限状态机框架开发种框架游戏中非常常见运框架敌AI更具智性游戏更具趣味研究课题目运学知识开发出完整游戏力提升提供踏脚石





2 游戏设计工具

游戏设计工具编程工具MicrosoftVisualStudio2017图片绘制工具photoshop游戏引擎工具Unity3d
编程工具VisualStudio2017MicrosoftVisualStudioVS全称VS美国微软公司开发工具包系列产品VS基完整开发工具集包括整软件生命周期中需部分工具UML工具代码控工具集成开发环境(IDE)等等
UnityVisualStudio关系中旧版Visualstudio2015前难支持Unity开发知道Visualstudio2015中新增VisualStudioToolsforUnity 插件Unity程序开发工作提供支持时现Visualstudio2017版已完全支持Unity3d程序开发Visualstudio2017版中够快速找Unity3d脚组件Unity3d程序开发提高效率
图片绘制工具photoshop:AdobePhotoshop简称PSAdobeSystems开发发行图处理软件 Photoshop处理素构成数字图众编修绘图工具效进行图片编辑工作领域中活跃着面设计等2d游戏开发中必然少游戏素材Photoshop快速绘制需2d游戏素材AdobePhotoshop中导出种格式图片Unity3d中支持
游戏引擎工具Unity3d:Unity3DUnity Technologies开发玩家轻松创建诸三维视频游戏建筑视化实时三维动画等类型互动容台综合型游戏开发工具全面整合专业游戏引擎Unity3d创建属2d3d游戏Unity3d部功丰富API满足游戏开发员种开发需求Unity3d完全基net环境c#语言支持





3 游戏详细设计

详细设计游戏中重复杂逻辑进行详细讲解具体详细讲解游戏中种逻辑实现续希开发类游戏开发者提供鉴参考

31 设置游戏场景图

2d游戏图采sprite精灵图片手动摆放图图片十分浪费时间难保证图片间否存缝隙图规形状图设置碰撞器十分困难十分耗费时间事情
Unity系统带tilemap图构建系统新功Unity20172版提供样新功新功代传统2d游戏图制作方式提高开发员制作游戏图速度
首先介绍Tilemap基概念Tilemap起实现实中画画样五基部分组成:
Sprite(精灵):纹理容器型纹理图集转换精灵图集(Sprite Sheet)
Tile(瓦片):包含精灵二属性颜色碰撞体类型瓦片画布画画样画画时设置颜色属性
Palette(调色板):画布(Canvas)画画时会需位置保存绘画结果类似调色板(Palette)功保存瓦片绘制网格
Brush(笔刷):画东西绘制画布Tilemap时笔刷中意选择绘制出线条方块等种形状
Tilemap(瓦片图):类似Photoshop中图层Tilemap画Tile
Tilemap工具开发员根美术素材快速进行2d场景图绘制

32 Tilemap部分工具

Grid(网格):控制网格属性组件TilemapGrid子象Grid类似UI Canvas(UI画布)
Tilemap渲染器(Tilemap Renderer):控制TileTilemap渲染控制诸排序材质遮罩等

33 利Tilemap开始进行图制作

面理开始进行实际图制作
实现点击window菜单钮开2d>tilepalette开调色板创建新调色板命名TileSet1素材精灵图片拖调色板










时层次面板点击右键2dObjectàtileMap创建出Gird节点物体




Gird节点创建游戏需板背景装饰等Tile map节点分命名PlatformsBackgroundDecorationForeground Decoration
点击Platforms时调色板面板Active Tilemap里选择Platforms点击笔刷工具开始绘制板


点击Gird节点Background节点时调色板面板Active Tilemap里选择Background里然前绘制PlatformTilemapActiveTilemap选择外层会影响前Platform
绘制层Tilemaptilemap图片样绘制序考虑Tilemap间渲染序TilemapTilemap renderner组件Additional Settingssorting layer中Tilemap添加应sorting layer




角必须行走板墙壁Tile map添加碰撞体然tilemap质精灵图片加盒子碰撞器传统盒子碰撞器添加方法效率高采Tilemap独碰撞器添加方法添加Tilemapcollider2d种方法tilemap格子添加盒子碰撞器会消耗量资源tilemap添加Composite Collider2d种碰撞器会根Tilemap形状计算压缩必Tilemap碰撞器Tilemapcollider2d组件Used By Composite勾选Composite Collider2D会生效设置完运行游戏发现游戏板墙壁掉板墙壁Tilemap2d刚体设置Static板墙壁会动

34 制作动画

玩家动作序列图拖层次面板产生动画文件保存Animatons文件夹
野猪稻草动作动作序列图拖层次面板产生动画文件保存Animatons文件夹


35 制作玩家控制方式(安卓控制脚开发)

游戏支持pc台安卓台pc台通键盘键输入实现玩家控制安卓台通屏幕触摸检测通手机屏幕设置UI钮实现玩家控制节介绍设置手机UI实现玩家输入节核心思路通触摸插件EasyTouch玩家输入进行操作
已导入Easytouch插件层级面板普通UGUI创建组件样右键创建Easytouch ControlsàButton创建出左右键攻击跳跃等键
需脚挂载游戏物体层级面板创建空物体scripts脚挂载Mobilescrpts脚中编写玩家移动方法编写玩家攻击跳跃等方法


玩家控制脚面两套预处理模板分处理游戏安卓台运行移动攻击逻辑游戏标准windows台运行时玩家移动攻击逻辑样实现windows台者安卓台游戏运行


#if UNITY_ANDROID
安卓代码运行处
#endif

#if UNITY_STANDALONE_WIN
windows标准台运行处
#endif

36 创建角色摄机

游戏采2d游戏模式玩家移动时候需摄机进行玩家移动UnityPackage manage中置Cinemachine插件CineMachine创建种类型摄机非常适合项目中时CineMachine提供种功方便实现游戏中功
项目2d游戏菜单栏中点击Cinemachine菜单项创建2dCamera

361 角色功实现

Cinemachine中组件已置非常常见相机功包括角色功插件实现功步骤非常简单需整角色游戏物体transform拖进新创建2dCamera中


37 开发玩家角种状态
371 面状态

2d游戏玩家需面行走玩家需进行跳跃时检测否进行跳跃检测玩家否必少条件3d游戏中直接玩家身添加全身碰撞盒子全身碰撞盒子面进行碰撞检测项目中存墙壁状态站难状态进行区分工作中需进行墙壁碰撞检测玩家碰撞盒进行检测墙壁碰撞检测相互矛盾玩家物体挂载空物体空物体进行碰撞检测果空物体添加碰撞盒必然会玩家身碰撞盒发生碰撞检测造成必错误方法进行碰撞检测里物理函数Physics2DOverlapCircle()进行射线检测
物理函数Physics2DOverlapCircle()函数检测某碰撞体某圆形区域返回碰撞体

玩家物体挂空物体命名GroundCheck检测玩家否已着图示



检测玩家否着Physics2DOverlapCircle()函数检测否着中三参数第参数点第二参数检测半径第三参数检测层
定义三参数中第transform类型公变量groundCheckgroundCheckposition参数传进检测函数里面指定检测物体点第二参数半径groundCheckRadius第三定义公Layermask变量whatIsGround等脚编译Unity编辑器里Platformstilemap添加LayergroundPlatforms拖进脚ground中
核心实现代码:
public Transform groundCheck 检测玩家否着
public LayerMask whatIsGround 面层
isGrounded Physics2DOverlapCircle(groundCheckposition groundCheckRadius whatIsGround)

372 设置段跳(二段跳)

玩家跳跃程中y轴速度明显区玩家跳程中玩家速度方着y轴正方增加落程中玩家速度方着y轴负方减少玩家速度方套完整跳跃部分区分开

套跳跃动作分三部分Animator参数列表中定义y轴速度y轴速度制作玩家跳跃混合树混合树分三阶段第阶段升第二阶段升顶点第三阶段玩家达高点落阶段









373 墙壁滑动状态

游戏中玩家触碰墙壁着前方话玩家会重力马掉面墙壁类似种摩擦力玩家游戏象缓慢墙壁滑
玩家空中触碰墙着前方时候拥种行玩家需满足项条件第项玩家空中状态状态触碰墙法拥种状态第二项玩家触碰墙种状态触碰墙发生第三项玩家方玩家游戏象前方致谓前方玩家正面面方满足三状态触发玩家着墙壁缓慢滑行











玩家物体挂空物体命名wallCheck检测玩家否已触碰墙壁
检测玩家否着射线检测方式检测玩家否触碰墙壁项目中碰撞盒子检测方法射线检测应函数Physics2DRaycast()射线检测处角身挂载太碰撞盒子中四参数分检测物体点方射线距离射线检测层
定义四参数中第transform类型公变量wallCheckwallCheckposition参数传进检测函数里面指定检测物体点第二参数方传进transformright玩家前方第三参数射线距离定义float类型变量wallCheckDistance传进函数中第四参数射线检测层whatIsGround作参数传进函数中


玩家身具种状态状态状态果标志位进行区分会造成程序混乱玩家滑动状态创建标志位变量isWallSliding
游戏进行程中必须时候检测玩家前处状态创建函数CheckIfWallSliding检测玩家否处墙壁滑动状态实现检测核心代码

privatevoid CheckIfWallSliding()
{
if (isTouchingWall && movementInputDirection facingDirection && rbvelocityy < 0 && canClimbLedge)
{
isWallSliding true果已触碰墙壁y轴速度0(落中)键输入方玩家正面
}
else
{
isWallSliding false
}
}

检测玩家否处滑动状态函数必然处理玩家滑动行方法检测玩家滑动状态结果中根检测结果处理玩家墙壁滑动行实现滑动行代码
if (isWallSliding) 玩家正处墙壁滑动状态时
{
if(rbvelocityy < wallSlideSpeed)
{
rbvelocity new Vector2(rbvelocityx wallSlideSpeed)
}
}

374 玩家前跳

定义方法原进行跳跃游戏中常常需根玩家输入方进行相应方跳跃原基础结合输入方该方添加相应力便该方进行跳跃
实现步骤:
开始跳跃原进行跳跃游戏跨度较台玩家需跳跃应台完成务定义 空中移动力量movementForceInAir
定义Vector3变量movementForceInAir*movementInputDirection值传进变量作x值刚体通AddForce()添加力添加玩家刚体

375 二段跳跃蹬墙跳跃

游戏中二段跳蹬墙跳跃拓展玩家操作实际意义操作二段跳场景玩家跳跨度较者高度较高台时候二段跳帮助玩家弥补跳跃宽度者跳跃高度足缺陷蹬墙跳场景玩家需跳跃较高高台时玩家二段跳法达高度时玩家助墙壁身体反弹通断反弹 达玩家够达高度

二段跳:玩家空中次跳跃时跳跃键时候玩家方产生定力
蹬墙跳:玩家触碰墙通判断玩家否达蹬墙跳条件然根玩家定方产生定力

检测蹬墙跳核心代码
if(isGrounded&&isTouchingWall&&movementInputDirection 0 &&movementInputDirection facingDirection)
{
WallJump()果触碰墙输入方
}
实现蹬墙跳核心代码:

墙壁跳跃

privatevoid WallJump()
{
if (canWallJump)
{
rbvelocity new Vector2(rbvelocityx 00f)力跳跃正常跳跃样直接设定速度果速度失力速度越加力速度越
isWallSliding false 开始y轴速度设置0
amountOfJumpsLeft amountOfJumps
amountOfJumpsLeft
Vector2 forceToAdd new Vector2(wallJumpForce * wallJumpDirectionx * movementInputDirection wallJumpForce * wallJumpDirectiony)
rbAddForce(forceToAdd ForceMode2DImpulse)
12右角方

jumpTimer 0 计时器清零
isAttemptingToJump false尝试跳跃关闭
checkJumpMultiplier true
turnTimer 0
canMove true
canFlip true
hasWallJumped true
wallJumpTimer wallJumpTimerSet
lastWallJumpDirection facingDirection

}
}

376 墙角攀爬系统

墙角攀爬系统玩家二段跳蹬墙跳外种玩家移动拓展方式墙角攀爬系统玩家通跳跃跳台角落边缘落时够停边缘位置产生段位移达台玩家进行攀爬动作然登台玩家跳跃高度达墙角跳台掉面

首先判断图中属台墙角物体玩家接触墙角动播放攀爬动作首先判定玩家什时候悬挂



图示判断条件应该首先玩家头顶没额外台墙壁方应该墙壁游戏角色判定应该离墙壁远角色头顶发出射线没碰撞物体角色身体射线应该碰撞物体符合条件判定悬挂状态
检测核心代码
isTouchingWall Physics2DRaycast(wallCheckposition transformright wallCheckDistance whatIsGround)


isTouchingLedge Physics2DRaycast(ledgeCheckposition transformright wallCheckDistance whatIsGround)

if(isTouchingWall&& isTouchingLedge&& ledgeDetected)
{
ledgeDetected true
ledgePosBot wallCheckposition攀爬缘设置身体射线位置
}

等播放完玩家攀爬动画玩家游戏象会根墙角攀爬系统计算出结果产生段位移达台面:
具体实现代码
privatevoid CheckLedgeClimb()
{
if(ledgeDetected && canClimbLedge)
{
canClimbLedge true

if (isFacingRight)
{
ledgePos1 new Vector2(MathfFloor(ledgePosBotx + wallCheckDistance) ledgeClimbXOffset1 MathfFloor(ledgePosBoty) + ledgeClimbYOffset1)
ledgePos2 new Vector2(MathfFloor(ledgePosBotx + wallCheckDistance) + ledgeClimbXOffset2 MathfFloor(ledgePosBoty) + ledgeClimbYOffset2)
}
else
{
ledgePos1 new Vector2(MathfCeil(ledgePosBotx wallCheckDistance) + ledgeClimbXOffset1 MathfFloor(ledgePosBoty) + ledgeClimbYOffset1)
ledgePos2 new Vector2(MathfCeil(ledgePosBotx wallCheckDistance) ledgeClimbXOffset2 MathfFloor(ledgePosBoty) + ledgeClimbYOffset2)
}

canMove false
canFlip false

animSetBool(canClimbLedge canClimbLedge)
}

if (canClimbLedge)
{
transformposition ledgePos1
}
}

动画状态机中设置攀爬动画转换条件动画动画间转换参数攀爬动画中调出Animation面板Animation面板中开攀爬动画攀爬动画帧添加动画事件动画播放完调事件函数传进

377 玩家前残影效果

前残影指玩家输入前操作时玩家十分迅速速度进行段较长位移玩家短时间进行段较长位移残影效果突出玩家移动迅捷谓残影现象指眼睛捕获移动事物速度事物身移动速度时眼睛法清事物运动中位置视觉暂留影响眼睛见事物前位置影种影称残影衬托玩家移动速度快残影合适
玩家移动程中记录玩家移动位置玩家移动位置存进物体中物体着物体根移动距离设置相应数量残影残影透明度会着玩家位置增变淡核心原理象池技术游戏中频繁调销毁方法生成方法会极消耗系统资源象池技术弥补缺点象池背理念实非常简单象存储池子中需时次次实例化新象池重特性象池设计模式质允许获取新象真新象循环象

创建脚PlayerAfterImageSprite挂载空物体脚记录玩家单位置玩家旋转玩家位置变化透明度值
创建空脚PlayerAfterImagePool挂载空物体脚理AfterImage产生销毁充象池作
实现象池具体代码
[SerializeField]
private GameObject afterImagePrefab

private Queue availableObjects new Queue()

publicstatic PlayerAfterImagePool Instance { get privateset }

privatevoidAwake()
{
Instance this
GrowPool()
}

privatevoid GrowPool()
{
for (int i 0 i < 10 i++)
{
var instanceToAdd Instantiate(afterImagePrefab)
instanceToAddtransformSetParent(transform)
AddToPool(instanceToAdd)
}
}

publicvoid AddToPool(GameObject instance)
{
instanceSetActive(false)
availableObjectsEnqueue(instance)
}

public GameObject GetFromPool()
{
if(availableObjectsCount 0)
{
GrowPool()
}

var instance availableObjectsDequeue()
instanceSetActive(true)
return instance
}

残影具体实现程通记录玩家单位置单位置间距离然象池中取出数玩家前位置赋值象池中位置完成象池更新判断逻辑玩家前位置象池中位置间差值残影间距离时玩家前位置赋值残影
外声明函数CheckDash检测玩家前状态关键语句
if(MathfAbs(transformpositionx lastImageXpos) >distanceBetweenImages)
{
PlayerAfterImagePoolInstanceGetFromPool()
lastImageXpos transformpositionx
}

378 玩家攻击系统

游戏中玩家需断目标点前进必然扫清前进路障碍玩家需攻击路遇怪物消灭怪物达目标点:
需求分析:玩家精灵图片附带武器整玩家作攻击检测必然适合玩家身添加空物体玩家移动时空物体会着移动空物体进行碰撞盒碰撞检测时保证玩家攻击时间间隔攻击动画正常播放
玩家输入攻击动作果时候状态允许攻击话进行攻击声明函数CheckAttacks检测玩家时候否符合攻击条件Timetime> lastInputTime + inputTimer判定玩家进行攻击

修正玩家攻击时细节
攻击动画播放时候玩家允许翻转身体方x轴方玩家攻击动画播放完翻转定义两方法方法DisableFlip禁玩家翻转方法EnableFlip恢复玩家翻转功
开玩家攻击动画Animation面板攻击动画开始帧添加事件选中DisableFlip方法动画结束时候附帧添加事件选中EnableFlip
添加方法FinishAttack1方法玩家攻击动画播放完时候攻击动作清零开玩家攻击动画Animation面板段攻击动画结束帧添加事件选中FinishAttack1方法

玩家攻击逻辑实现
添加方法CheckAttackHitBox检测玩家攻击物体核心原理:玩家节点挂载Attack1Position空物体Physics2DOverlapCircleAll方法获取攻击空物体Attack1Position触碰物体
遍历循环玩家攻击空节点CheckAttackHitBox触碰物体SendMessage形式碰撞物体父节点发送消息执行Damage方法中attackDetails数组保存着玩家攻击象攻击位置x值
实现代码:
privatevoid CheckAttackHitBox() 检测攻击物体
{
Collider2D[] detectedObjects Physics2DOverlapCircleAll(attack1HitBoxPosposition attack1Radius whatIsDamageable)

attackDetails[0] attack1Damage
attackDetails[1] transformpositionx

foreach (Collider2D collider in detectedObjects)
{
collidertransformparentSendMessage(Damage attackDetails)调碰撞物体父亲节点方法
Instantiate hit particle
}
}

38 敌系统

敌系统分两作示范第攻击力稻草模型第二具攻击力玩家受伤害敌野猪

381 稻草模型

游戏中稻草攻击力稻草受玩家攻击时会着玩家攻击方反方进行退造成玩家击退效果稻草生命值降0时稻草会炸开效果种玩家稻草劈断效果

攻击稻草
稻草全身分三部分第部分Alive整完整稻草精灵图片第二部分BrokenTop稻草部分精灵图片第三部分稻草部BrokenBottom全部分Alive层级设置Damageable稻草部分层级设置Dead





稻草三部分组成部分碰撞体稻草作整体移动时候稻草间会产生碰撞发生错误游戏里设定玩家穿稻草稻草玩家间会产生碰撞稻草部分稻草玩家间碰撞忽略掉开EditàProjectSetting开Physics2D面板Damageable层Damageable层碰撞掉Damageable层Dead层碰撞掉Player层Dead层碰撞掉Dead层Dead层碰撞掉















开始时候脚里获取稻草三部分刚体gameobject象start方法中稻草半部半部隐藏留稻草完整部分Alive
实现代码

aliveGO transformFind(Alive)gameObject
brokenTopGO transformFind(Broken Top)gameObject
brokenBotGO transformFind(Broken Bottom)gameObject

aliveGOSetActive(true)
brokenTopGOSetActive(false)
brokenBotGOSetActive(false)
稻草逻辑获取玩家面稻草血量处健康状态时候产生击退效果击退效果实现原理:稻草玩家击中时候玩家相反方产生速度实现代码
privatevoid Knockback()
{
knockback true
knockbackStart Timetime
rbAlivevelocity new Vector2(knockbackSpeedX * playerFacingDirection knockbackSpeedY) 砍方产生速度
}


根时间判断稻草否进行击产生退效果面稻草退频率太频繁实现代码
privatevoid CheckKnockback()
{
if(Timetime > knockbackStart + knockbackDuration && knockback)
{
knockback false
rbAlivevelocity new Vector2(00f rbAlivevelocityy)
}
}


添加函数Die处理稻草生命值0时候死亡逻辑具体逻辑:稻草生命值0时播放退动画然稻草全身部分Alive进行隐藏稻草半部分半部分显示出稻草半部分半部分获速度然AddTorque方法半部分刚体施加旋转力半部分半部分进行分离
实现核心代码:
privatevoid Die()
{
aliveGOSetActive(false)
brokenTopGOSetActive(true)
brokenBotGOSetActive(true)

brokenTopGOtransformposition aliveGOtransformposition
brokenBotGOtransformposition aliveGOtransformposition

rbBrokenBotvelocity new Vector2(knockbackSpeedX * playerFacingDirection knockbackSpeedY)
rbBrokenTopvelocity new Vector2(knockbackDeathSpeedX * playerFacingDirection knockbackDeathSpeedY)
rbBrokenTopAddTorque(deathTorque * playerFacingDirection ForceMode2DImpulse)
}

玩家攻击稻草时候稻草全身Alive产生粒子效果具体实现伤害稻草函数处理中实例化粒子效果预制体粒子效果预制体挂载销毁身脚

382 野猪模型

敌野猪具种状态碰玩家身体玩家造成定伤害敌
需求分析:
敌野猪具种状态巡逻状态攻击状态死亡状态控制脚定方便敌野猪种状态进行切换野猪状态进步扩展
敌野猪逻辑采限状态机方式控制

限状态机含义:限状态机称FSM(FiniteStateMachine)意时刻处限状态集合中某状态获输入字符时前状态转换状态者然保持前状态FSM状态转换图描述图中节点表示FSM中状态加权边表示输入字符时状态变化果图中存前状态输入字符应边FSM进入消亡状态(DoomState)FSM直保持消亡状态限状态机中重状态间切换更新进入代码示:

游戏中简单版限状态机野猪行进行驱动
private void EnterMovingState() 进入移动状态
private void UpdateMovingState() 更新状态
rivate void ExitMovingState() 离开状态

限状态机模板定义野猪行状态种状态间切换编写野猪种状态切换

首先定义野猪行枚举
private enum State 定义敌全部状态
{
Moving
Knockback
Dead
}

分处理编写野猪三状态时处理逻辑
开发敌野猪行走(Moving)状态射线检测检测敌野猪否触碰面检测敌野猪否触碰墙壁果触碰墙壁敌野猪走(翻转敌野猪身体)果没话进行敌野猪行走模式方法写UpdateMovingState方法中直检测敌野猪移动状态更新
privatevoid UpdateMovingState() 更新状态
{
groundDetected Physics2DRaycast(groundCheckposition Vector2down groundCheckDistance whatIsGround)
wallDetected Physics2DRaycast(wallCheckposition transformright wallCheckDistance whatIsGround)

CheckTouchDamage()

if(groundDetected || wallDetected)
{
Flip()
}
else
{
movementSet(movementSpeed * facingDirection aliveRbvelocityy)
aliveRbvelocity movement
}
}



开发野猪受攻击(Knockback)状态玩家位置敌野猪位置做较判断野猪受攻击野猪击退方果野猪受攻击敌野猪前血量0调SwitchState函数前状态设置进入击退状态EnterKnockbackStateEnterKnockbackState处理逻辑前逻辑存储起然野猪退速度播放野猪Knockback动画ExitKnockbackState函数处理逻辑野猪Knockback动画停止播放UpdateKnockbackState函数中处理逻辑判断前时间否满足退时间果满足话敌野猪设置行走状态
privatevoid EnterKnockbackState()
{
knockbackStartTime Timetime
movementSet(knockbackSpeedx * damageDirection knockbackSpeedy)
aliveRbvelocity movement
aliveAnimSetBool(Knockback true)
}

制作敌野猪死亡时候状态具体程玩家击杀野猪血迹粒子绽开留会消失粒子添加碰撞体制作血迹粒子效果血迹粒子拖项目文件夹中成预制体野猪进入死亡函数中实例化死亡粒子具体代码
privatevoid EnterDeadState()
{
Instantiate(deathChunkParticle alivetransformposition deathChunkParticletransformrotation)
Instantiate(deathBloodParticle alivetransformposition deathBloodParticletransformrotation)
Destroy(gameObject)
}

39 游戏图(Minimap)

游戏横板游戏游戏程中会分岔路玩家实现某种目寻找某种道具者达Boss方减少玩家寻找时间游戏中通常会图帮助玩家快速达目者完成务
开发思路外创建摄机摄机拍摄整图创建RenderTexture整图拍摄情况报存外层级面板创建RawImageRawImage放整场景中间创建出RenderTexture拖RawImage面板RawImage显示拍摄容

图创建简单版图放原图面作图子物体场景中相应简单版缩略图放场景中应物体成物体子物体
图子物体场景中物体应缩略图添加Minamap层物体全部添加进层
点击摄机选择摄机Camera组件选择Camera组件中CullingmaskMinimap层级掉样摄机会渲染图(Minimap)层级容








实际图样摆放









图青色图片掉图渲染板原颜色


复制摄机调整相关参数删余Audio Source 新CameraCamera组件中渲染层设置Minimap样camera负责渲染出minimap容
创建RawImageRawImage放场景右角创建Rendertexture新摄机拍摄容Rendertexture存储起然Rendertexture赋值RawImage运行游戏游戏缩略图中玩家图中运行情况



310 话系统

游戏横板游戏游戏更具趣味性玩家投入中决定加入话系统话系统交代游戏背景剧情者玩家接收务指引玩家完成物获取相应奖励
游戏话系统实现方法传统UGUI模式开发定逻辑进行句子插入游戏中话系统插件游戏采Fungus插件进行开发
Fungus插件强文字游戏插件支持种方式创建游戏中物话采Unity流行视化流程开发插件开Fungus窗口形式创建创建理全部物话理者理者中分Flowchart工作流程工作流程中创建物完整段话流程中线标志着流程流程间转换关系

311 玩家触碰敌受伤害玩家死亡重生系统

玩家攻击敌时候时候难免会敌攻击需玩家进行受伤害检测玩家生命值耗时候玩家会死亡玩家死亡时候玩家重新进行游戏需玩家重新生成需重新开始游戏时候需玩家死亡重生系统
玩家触碰敌受伤害通敌身伤害盒子进行碰撞检测实现玩家重生系统玩家死亡定时间玩家重新生成指定位置玩家死亡时候摄机会丢失象重新生成玩家时候必须生成玩家时重新指定摄机象
实现步骤:
玩家碰撞伤害检测具体函数Physics2DOverlapArea游戏Collider2DOverlapArea(Vector2 pointA Vector2 pointB intlayerMask)形式重载函数函数具体作检测PointAPointB组成区域碰撞体步骤中通计算出伤害盒左角点值伤害盒右角值传进函数中检测两点组成矩形区域创建出whatIsPlayer玩家层级传进函数第三参数中
实现代码:
privatevoid CheckTouchDamage()
{
if(Timetime > lastTouchDamageTime + touchDamageCooldown)
{
touchDamageBotLeftSet(touchDamageCheckpositionx (touchDamageWidth 2) touchDamageCheckpositiony (touchDamageHeight 2))
touchDamageTopRightSet(touchDamageCheckpositionx + (touchDamageWidth 2) touchDamageCheckpositiony + (touchDamageHeight 2))

Collider2D hit Physics2DOverlapArea(touchDamageBotLeft touchDamageTopRight whatIsPlayer)

if(hit null)
{
lastTouchDamageTime Timetime
attackDetails[0] touchDamage
attackDetails[1] alivetransformpositionx
hitSendMessage(Damage attackDetails)
}
}
}

函数玩家伤害attackDetails[0]保存起接触点attackDetails[1]保存起接触点保存起创建玩家控制类受伤害函数中指定玩家受伤害退方SendMessage方法发送消息碰撞伤害盒通碰撞检测检测物体hit(玩家)hit运行受伤Damage方法
玩家脚里编写玩家受伤害退函数具体实现方法野猪稻草击退函数形式样实现PlayerCombatController中Damage函数逻辑Damage函数形式参数写float[] attackDetails前保存attackDetails[0]attackDetails[1]进行续逻辑处理
实现代码:
privatevoid Damage(float[] attackDetails)
{
if (PCGetDashStatus())
{
int direction

PSDecreaseHealth(attackDetails[0])

if (attackDetails[1] < transformpositionx)
{
direction 1
}
else
{
direction 1
}

PCKnockback(direction)
}
}

3111 重生系统

玩家死亡定时间重新复活玩家象某指定点
理玩家健康类中根玩家剩血量判断玩家否已死亡果死亡执行玩家死亡逻辑然定时间重新生成玩家指定点

定义Transform类型变量respawnPoint表示玩家重生点引定义Gameobject类型变量playerplayer做成预制体然根时间变量玩家进行重新生成象
面进行玩家重生核心代码:

privatevoid CheckRespawn()
{
if(Timetime > respawnTimeStart + respawnTime && respawn)
{
var playerTemp Instantiate(player respawnPoint)
respawn false
}
}


玩家死亡销毁场景摄机目标会丢失定义CinemachineVirtualCamera类型变量CVC引场景中PlayerCameraCinemachineVirtualCamera组件
通时间判断玩家否重生果进行重生玩家预制体生成指定点然CVC象设置生成象面重生代码中加入面代码:
CVCm_Follow playerTemptransform 相机象设置玩家位置


312 辅助工具Gizmos

日常开发中免常进行Debug测试Unity带组件中点击象查改象属性面板象属性面板中SelectIcon钮选择中绘制Unity带debug象
游戏中涉圆形碰撞方形碰撞等图片debugUnity带debug具备功项目中方射线检测碰撞盒子检测等功实际开发员知道射线具体长必须数次进行测试需次点击运行钮开发员够直观观察效果次运行Unity提供方便够进行拓展视化Debug函数入口OnDrawGizmos函数中Unity会根出条件Scene窗口中绘制指定形状供运行时时刻Scene窗口中查情况供时调整参数
游戏中处方OnDrawGizmos
1 玩家射线检测玩家面碰撞检测玩家墙壁碰撞检测
2 玩家敌野猪碰撞检测
玩家射线检测例说明实现步骤:
玩家控制脚中PlayerController中添加OnDrawGizmos函数玩家射线检测玩家身wallCheck空物体发出射线进行检测OnDrawGizmos函数中添加GizmosDrawLine函数函数作指定位置绘制条线段函数两参数分初始量结尾量玩家射线检测中功写GizmosDrawLine()该函数中传入需参数scene窗口绘制出需效果野猪Gizmos代码实现:
privatevoidOnDrawGizmos()
{
GizmosDrawLine(groundCheckposition new Vector2(groundCheckpositionx groundCheckpositiony groundCheckDistance))
GizmosDrawLine(wallCheckposition new Vector2(wallCheckpositionx + wallCheckDistance wallCheckpositiony))

Vector2 botLeft new Vector2(touchDamageCheckpositionx (touchDamageWidth 2) touchDamageCheckpositiony (touchDamageHeight 2))
Vector2 botRight new Vector2(touchDamageCheckpositionx + (touchDamageWidth 2) touchDamageCheckpositiony (touchDamageHeight 2))
Vector2 topRight new Vector2(touchDamageCheckpositionx + (touchDamageWidth 2) touchDamageCheckpositiony + (touchDamageHeight 2))
Vector2 topLeft new Vector2(touchDamageCheckpositionx (touchDamageWidth 2) touchDamageCheckpositiony + (touchDamageHeight 2))

GizmosDrawLine(botLeft botRight)
GizmosDrawLine(botRight topRight)
GizmosDrawLine(topRight topLeft)
GizmosDrawLine(topLeft botLeft)
}

4 开发总结

课题研究课题完成开发程中存着问题游戏题材选择开发方式选择功实现思路全部讲究学问里面
开发程中非常数学知识体会游戏开发数学知识掌握着密分关系玩家移动玩家状态开发中需数学计算部分完全掌握数学知识程度关已程序编程力没太关系程序编程工具关键计算数学力足走少弯路解决问题程中翻阅前学数学知识网查阅资料虚心请教老师学终重新掌握基础数学知识请教学老师问题解决次开发验体会完整游戏构思实现遇种种困难独立开发道路定基础





5 参考文献

[1]设计模式游戏完美开发 [蔡升达][清华学出版社][201701][477页][14179794]
[2]Unity5 实战 C#Unity开发台游戏[清华学出版社]
[3]手机游戏角色设计民族化研究[D][王金婷]长春工业学2016
[4]基Android台智力猜牌游戏设计开发[D][胡劲松]东南学2016
[5]基Android台手机游戏设计开发[D][秦成]云南学2015
[6]基Unity3D游戏动作控制设计[J][ 郭睿静张帅] 兰州文理学院学报(然科学版)2015
[7]吴亚峰索娜 Uinty 5X 3D 游戏开发技术详解典型案例[M] 北京: 民邮电出版社2016
[8]金玺 Uinty3D\2D 手机游戏开发(第二版)[M] 北京:清华学出版社2014
[9]徐婉珍李强魏菊霞 游戏开发实践中培养程序设计力[J] 计算机教育2017(02):104106
[10]晋铮章立 游戏设计中极简义风格研究[J] 包装工程2016(14):161164
[11]Unity官方文档httpsdocsunity3dcomScriptReferenceindexhtml
[12]谢韬基Unity3D粒子系统游戏特效实现[J]现代计算机(专业版)2015(24)3032
[13]邱竟峰王洪源陈慕羿Unity3D引擎实现游戏物基操控[J]中国新技术新产 品2016(19)2425







文档香网(httpswwwxiangdangnet)户传

《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 4 香币 [ 分享文档获得香币 ]

购买文档

相关文档

基于Unity3d游戏引擎的科普类游戏的设计与开发

随着现代城市化的发展,保护城市的要求迫切的需要执行。并且随着人们的生活质量提高,产生的生活垃圾越来越复杂。如何懂得分类生活中的垃圾,如何让垃圾有效的回收使之重新变成资源成为一个严峻的话题。

平***苏 3年前 上传602   0

基于Unity3D的解密RPG游戏的设计与实现

本次课题是研造一款以Unity 3D引擎的解密RPG游戏。游戏剧情是以《浦岛太郎》的童话故事为主题进行改编,原故事结局是浦岛太郎打开玉匣,最终变成了一个老头子,单调而且具有漏洞。而本游戏将会一改原故事的结局,并且添加更多不同的故事结局,使游戏过程更加扑所迷离,而且还会加入隐藏剧情增加游戏的趣味性,使得游戏更具有故事性。

平***苏 3年前 上传1796   0

基于Unity3D的生存解谜游戏的设计与实现(v1.1)

自我国进入二十世纪八十代以来,国民经济如日方升,人民的生活方式也焕然一新,渐渐地人们对娱乐的需求越来越大,娱乐的方式也变得越来越多样化。

平***苏 3年前 上传1224   0

基于Unity3D的塔防游戏的研究与实现

21世纪20年代,游戏已经成为了大众经常选择的娱乐方式。其中,Unity3D作为时下热门的游戏开发引擎,不仅功能完善易上手,还可以免费使用成本低,理所当然的被许多游戏开发者所使用。

平***苏 3年前 上传696   0

基于Unity3D的消防员角色扮演游戏的设计与实现

近几年来,市场上的科普游戏越来越受人们重视,而在现有的市场上,关于消防员的游戏普遍都是以2D或2.5D画面为主,并且皆是玩家简单地操作游戏人物进行灭火,科普效果并不显著。

平***苏 3年前 上传767   0

基于Unity3D的仿真火灾事故的预防和处理的设计与实现

科技的日新月异,计算机成了人类生活中不可或缺的一部分,说到计算机,游戏是不得不说的是其中的一个联想词,游戏本身所拥有的趣味性以及娱乐性,能大大的激发人类的兴趣。

平***苏 3年前 上传694   0

基于Unity引擎的角色扮演类的设计与实现

Unity3d由UnityTechnologies开发研究,从2013年发布至今到发布出2019版本,从国外到国内大火,是一款让玩家轻松创建三位视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合开发工具和游戏引擎。

平***苏 3年前 上传592   0

基于微信小程序的游戏玩家互动社区的设计与实现

 基于微信小程序的游戏玩家互动社区的设计与实现 Design and Implementation of Gamer Interactive Community Based on WeChat Mini Program

平***苏 10个月前 上传358   0

基于倾角控制的LED骰子游戏的设计与实现

近来我国科技领域硕果累累,为了适应科技的快速发展,以便尽快适应企业需求和社会发展,本设计积极开展以实践为导向的电子制作。

平***苏 3年前 上传414   0

基于SpringBoot博客系统的设计与实现

 基于SpringBoot博客系统的设计与实现Design and implementation of blog system based on SpringBoot中文摘要互联网随着社会的进步也渐渐得到普及,给人们带来很多便利,可以提供更多的服务,在互联网还没有发展起来之前,人们需要购买纸质报

平***苏 2年前 上传970   0

基于node的微博的设计与实现

基于node的微博的设计与实现design and implementation of microblog based on node 摘要千禧年后, Twitter开始进入中国,引发了一代新流行。紧接着微博就凭借它的立即互动特性快速成为新兴的大众信息交流平台。随着微博的热潮,人们由以前的传统媒体纯获取信息的身份转换为信息的发布者和获取者,在传统媒体时期

平***苏 10个月前 上传283   0

基于unity3D的华丽弹幕

从街机游戏到计算机游戏,信息技术的影响将与信息技术相伴,未来的发展将受到非凡的影响。加上现代5G的起步,以后更是行业大动荡时期,将萌发新游戏时代。

平***苏 3年前 上传544   0

基于Unity3D的多视角悬浮岛生存冒险类游戏的设计与开发

随着近年来互联网技术的发展与进步,游戏产业也迎来了朝阳时期。经过深入了解和研究生存冒险类游戏在市面上的情况,结合目前游戏市场的热点和玩家兴趣,本课题从多维度、多功能、多创新的方面出发,在开发过程中考虑后期开发需求,结合使用框架以及模块化思维的功能逻辑,解决开发后期可能会带来的开发隐患。

平***苏 3年前 上传610   0

基于MATLAB的ASK调制解调实现课程设计

大学《通信原理》课程设计报告学 院 专 业 班 级 学 号 学生姓名 指导教师 课程成绩 完成日期 2016年X月X

文***品 3年前 上传726   0

基于opencv的车牌识别系统设计与实现

 基于opencv的车牌识别系统设计与实现 Design and implementation of LPR system based on opencv

平***苏 2年前 上传746   0

基于web学生成绩管理系统设计与实现

随着计算机技术在各行各业的广泛应用,将计算机技术应用到学校中去,将大大提高学校管理的效率。学生成绩管理系统将在提高学校管理效率中发挥重要作用。

平***苏 3年前 上传944   0

基于SSH框架的图书管理系统的设计与实现

基于SSH框架的图书管理系统的设计与实现基于SSH框架的图书管理系统摘 要 如今已经我们已经步入了信息时代,而在信息科技快速发展的形势下,网络现已成为我们工作和日常生活中必不可少的一部分。计算机技术的发展不仅提高了我们的工作效率,为日常工作提供了极大的便利,而且还在大大地改善了我们生活质量。通过计算机代替人工来处理数据已经成为趋势。传统的通过人工来管理图书资源和读者借阅信息

平***苏 2年前 上传757   0

基于JavaWeb的图书管理系统的设计与实现

有效的处理想要的相关信息和如何传播有效的信息,一直是人类不断探索的动力。信息管理运用各种载体,传播通过各种介质,一直伴随着人类文明的发展史。随着互联网的到来,信息传播与管理都上升了一个新的台阶,并且方便应用的同时也要考虑信息传播的安全性,所以编程语言创建之初就考虑了这些问题。

爱***享 3年前 上传1131   0

《基于unity的3D校园的设计与实现》

基于unity的3D校园的设计与实现 Design and implementation of 3D campus based on unity 随着互联网高新技术的发展,越来越多便民利民的软件与程序被开发出来,上

平***苏 3年前 上传750   0

基于ARM的智能电子秤系统的设计与实现

随着现代社会的发展,对称重技术提出了更高的要求。目前,台式电子秤在商业贸易中的使用已相当普遍,但是仍存在较大的局限性:体积大、成本高、需要工频交流电源供应、携带不便、应用场所受到制约。现有的便携秤为杆秤或弹簧压缩、拉伸变形来实现计量的弹簧秤,广大居民用户使用的是国家已经明令淘汰的杆秤。

爱***享 3年前 上传1161   0

基于Java的图书馆座位管理系统的设计与实现

目前,如何利用计算机系统来对座位进行管理是解决占座问题的关键。该图书馆座位管理系统是基于Java架构,采用Eclipse开发工具,使用SSM等前端开源框架,以MySQL为后台数据库,Tomcat服务器下设计与实现。主要功能包括:管理员登录、学生登陆、用户更改密码、管理员管理、管理员对学生管理、管理员对图书管理、学生借书、学生座位预约。

王***朝 3年前 上传1846   0

基于SpringBoot的新闻发布与管理系统的设计与实现

 基于SpringBoot的新闻发布与管理系统的设计与实现 Design and implementation of news release and management system based on springboot

平***苏 2年前 上传794   0

基于JAVA WEB的考勤系统设计与实现

基于 JAVA WEB 的考勤系统设计和实现Design and Implementation of Attendance System Based on JAVA WEB摘要科技的发展,带动一系列产业的升级和创新;网络技术的不断更新迭代,冲击着人们的日常生活状态。人们越来越想更方便记录自身企业的考勤情况。但企业部门的多样化,给人们在传统考勤统计中带来了很大

平***苏 10个月前 上传363   0

—基于机器学习的人脸识别算法的设计与实现

人脸识别技术是一种新型的生物特征认证技术。人脸识别技术也是一个非常活跃的研究领域,涵盖了许多领域,例如数字图像处理。随着人们对应用程序需求的增长,面部识别技术趋向于大量使用,使用微芯片和标准化。

平***苏 3年前 上传828   0

基于SSM的图书管理系统设计与实现

随着时代的进步和科技的发展,更多的人通过图书馆借阅书籍来吸收知识,而传统的图书管理方式存在着许多不方便的地方,记录易丢失,所以开发一个易操作,高便捷性并且能够提升工作效率的图书管理系统是很有必要的。

爱***享 3年前 上传1646   0