好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

unity3d游戏开发之跑酷游戏项目讲解.doc

11页
  • 卖家[上传人]:xiao****1972
  • 文档编号:84828089
  • 上传时间:2019-03-05
  • 文档格式:DOC
  • 文档大小:1.75MB
  • / 11 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 骑士团Unity3D系列教程培训 群号:193521697 今天主题就是《Unity3D游戏开发之跑酷游戏项目讲解》 一、游戏策划     游戏采用2D界面,角色从左到右奔跑,在路段中随机生成障碍物和金币,玩家需要使用跳跃功能躲开障碍物,在游戏中玩家收集的金币数目越多,奔跑的距离越长,玩家的得分就越高我们最终实现的界面效果如图所示,首先我们来讲一下游戏的原理,我们这里这里采用的方法是路段固定,移动摄像机的方法换句话说,当角色开始移动后,摄像机和场景跟随角色缓缓向右移动当角色跑完每一个路段距离的2/3时,计算下一路段的位置,并在该位置生成一个新的路段,这样在游戏场景中可以产生无限远的路段,当某一路段离开摄像机视野时,立即将其销毁于此同时,我们在每一个路段上随机产生障碍物和金币,然后对角色做碰撞检测即可         二、角色控制     角色控制这里,我们只关注角色的状态,即角色是处于奔跑状态还是死亡状态通过这一状态,我们针对角色采取不同的处理方式如果角色处于奔跑状态,则更新角色位置、摄像机位置、背景位置,否则角色将在被障碍物撞到以后倒地死亡我们来一起看下面的脚本:[csharp] view plaincopyprint?1. using UnityEngine;  2. using System.Collections;  3.   4. public class Player : MonoBehaviour {  5.   6.     //定义角色移动速度  7.     public float mMoveSpeed=2.5F;  8.   9.     //摄像机  10.     private Transform mCamera;  11.     //背景图片  12.     private Transform mBackground;  13.   14.     //角色是否在奔跑  15.     private bool isRuning=true;  16.     //场景中路段总数目  17.     private int mCount=1;  18.   19.     //路段预设  20.     public GameObject CubeWay;  21.   22.     //死亡动画播放次数  23.     private int DeathCount=0;  24.   25.     //收集的金币数目  26.     private int mCoinCount=0;  27.     public int CoinCount {  28.         get {  29.             return mCoinCount;  30.         }  31.     }  32.   33.     //当前奔跑距离  34.     private int mLength=0;  35.     public int Length {  36.         get {  37.             return mLength;  38.         }  39.     }  40.   41.     //当前得分  42.     private int mGrade=0;  43.     public int Grade {  44.         get {  45.             return mGrade;  46.         }  47.     }  48.   49.     void Start ()   50.     {  51.         //获取相机  52.         mCamera=Camera.main.transform;  53.         //获取背景  54.         mBackground=GameObject.Find("Background").transform;  55.     }  56.   57.     void Update ()   58.     {  59.         //如果角色处于奔跑状态则移动角色、相机和场景  60.         if(isRuning)  61.         {  62.             Move();  63.             CreateCubeWay();  64.             Jump();  65.             UpdateData();  66.         }else  67.         {  68.             Death();  69.         }  70.     }  71.   72.     /// 

        73.     /// 更新玩家的游戏数据  74.     ///   75.     private void UpdateData()  76.     {  77.         //计算奔跑距离  78.         mLength=(int)((transform.position.x+25)*25);  79.         //计算玩家得分  80.         mGrade=(int)(mLength*0.8+mCoinCount*0.2);  81.     }  82.   83.   84.     ///角色死亡  85.     private void Death()  86.     {  87.         //为避免死亡动画在每一帧都更新,使用DeathCount限制其执行  88.         if(DeathCount<=1)  89.         {  90.            //播放死亡动画  91.            transform.animation.Play("Lose");  92.            //次数+1  93.            DeathCount+=1;  94.            //保存当前记录  95.            //PlayerPrefs.SetInt("这里填入一个唯一的值",Grade);  96.         }  97.     }  98.   99.     private void Jump()  100.     {  101.         //这里不能使用刚体结构,所以使用手动方法实现跳跃  102.         if(Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButton(0))  103.         {  104.             while(transform.position.y<=1)  105.             {  106.                 float y=transform.position.y+0.02F;  107.                 transform.position=new Vector3(transform.position.x,y,transform.position.z);  108.                 transform.animation.Play("Jump");  109.             }  110.             StartCoroutine("Wait");  111.         }  112.     }  113.   114.     IEnumerator Wait()  115.     {  116.         yield return new WaitForSeconds(0.8F);  117.         //角色落地继续奔跑  118.         while(transform.position.y>0.125F)  119.         {  120.             float y=transform.position.y-0.02F;  121.             transform.position=new Vector3(transform.position.x,y,transform.position.z);  122.             transform.animation.Play("Run");  123.         }  124.     }  125.   126.     //移动角色、相机和场景  127.     private void Move()  128.     {  129.         //让角色从左到右开始奔跑  130.         transform.Translate(Vector3.forward * mMoveSpeed * Time.deltaTime);  131.         //移动摄像机  132.         mCamera.Translate(Vector3.right * mMoveSpeed * Time.deltaTime);  133.         //移动背景  134.         mBackground.Translate(Vector3.left * mMoveSpeed * Time.deltaTime);  135.     }  136.   137.     //创建新的路段  138.     private void CreateCubeWay()  139.     {  140.         //当角色跑完一个路段的的2/3时,创建新的路段  141.         //用角色跑过的总距离计算前面n-1个路段的距离即为在第n个路段上跑过的距离  142.         if(transform.position.x+30-(mCount-1)*50 >=50*2/3)  143.         {  144.             //克隆路段  145.             //这里从第一个路段的位置开始计算新路段的距离  146.             GameObject mObject=(GameObject)Instantiate(CubeWay,new Vector3(-5F+mCount * 50F,0F,-2F),Quaternion.identity);  147.             mObject.transform.localScale=new Vector3(50F,0.25F,1F);  148.             //路段数加1  149. 。

      点击阅读更多内容
      相关文档
      云南省红河州河口县语文二年级下学期期末试题+2020-2021学年.pdf 八年级生物开学摸底考(人教版)(答题卡).pdf 云南省文山州砚山县数学四年级下学期期末试题 2020-2021学年 (2).pdf 八年级生物开学摸底考(辽宁专用)(答题卡).pdf 八年级生物开学摸底考(海南专用)(答题卡).pdf 云南省昆明市五华区数学四年级第二学期期末考试 2020-2021学年.pdf 八年级生物开学摸底考(南京专用)(答题卡).pdf 八年级生物开学摸底考(湖南专用)(答题卡).pdf 云南省德宏州语文五年级下学期期末试题 2020-2021学年答案zq.pdf 八年级生物开学摸底考(武汉专用)(答题卡).pdf 2022年盐城市中考化学试卷答案.pdf 云南省德宏州语文四年级下学期期末试题 2020-2021学年.pdf 云南省德宏州数学四年级下学期期末试题 2020-2021学年.pdf 云南省德宏州数学五年级下学期期末试题 2020-2021学年数学答案zq.pdf 八年级生物开学摸底考(福建专用)(答题卡).pdf 八年级生物开学摸底考(全国通用)(答题卡).pdf 八年级生物开学摸底考(广西专用)(答题卡).pdf 八年级生物开学摸底考(广州专用)(答题卡).pdf 云南省昆明市盘龙区数学四年级第二学期期末考试 2020-2021学年.pdf 云南省昆明市盘龙区语文二年级第二学期期末考试 2020-2021学年(人教部编版无答案PDF).pdf
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.