Unity3d 跑酷游戏(急速变色龙)
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 跑酷游戏(急速变色龙)相关推荐
- oracle 883355,unity3d跑酷游戏DEMO源码
[实例简介] unity3d跑酷游戏DEMO源码,可以用来入门学习. 有障碍物,可以跳跃. [实例截图] [核心代码] RunningDemo └── RunningDemo ├── Assets │ ...
- Unity3d 跑酷游戏 之Character Controller篇
unity3d Character Controller @by 广州小龙 做3D跑酷游戏,也慢慢的学习了一些东西,从开发过程中积累了一些小的知识点跟大家分享一下! 1. 这个Revert按钮的意 ...
- Unity3D跑酷游戏开发-无尽的道路 (原创教程)
游戏开发环境: win7+unity4.5+vs2013 学习完本系列教程,你将获取如下成果: 还等啥子呦,愉悦的打开unity,新建一个project,纯净状态导入NGUI 3.6.0/自带的Scr ...
- Unity3D跑酷游戏开发
在知识库看到这样一篇博客,虽然效果比较糙,但是能学到不少东西. 比如,相机跟随的效果如何实现,酷跑道路无限循环. 很有意思,推荐给大家,活到老学到老啊- 游戏开发环境: win7+unity4.5+v ...
- Unity3D跑酷游戏开发-无尽的道路
游戏开发环境: win7+unity4.5+vs2013 学习完本系列教程,你将获取如下成果: 还等啥子呦,愉悦的打开unity,新建一个project,纯净状态导入NGUI 3.6.0/自带的Scr ...
- 视频教程-从零开始开发3D跑酷游戏教程-Unity3D
从零开始开发3D跑酷游戏教程 从业8年以上,学过一点知识,写过一点代码,擅长计算机图形学,擅长unity3d,擅长将抽象的东西讲明白,写看得懂的代码,讲听得懂的课程,不闲聊,不扯淡,满满的干货 洪青霞 ...
- Unity3D简陋版跑酷游戏
目录 功能演示 功能简介 制作步骤 功能演示 链接:https://pan.baidu.com/s/1E_2JXWlVJNf3S5l-dH2UuQ提取码:dm5e 视频教学:Unity3D大作业 超级 ...
- 从零开始开发3D跑酷游戏教程-洪青霞-专题视频课程
从零开始开发3D跑酷游戏教程-1425人已学习 课程介绍 从零开发3D跑酷游戏视频培训课程,教大家从零开始开发一个3D跑酷游戏,涵盖了手势识别.动画系统.水平控制.纵向控制.金币获取. ...
- appinventor跑酷游戏_基于APPInventor的一款益智游戏的设计与实现
基于 APPInventor 的一款益智游戏的设计与实现 佚名 [期刊名称] <电脑知识与技术> [年 ( 卷 ), 期] 2018(014)035 [摘要] 随着移动互联网的不断发展 , ...
最新文章
- 必须了解的MySQL三大日志:binlog、redo log和undo log
- MySQL/MariaDB基础及简单SQL语句
- php怎么创建事务,php事务的实现方法介绍(代码示例)
- 学生系统优化(三)- -细节优化
- idea The origin server did not find a current representation for the target resource or is not willi
- Django从理论到实战(part54)--MEDIA_ROOT和MEDIA_URL
- .NET环境下每日集成(4):CruiseControl.Net配置注意事项
- 运行时的Java 8参数名称
- 调试js 试用火狐的firebug
- 数值分析方阵的QR分解
- iOS视频边下载边播放
- java制作扫雷游戏中埋雷的难点_java 扫雷游戏源码案例项目
- 开源的在线视频点播系统,值得分享!
- PyCharm搜索技巧快捷键
- 2019学位计算机模拟试题,2019年下半年成人学位英语模拟试题1
- (笔记)Bison 的使用说明
- 关于operator bool () 和bool operator ==()
- github上传文件时,目录、文件的创建、复制、删除和移动等操作
- ant design vue的ApiSelect选择器使用注意点
- Graphcore发布IPU-M2000性能测试,训练和推理性能超英伟达!