U3D跑酷游戏

  • 赛道(障碍物)生成
  • 主角奔跑逻辑

赛道(障碍物)生成

我们在做跑酷游戏的时候要明白这几点:
赛道的生成以及消失
障碍物的生成以及消失

我们先来讲赛道的生成,什么时候生成?又什么时候消失?

解决方法是我们要用到触发器,当角色到达触发点的时候,在角色的前方自动生成赛道,这里我们要用到对象池,当我们赛道到角色的距离大于多少的时候我们就回收赛道,优化性能。

1、触发点就是我们在赛道(Trackshort)上新加一个(Trackpoint)盒型碰撞器并且勾选触发器,并且新建一个标签给它,是为了和赛道上的盒型碰撞器区分开,赛道上的盒型碰撞器不勾选触发器。

2、下面创建一个Trackcreator类来生成赛道,把脚本挂在gamemanger上

首先我们要定义几个

// An highlighted blockpublic List<GameObject> lists = new List<GameObject>();//对象池,对象池就是一个集合public GameObject[] tracks;//放有赛道的数组private static Trackcreator instance;//单例类public static Trackcreator Instance { get { return instance; } }//单例类就是全局类

在Start里面完成单例类

// An highlighted blockvoid Start(){if (instance != null){Destroy(this.gameObject);return;}else{instance = this;}}

我们新写一个赛道的函数Creator()

// An highlighted blockpublic GameObject Creator()//函数是有返回值的,这里返回的是对象{if (lists.Count > 0)//判断对象池里面有没有对象{var lastindex = lists.Count - 1;//找到集合里面的最后一个的下标var lastone = lists[lastindex];//取出集合里最后一个对象lists.Remove(lastone);//移除该对象lastone.SetActive(true);//对象激活return lastone;//返回对象}else{var newindex = Random.Range(0, tracks.Length);//随机生成数组的大小范围内的任意一个数var newone = Instantiate(tracks[newindex]);//实例化该对象return newone;//返回对象}}

我们还要写一个回收赛道的方法Returntrack()

// An highlighted blockpublic void Returntrack(GameObject obj){if (obj == null) return;obj.SetActive(false);lists.Add(obj);}

我们还要写一个生成赛道的方法Gettrack()

// An highlighted blockpublic void Gettrack(){GameObject track = Creator();track.GetComponent<Returntrack>().pool = this;//这里回收的时候要用到track.transform.position = move.Instance.player.transform.position + new Vector3(0, 0, 20);}

完整Trackcreator类代码

// An highlighted block
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Trackcreator : MonoBehaviour
{public List<GameObject> lists = new List<GameObject>();public GameObject[] tracks;private static Trackcreator instance;public static Trackcreator Instance { get { return instance; } }void Start(){if (instance != null){Destroy(this.gameObject);return;}else{instance = this;}}public GameObject Creator(){if (lists.Count > 0){var lastindex = lists.Count - 1;var lastone = lists[lastindex];lists.Remove(lastone);lastone.SetActive(true);return lastone;}else{var newindex = Random.Range(0, tracks.Length);var newone = Instantiate(tracks[newindex]);return newone;}} public void Returntrack(GameObject obj){if (obj == null) return;obj.SetActive(false);lists.Add(obj);}public void Gettrack(){GameObject track = Creator();track.GetComponent<Returntrack>().pool = this;track.transform.position = move.Instance.player.transform.position + new Vector3(0, 0, 20);}// Update is called once per framevoid Update(){}
}

下面我们还要写个角色的移动代码,我们创建一个move类,简单写个

// An highlighted block
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class move : MonoBehaviour
{public  Transform player;//获取角色的位置private static move instance;//单例类public static move Instance { get { return instance; } }// Start is called before the first frame updatevoid Start(){player = this.transform;if (instance != null){Destroy(this.gameObject);return;}else{instance = this;}}// Update is called once per framevoid Update(){if (Input.GetKey(KeyCode.W)){player.transform.Translate(Vector3.forward * Time.deltaTime*0.8f);}}public void OnTriggerEnter(Collider collider){if (collider.tag.Equals("Trackpoint"))//通过标签来触发触发器{Trackcreator.Instance.Gettrack();//调用赛道生成方法}}public void OnTriggerStay(Collider collider){}public void OnTriggerExit(Collider collider){}
}

看下效果

赛道是生成成功的,照这个思路生成我们的障碍物是没有问题的。我们在对生成赛道距离的把控,我们可以通过随机函数Random来把控。

赛道的消失
我们通过距离来判断,首先我们还是新建一个Returntrack类,把脚本挂在预制件赛道上面。

// An highlighted block
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Returntrack : MonoBehaviour
{public Trackcreator pool;//获取Trackcreator脚本// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){var playerpos = move.Instance.player.transform.position;//角色的位置var newpos = this.transform.position;var distance = (playerpos - newpos).magnitude;//求两向量的距离if (distance > 10){pool.Returntrack(this.gameObject);}}
}

看效果

生成又回收了,说明成功了,大家可以根据这种思路去生成障碍物和回收障碍物。

主角奔跑逻辑

这可以根据我前几篇讲的游戏角色的移动控制来做,完全没问题。
后面我还会讲变颜色和动画。
我有一个半成品的变色猫,感兴趣的可以去看下,因为是连接服务器的,还没做出完,你们可以直接打开里面的主要场景运行看下效果。
链接:https://pan.baidu.com/s/19NQTqpBuOVxzfm2HJdsJDw
提取码:spvq

Unity3d 跑酷游戏(急速变色龙)相关推荐

  1. oracle 883355,unity3d跑酷游戏DEMO源码

    [实例简介] unity3d跑酷游戏DEMO源码,可以用来入门学习. 有障碍物,可以跳跃. [实例截图] [核心代码] RunningDemo └── RunningDemo ├── Assets │ ...

  2. Unity3d 跑酷游戏 之Character Controller篇

    unity3d  Character Controller @by  广州小龙 做3D跑酷游戏,也慢慢的学习了一些东西,从开发过程中积累了一些小的知识点跟大家分享一下! 1. 这个Revert按钮的意 ...

  3. Unity3D跑酷游戏开发-无尽的道路 (原创教程)

    游戏开发环境: win7+unity4.5+vs2013 学习完本系列教程,你将获取如下成果: 还等啥子呦,愉悦的打开unity,新建一个project,纯净状态导入NGUI 3.6.0/自带的Scr ...

  4. Unity3D跑酷游戏开发

    在知识库看到这样一篇博客,虽然效果比较糙,但是能学到不少东西. 比如,相机跟随的效果如何实现,酷跑道路无限循环. 很有意思,推荐给大家,活到老学到老啊- 游戏开发环境: win7+unity4.5+v ...

  5. Unity3D跑酷游戏开发-无尽的道路

    游戏开发环境: win7+unity4.5+vs2013 学习完本系列教程,你将获取如下成果: 还等啥子呦,愉悦的打开unity,新建一个project,纯净状态导入NGUI 3.6.0/自带的Scr ...

  6. 视频教程-从零开始开发3D跑酷游戏教程-Unity3D

    从零开始开发3D跑酷游戏教程 从业8年以上,学过一点知识,写过一点代码,擅长计算机图形学,擅长unity3d,擅长将抽象的东西讲明白,写看得懂的代码,讲听得懂的课程,不闲聊,不扯淡,满满的干货 洪青霞 ...

  7. Unity3D简陋版跑酷游戏

    目录 功能演示 功能简介 制作步骤 功能演示 链接:https://pan.baidu.com/s/1E_2JXWlVJNf3S5l-dH2UuQ提取码:dm5e 视频教学:Unity3D大作业 超级 ...

  8. 从零开始开发3D跑酷游戏教程-洪青霞-专题视频课程

    从零开始开发3D跑酷游戏教程-1425人已学习 课程介绍         从零开发3D跑酷游戏视频培训课程,教大家从零开始开发一个3D跑酷游戏,涵盖了手势识别.动画系统.水平控制.纵向控制.金币获取. ...

  9. appinventor跑酷游戏_基于APPInventor的一款益智游戏的设计与实现

    基于 APPInventor 的一款益智游戏的设计与实现 佚名 [期刊名称] <电脑知识与技术> [年 ( 卷 ), 期] 2018(014)035 [摘要] 随着移动互联网的不断发展 , ...

最新文章

  1. 必须了解的MySQL三大日志:binlog、redo log和undo log
  2. MySQL/MariaDB基础及简单SQL语句
  3. php怎么创建事务,php事务的实现方法介绍(代码示例)
  4. 学生系统优化(三)- -细节优化
  5. idea The origin server did not find a current representation for the target resource or is not willi
  6. Django从理论到实战(part54)--MEDIA_ROOT和MEDIA_URL
  7. .NET环境下每日集成(4):CruiseControl.Net配置注意事项
  8. 运行时的Java 8参数名称
  9. 调试js 试用火狐的firebug
  10. 数值分析方阵的QR分解
  11. iOS视频边下载边播放
  12. java制作扫雷游戏中埋雷的难点_java 扫雷游戏源码案例项目
  13. 开源的在线视频点播系统,值得分享!
  14. PyCharm搜索技巧快捷键
  15. 2019学位计算机模拟试题,2019年下半年成人学位英语模拟试题1
  16. (笔记)Bison 的使用说明
  17. 关于operator bool () 和bool operator ==()
  18. github上传文件时,目录、文件的创建、复制、删除和移动等操作
  19. ant design vue的ApiSelect选择器使用注意点
  20. Graphcore发布IPU-M2000性能测试,训练和推理性能超英伟达!

热门文章

  1. 66.物体检测算法:区域卷积神经网络(R-CNN)系列
  2. 全球及中国激光防护镜行业投资机会分析研究及企业经营战略建议报告2022-2027年版
  3. 网站不写SEO文案? SEO就算了吧!
  4. 手机访客更方便刷脸开闸更快捷
  5. Linux页表 - - 启动过程临时页表创建过程
  6. Aspose.Pdf合并PDF文件
  7. CH10-图形图像处理
  8. html div 横向变纵向,css怎么把纵向排列变成横向
  9. 五,华为路由器单臂路由配置子接口dot1.q
  10. 个人项目——论文查重