位置: 编程技术 - 正文

Unity3D游戏开发之跑酷游戏项目详解(Unity3D游戏开发毕业论文)

编辑:rootadmin

推荐整理分享Unity3D游戏开发之跑酷游戏项目详解(Unity3D游戏开发毕业论文),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:Unity3D游戏开发毕业论文,Unity3D游戏开发(第2版),Unity3D游戏开发pdf,unity3D游戏开发,Unity3D游戏开发(第2版)pdf,Unity3D游戏开发(第2版),Unity3D游戏开发毕业论文,Unity3D游戏开发标准教程,内容如对您有帮助,希望把文章链接给更多的朋友!

喜欢我的博客请记住我的名字:秦元培,我的博客地址是 本文出处: 今天的博客的主题就是《Unity3D游戏开发之跑酷游戏项目讲解》。

从我们自身来考虑这件事情,当你选择做自己热爱的事情的时候,你的内心一定是充满激情和勇气的,你愿意看到自己的努力,你愿意看到自己的付出,我们成长是为了促进自我对认知的不断完善,所以我们应该以一种虔诚、谦恭的态度来对待我们的生命,我们或许无法选择出身,但我们可以选择向自己喜欢的生活去努力。或许我和这些人真的不是一个世界的人吧,很多事情在今天都给出了结局,对于这种人我已经没有再尝试与之交流的想法了,或许大学四年平平淡淡,留给我的只有自己才能体会的孤独吧。好了,不说我的事情了,我们正式开始今天的内容吧!

一、游戏策划

游戏采用2D界面,角色从左到右奔跑,在路段中随机生成障碍物和金币,玩家需要使用跳跃功能躲开障碍物,在游戏中玩家收集的金币数目越多,奔跑的距离越长,玩家的得分就越高。我们最终实现的界面效果如图所示,首先我们来讲一下游戏的原理,我们这里这里采用的方法是路段固定,移动摄像机的方法。换句话说,当角色开始移动后,摄像机和场景跟随角色缓缓向右移动。当角色跑完每一个路段距离的2/3时,计算下一路段的位置,并在该位置生成一个新的路段,这样在游戏场景中可以产生无限远的路段,当某一路段离开摄像机视野时,立即将其销毁。于此同时,我们在每一个路段上随机产生障碍物和金币,然后对角色做碰撞检测即可。

二、角色控制

角色控制这里,我们只关注角色的状态,即角色是处于奔跑状态还是死亡状态。通过这一状态,我们针对角色采取不同的处理方式。如果角色处于奔跑状态,则更新角色位置、摄像机位置、背景位置,否则角色将在被障碍物撞到以后倒地死亡。我们来一起看下面的脚本:

[csharp] view plaincopyprint?using UnityEngine; using System.Collections; public class Player : MonoBehaviour { //定义角色移动速度 public float mMoveSpeed=2.5F; //摄像机 private Transform mCamera; //背景图片 private Transform mBackground; //角色是否在奔跑 private bool isRuning=true; //场景中路段总数目 private int mCount=1; //路段预设 public GameObject CubeWay; //死亡动画播放次数 private int DeathCount=0; //收集的金币数目 private int mCoinCount=0; public int CoinCount { get { return mCoinCount; } } //当前奔跑距离 private int mLength=0; public int Length { get { return mLength; } } //当前得分 private int mGrade=0; public int Grade { get { return mGrade; } } void Start () { //获取相机 mCamera=Camera.main.transform; //获取背景 mBackground=GameObject.Find("Background").transform; } void Update () { //如果角色处于奔跑状态则移动角色、相机和场景 if(isRuning) { Move(); CreateCubeWay(); Jump(); UpdateData(); }else { Death(); } } /// <summary> /// 更新玩家的游戏数据 /// </summary> private void UpdateData() { //计算奔跑距离 mLength=(int)((transform.position.x&#;)*); //计算玩家得分 mGrade=(int)(mLength*0.8&#;mCoinCount*0.2); } ///角色死亡 private void Death() { //为避免死亡动画在每一帧都更新,使用DeathCount限制其执行 if(DeathCount<=1) { //播放死亡动画 transform.animation.Play("Lose"); //次数&#;1 DeathCount&#;=1; //保存当前记录 //PlayerPrefs.SetInt("这里填入一个唯一的&#;",Grade); } } private void Jump() { //这里不能使用刚体结构,所以使用手动方法实现跳跃 if(Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButton(0)) { while(transform.position.y<=1) { float y=transform.position.y&#;0.F; transform.position=new Vector3(transform.position.x,y,transform.position.z); transform.animation.Play("Jump"); } StartCoroutine("Wait"); } } IEnumerator Wait() { yield return new WaitForSeconds(0.8F); //角色落地继续奔跑 while(transform.position.y>0.F) { float y=transform.position.y-0.F; transform.position=new Vector3(transform.position.x,y,transform.position.z); transform.animation.Play("Run"); } } //移动角色、相机和场景 private void Move() { //让角色从左到右开始奔跑 transform.Translate(Vector3.forward * mMoveSpeed * Time.deltaTime); //移动摄像机 mCamera.Translate(Vector3.right * mMoveSpeed * Time.deltaTime); //移动背景 mBackground.Translate(Vector3.left * mMoveSpeed * Time.deltaTime); } //创建新的路段 private void CreateCubeWay() { //当角色跑完一个路段的的2/3时,创建新的路段 //用角色跑过的总距离计算前面n-1个路段的距离即为在第n个路段上跑过的距离 if(transform.position.x&#;-(mCount-1)* >=*2/3) { //克隆路段 //这里从第一个路段的位置开始计算新路段的距离 GameObject mObject=(GameObject)Instantiate(CubeWay,new Vector3(-5F&#;mCount * F,0F,-2F),Quaternion.identity); mObject.transform.localScale=new Vector3(F,0.F,1F); //路段数加1 mCount&#;=1; } } void OnTriggerEnter(Collider mCollider) { //如果碰到的是金币,则金币消失,金币数目加1; if(mCollider.gameObject.tag=="Coin") { Destroy(mCollider.gameObject); mCoinCount&#;=1; } //如果碰到的是障碍物,则游戏结束 else if(mCollider.gameObject.tag=="Rock") { isRuning=false; } } } 在这里我们需要关注下面的内容:

1、Update()方法及Move()、Jump()、CreateCubeWay()、Death()方法,因为这是角色在奔跑过程中的核心控制方法。

2、CreateCubeWay()方法的作用是在玩家跑完每一个路段的2/3时,在指定的位置生成新的路段。假设当前场景中共有n个路段,玩家在每一个路段上奔跑的距离=用玩家从起点到当前位置的长度-前面n-1个路段的距离。通过这种方法我们可以判断玩家在每一个路段上的相对位置。在确定了这个位置后,我们将其与路段长度的2/3比较,如果大于或者等于这个距离,则生成新的路段,且第n&#;1个路段的位置等于第一个路段的位置&#;n个路段的总长度。由此,我们就实现了在指定的位置生成新的路段,使场景中源源不断的生成新的路段。

3、玩家收集金币和障碍物的碰撞检测都是在OnTrigger方法中实现的,我们使用了一个bool类型的标识变量isRuning来表示角色的状态,此状态直接影响Update()方法的执行,大家可以从代码中自己去寻找。

Unity3D游戏开发之跑酷游戏项目详解(Unity3D游戏开发毕业论文)

4、这里角色的跳跃是通过脚本模拟出来的,因为这里使用刚体&#;乎不能实现博主想实现的那种效果,大家可以参考Jump()方法。

三、场景布设

这里我们2D平面作为游戏的背景,使用NGUI来显示界面文字内容。在Unity3D场景中使用NGUI需要相机和Anchor设置为同一层级,并设置相机的景深,这样两个相机系统都能工作了。路段CubeWay是一个预设体Cube,负责在CubeWay上生成金币和障碍物,该对象关联在Player脚本上。玩家角色是一个3D的人物模型,最终场景布设效果如图所示:

四、预设定义

在这个游戏中需要重用的对象有路段CubeWay、金币Coin、障碍物Rock,我们分别来看他们的脚本:

[csharp] view plaincopyprint?using UnityEngine; using System.Collections; public class CubeWay : MonoBehaviour { //在道路上显示的金币、障碍物 public GameObject[] mObjects; void Start () { //在每段路段上随机产生到个物品 int mCount=Random.Range(,); for(int i=0;i<mCount;i&#;&#;) { Instantiate(mObjects[0],new Vector3(Random.Range(this.transform.position.x-,this.transform.position.x&#;),1F,-2F), Quaternion.Euler(new Vector3(F,F,0F))); } //在每段路段上随机产生5到个障碍物 mCount=Random.Range(5,); for(int i=0;i<mCount;i&#;&#;) { Instantiate(mObjects[1],new Vector3(Random.Range(this.transform.position.x-,this.transform.position.x&#;),0.5F,-2F), Quaternion.Euler(new Vector3(F,F,0F))); } } //当离开摄像机视野时立即销毁 void OnBecameInvisible() { Destroy(this.gameObject); } } [csharp] view plaincopyprint?using UnityEngine; using System.Collections; public class Coin : MonoBehaviour { //这里是一个控制金币旋转的脚本 void Update () { transform.Rotate(Vector3.forward * F * Time.deltaTime); } //当离开摄像机视野时立即销毁 void OnBecameInvisible() { Destroy(this.gameObject); } } [csharp] view plaincopyprint?using UnityEngine; using System.Collections; public class Rock : MonoBehaviour { //当离开摄像机视野时立即销毁 void OnBecameInvisible() { Destroy(this.gameObject); } } 其中CubeWay就是一个Cube、Coin是一个圆柱体,为了让金币看起来好看点,我们让金币在空中旋转起来、Rock就是一个平面贴图。这里Rock、Coin将绑定到CubeWay的mObjects。

五、游戏管理

最后是界面的数据更新啦,脚本定义如下:

[csharp] view plaincopyprint?using UnityEngine; using System.Collections; public class GameManager : MonoBehaviour { //游戏界面根节点 private Transform GameUI; //玩家 private Transform mPlayer; //界面金币数及距离 private Transform mCoins; private Transform mLength; void Start () { GameUI=GameObject.Find("2DUI").transform; mPlayer=GameObject.Find("People").transform; mCoins=GameUI.FindChild("Anchor/Panel/Coins").transform; mLength=GameUI.FindChild("Anchor/Panel/Length").transform; } void Update () { mCoins.GetComponent<UILabel>().text="金币:" &#; mPlayer.GetComponent<Player>().CoinCount; mLength.GetComponent<UILabel>().text="距离:" &#; mPlayer.GetComponent<Player>().Length; } } 好了,到现在整个游戏已经讲解完了,相信大家已经迫不及待地想看看最终的效果了,好,我们一起来看看吧:

希望今天的内容大家能够喜欢,希望大家继续支持和关注我的博客,如果我们对今天的例子稍作修改,就可以实现3D版的跑酷,经典的《神庙逃亡》游戏就是基于Unity3D游戏引擎开发的。

Unity3D游戏开发之仿仙剑奇侠传角色死亡怎么来实现 喜欢我的博客请记住我的名字:秦元培,我的博客地址是

Unity3d游戏开发之漫游场景的制作 Unity3d中场景漫游的制作。1.首先在3d软件中准备好模型,我找了个maya制作的房子。注意:我这里用的是真实世界的比例,旁边测量工具测量的是cm,

Unity3D游戏开发之基于Trigger的触发式动画设计 喜欢我的博客请记住我的名字:秦元培,我的博客地址是

标签: Unity3D游戏开发毕业论文

本文链接地址:https://www.jiuchutong.com/biancheng/372903.html 转载请保留说明!

上一篇:Unity3D游戏开发之刀光剑影特效如何实现(Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社)

下一篇:Unity3D游戏开发之仿仙剑奇侠传角色死亡怎么来实现(Unity3D游戏开发引擎)

  • 企业所得税广告费30%扣除
  • 完全成本法税前利润计算例题
  • 购买汽车的印花税要计入汽车原值吗
  • 税收实体法和程序法分类
  • 自产和外购的视频区别
  • 应收账款属于利润嘛
  • 帮别人买交强险,受益人是我,有影响吗
  • 职工教育经费税法
  • 水泥企业销售收入比例
  • 房地产开发结转成本条件
  • 应收账款减值后可以转回吗
  • 租赁的设备伤人了谁的责任
  • 每月计提折旧
  • 如果增值税发票丢了好的怎么办有谁交罚熬一
  • 小规模纳税人专票开1%还是3%
  • 小规模季报财务报表只看季度最后一个月的数据可以吗
  • 国税零申报怎么报
  • 土地增值税哪些可以抵扣
  • 小微企业的资产总额看哪里判断的
  • 加盟费收入如何入账
  • 购金蝶软件记什么科目
  • 建筑行业印花税税率
  • 检查所得税发现纳税差异如何调账?
  • 商场现金收入如何计算
  • 食堂货款报账明细表
  • 信息技术服务在开票系统怎么选
  • 应收票据背书转让以取得所需物资
  • 500人的公司财务部几人
  • 经营方式变更说明
  • 收到融资租赁发票怎么做账
  • win8系统如何设置u盘启动
  • 打开软件窗口后如果没有出现属性面板可执行
  • 抵押房屋可以出卖吗
  • 关于幼儿园会没课程的会刊
  • 查看电脑开机时间记录win10
  • 六千元左右
  • 短期投资的入账金额包括已宣告未发放的现金股利
  • 现金返利分录
  • 固定资产修理支出准予扣除吗
  • 出售其他债权投资差额计入
  • meta最新模型
  • 语义分割入门教程
  • PHP中使用什么关键字声明变量的作用域为全局
  • 底薪和提成分开发合法吗
  • 价税合计公式分配
  • 土地给人家种了几十年还能要回来吗
  • 新办商贸企业是国企吗
  • 银行存钱转账
  • 什么企业符合高新技术企业
  • 发行的企业债券属于所有者权益吗
  • 售后回租的实际利率
  • mysql存储语句
  • 对公账户的钱都可以取吗
  • 小规模未开票收入填在哪里
  • 文化事业建设费2023年是否减免了
  • 增值税直接计算法间接计算法举例
  • 没有购销合同的销售额交印花税吗
  • 固定资产报废废料收入要发票吗
  • 保函保证金怎么入账
  • 汇算清缴补交所得税的分录
  • 其它权益工具投资和其他债权投资
  • 公司购买垃圾袋纸巾摘要怎么写好
  • 记账凭证的分类及每类的具体含义是什么
  • record关键字
  • mysql时间语句
  • 2008sql附加数据库
  • windows怎么将任务栏放大
  • win7如何创建文件夹
  • 日历功能在哪里设置
  • apache80端口被占用的解决方法
  • 圣食颐年
  • JavaScript中的case
  • node.js mysql
  • css实现遮罩层
  • 广东省税务局官网 国家税务总局
  • 税务局着装规定文件
  • 化妆品的消费税率为
  • 慧付钱包app官网下载
  • 实木地板什么
  • 纳税明细怎么查询系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设