自制滚动的天空,原来很简单,就差细节来人给做做
滚动的天空,比较好玩的游戏,自己也尝试着做一做,
场景的样子,是这样的,很简单
运行后是这样的,用鼠标在屏幕上下滑动可以实现跳起来和快速落下,左右划就可以左右摆动一格,
给你整个小包包
密码: ubga
代码解释:
ballrun是控制小球的,实现滑动控制小球的动作,代码里控制了小球的跳跃高度,左右最大距离和时间,还有记录分数等,这里用了dotween,让小球看起来平滑,重要信息都有备注了,需要的话可以调试修改,里面也用到了动画,可以改一下动画,方便添加复杂任务等
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System;public class ballrun : MonoBehaviour {//使用dotween方法,实现小球平滑public static float gametime = 0.5f;//左右划使用一秒时间完成public Vector3 jumpheight = new Vector3(0, 6, 0);//向上滑,跳的高度,只修改y值;记得修改系统重力,此处为-13的重力;public Text tes;public Button starga;private int gameposX;//记录小球当前x轴;private bool isgroound = true;private float terr = 0.38f;//在小球下方0.35米处检测;public static Vector3 gospeed = new Vector3(0, 0, 1);//小球的前进速度,public static Transform balltr;private Animator ani;void ground(){balltr = transform;// 以摄像机所在位置为起点,创建一条向下发射的射线 Ray ray = new Ray(transform.position, -transform.up);RaycastHit hit;if (Physics.Raycast(ray, out hit, terr)){// 如果射线与平面碰撞,打印碰撞物体信息 //Debug.Log("碰撞对象: " + hit.collider.name);// 在场景视图中绘制射线 Debug.DrawLine(transform.position, hit.point, Color.red);if (hit.collider.name != null){isgroound = true;ani.SetBool("down", false);}}else{}}//下面为百度资源,为了快速,实现识别手指滑动方向,private float fingerActionSensitivity = Screen.width * 0.05f; //手指动作的敏感度,这里设定为 二十分之一的屏幕宽度.private float fingerBeginX;private float fingerBeginY;private float fingerCurrentX;private float fingerCurrentY;private float fingerSegmentX;private float fingerSegmentY;//private int fingerTouchState;//private int FINGER_STATE_NULL = 0;private int FINGER_STATE_TOUCH = 1;private int FINGER_STATE_ADD = 2;// Use this for initializationvoid Start(){Time.timeScale = 1;gospeed = new Vector3(0, 0, 0.02f);balltr = transform;ani = gameObject.GetComponent<Animator>();fingerActionSensitivity = Screen.width * 0.05f;fingerBeginX = 0;fingerBeginY = 0;fingerCurrentX = 0;fingerCurrentY = 0;fingerSegmentX = 0;fingerSegmentY = 0;fingerTouchState = FINGER_STATE_NULL;tes.text = "";starga.gameObject.SetActive(false);}// Update is called once per frameprivate void OnEnable(){starga.onClick.AddListener(starscene);}private void starscene(){Time.timeScale = 1;SceneManager.LoadScene("lifescene");}void Update(){ground();//当掉下去的时候,重新开始游戏;if (gameObject.transform.position.y <=-0.2f){starga.gameObject.SetActive(true);tes.text = "得分:" + (int)(lifemape.ballz);Time.timeScale = 0;}else{// print(gospeed.z);gameObject.transform.position += gospeed;}if (Input.GetKeyDown(KeyCode.Mouse0)){if (fingerTouchState == FINGER_STATE_NULL){fingerTouchState = FINGER_STATE_TOUCH;fingerBeginX = Input.mousePosition.x;fingerBeginY = Input.mousePosition.y;}}if (fingerTouchState == FINGER_STATE_TOUCH){fingerCurrentX = Input.mousePosition.x;fingerCurrentY = Input.mousePosition.y;fingerSegmentX = fingerCurrentX - fingerBeginX;fingerSegmentY = fingerCurrentY - fingerBeginY;}if (fingerTouchState == FINGER_STATE_TOUCH){float fingerDistance = fingerSegmentX * fingerSegmentX + fingerSegmentY * fingerSegmentY;if (fingerDistance > (fingerActionSensitivity * fingerActionSensitivity)){toAddFingerAction();}}if (Input.GetKeyUp(KeyCode.Mouse0)){fingerTouchState = FINGER_STATE_NULL;}}private void toAddFingerAction(){fingerTouchState = FINGER_STATE_ADD;if (Mathf.Abs(fingerSegmentX) > Mathf.Abs(fingerSegmentY)){fingerSegmentY = 0;}else{fingerSegmentX = 0;}if (fingerSegmentX == 0){if (fingerSegmentY > 0){//Debug.Log("up");//上滑时执行的地方;if (isgroound)//射线检测好是否着地,是否能跳{isgroound = false;gameObject.GetComponent<Rigidbody>().velocity = jumpheight;ani.SetBool("down", true);}}else{//Debug.Log("down");//下滑执行的地方gameObject.GetComponent<Rigidbody>().velocity = -jumpheight;}}else if (fingerSegmentY == 0){if (fingerSegmentX > 0){//Debug.Log("right");//右滑时执行的地方gameposX++;if (gameposX> lifemape.cubecount){gameposX = lifemape.cubecount;}gameObject.transform.DOMoveX(gameposX, gametime);}else{//Debug.Log("left");//左滑时执行的地方gameposX--;if (gameposX < -lifemape.cubecount){gameposX = -lifemape.cubecount;}gameObject.transform.DOMoveX(gameposX, gametime);}}}
}
cameraflow是给相机附上的,为了玩起来后感觉很有3d的感觉,而且也平滑的很多,很多游戏也可以用这个相机的,也可以直接调节里面的参数,拥有不同的效果,
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CameraFlow : MonoBehaviour {//相机平滑跟随代码;代码赋给相机public Transform target;//目标需要赋值目标;public float distanceUp = 1.5f;public float distanceAway = 2.8f;public float hig = 1;//相机看到比目标高点的距离;public float smooth = 10.0f;//位置平滑移动值这里不需要太平滑,所以直接改为10public float camDepthSmooth = -10f;//滑轮控制远近速度;private Vector3 disPos;// Use this for initializationvoid Start(){//target.position += new Vector3(0, 10, 0);}// Update is called once per framevoid Update(){// 鼠标轴控制相机的远近if ((Input.mouseScrollDelta.y != 0)){distanceAway += Input.mouseScrollDelta.y * camDepthSmooth * Time.deltaTime;if (distanceAway > 6.0f){distanceAway = 6.0f;}if (distanceAway < 1.6f){distanceAway = 1.6f;}}if (target){disPos = target.position + Vector3.up * distanceUp - target.forward * distanceAway;transform.position = Vector3.Lerp(transform.position, disPos, Time.deltaTime * smooth);} //相机的角度transform.LookAt( new Vector3(target.position.x, hig, target.position.z + distanceAway * 2));}}
lifemape,本来想用生命游戏里面的原理制作地图,但是现在没心情,因为正在求职中,有点烦,所以就用随机的原理做了一个地图。开始时,克隆好了所有的cube,等待使用,进行调节cube的位置,创建好了你看到的地图,barrier就是添加的障碍物,如需更多按着barrier找到哪里添加障碍物
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class lifemape : MonoBehaviour {public static int cubecount = 2;//代表左边或右边最多为几个;public GameObject cube;//出现cube的预设体;public GameObject barrier;//障碍物模型;public Text grade;private GameObject[] barriers;private GameObject[][] cubes;private float time;private int cubeZ;private Vector3 newbarrier = new Vector3(0,0.3f, 0);// Use this for initializationvoid Start () {cubes = new GameObject[20][];grade.text = "新的游戏";for (int i = 0; i < cubes.Length; i++){cubes[i] = new GameObject[cubecount * 2 + 1];}//场景里最多出现100个障碍物;barriers = new GameObject[100];for (int i = 0; i < barriers.Length; i++){barriers[i] = Instantiate(barrier,gameObject.transform);}for (int i = 0; i < cubes.Length; i++){for (int j = 0; j < cubes[i].Length; j++){cubes[i][j] = Instantiate(cube,gameObject.transform);}}time = ballrun.gametime;}private int iii;private int zzz;public static int ballz;// Update is called once per framevoid Update () {ballz = ((int)(ballrun.balltr.position.z));if (ballz > 0){grade.text ="" + "分数: "+ ballz.ToString();}if (ballz> zzz && ballz != zzz){zzz = ballz;if (iii==cubes.Length -1){iii = 0;}if (iii < cubes.Length){iii++;cubeZ++;for (int j = 0; j < cubes[iii].Length; j++){cubes[iii][j].transform.position = new Vector3(j - cubecount, 0, cubeZ);if (Random.Range(0, 2) == 1){cubes[iii][j].SetActive(true);//此处为显示出方块的地方在显示方块的地方在随机添加一个障碍物,,,,,,,,,,,,,,,,,,,,,,,,,if (Random.Range(0, 2) == 1){barriers[iii * cubecount * 2 + j].transform.position = cubes[iii][j].transform.position + newbarrier;barriers[iii * cubecount * 2 + j].SetActive(true);}}else{cubes[iii][j].SetActive(false);}}}}else{zzz = ballz;}}}
cubeani没有太大作用,只是为了提高游戏的可玩性和难度,在这个游戏里旋转的cube用的这个代码,也可以添加自己的难度,放在地图里,
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class cubeani : MonoBehaviour {// Use this for initializationvoid Start () {gameObject.transform.eulerAngles = new Vector3(0,Random.Range(0,180), 0);}public Vector3 rospeed = new Vector3(0,1, 0);// Update is called once per framevoid Update () {gameObject.transform.eulerAngles += rospeed;}
}
我觉得重要的地方都有注释,代码不算太难,我制作用了一下午时间,如果喜欢多多支持,
再看一下玩起来的样子,
挂了
随机的地图,可能挂不掉,可以增加速度活其他来增加难度,
地图不怎么好看,你可以改改地图,然后直接打包成手机玩玩,
自制滚动的天空,原来很简单,就差细节来人给做做相关推荐
- 使用html创建浮标,自制浮漂其实很简单,不信你来看一看
看到各位钓友和大师位发的制作浮漂的贴子很不错,其中大师级别制作的浮漂更是漂亮,让我也有了自己制作浮漂的想法.说实话佷早以前自己就做过浮浮漂,只是那时没有买到好的放大漂漆,所以做出来的漂看着还可以,就是 ...
- 怎么在手机上照证件照,原来可以很简单
四处去找照相馆拍证件照,太out.拍的证件照太丑不敢出手,不用担心.可以学习ps教程太麻烦,不需担心,现在教你如何在手机上自制出美美的证件照. 先在百度或者应用市场里边找到智能证件照相机,然后进行下载 ...
- 无限天空服务器,滚动的天空无限钻石无限金币版
滚动的天空无限钻石无限金币版是一款非常好玩的街机音乐弹球游戏,在滚动的天空无限钻石无限金币版游戏中玩家需要操控手中的小球跟上音乐,避开障碍,音乐都是非常有节奏的歌,配合游戏玩起来非常的有趣,感兴趣的朋 ...
- Android破解过程-滚动的天空
Android破解-滚动的天空 ##前言 最近看到很多学生在玩滚动的天空这个游戏,这游戏看起来还挺有趣的,于是我也去下载玩了几把.可是,坑呐,这游戏太难了,考验人的快速判断能力和手指滑动速度,玩的很渣 ...
- 小时候,幸福很简单;长大后,简单很幸福!
引导语:小时候总在幻想长大后,这样就可以不去上课,可以到自己想到的地方,可以做自己喜欢做的事情:而长大后却回想小时候,这样就可以无忧无虑,可以没这么多的烦恼,可以很容易满足.原来小时候和长大后有这么多 ...
- 【恒指早盘分析】趋势交易——看懂很简单,做到却很难!
老子说,"盖闻善执生者,陵行不辟兕虎--",意思是说,善于保全生命的人,在山陵里走路不轻易干砍劈犀牛或老虎的事情--一个交易者不要轻易涉险,不要因欲望驱使而重仓或急于进场,也不要因 ...
- 互联网本来很简单,但为啥人们看的那么复杂
昨天有朋友问我互联网,说互联网怎么怎么创新. 我说你看到的都是像.佛说佛有十万身.这都是像,不是相. (1) 500多年前,意大利美第奇家族为了给教皇运送全欧洲信民们的捐赠,所以建立了一张天网一张地网 ...
- p2p搜索器 的实现原理其实很简单
当它点燃时的p2p搜索器最新版 p2p搜索器 的实现原理其实很简单 今天的当它点燃时的p2p搜索器最新版,用她那颗拥有大爱,对自己念,便撕了一张报纸,然后飞到住着彼得潘的永无岛上,让我们自由成长,坐茶 ...
- linux怎么读其实很简单 微星为你详解Z77主板BIOS设置
近期,微星科技发布了大量的7系主板,它们全部配备厂商最新的军规三代组件技术,并且同时配备了PCI-E3.0,USB3.0还有SATA3.0技术,所以我们可以称呼它们为微星3.0主板.随着微星Z77主板 ...
最新文章
- 科学教师与实验教师工作计算机,计算机实验指导教师工作职责
- Mac拷贝/复制文件夹路径快捷键
- pandas统计缺失值的个数
- LeetCode Hot100 ---- 最长相关专题(动态规划)
- jooq 生成数据库_jOOQ类型安全数据库查询教程
- android项目实战博学谷源码_阿里爆款SpringBoot项目实战PDF+源码+视频分享
- 96.不同的二叉搜索树(JavaScript)
- mysql按行取数据_菜鸟求助:怎么在mysql隔12行取一条数据呀??
- JAVA中运行看不见窗口_eclipse中已经把窗口设置为可视,为什么运行 时还是看不到窗口?...
- 业务链路升级中如何做数据洞察?
- c语言中英文字幕怎么相加,excel表格怎么快速分离中英文双语字幕? excel分离中英文字符串的技巧...
- 西安电子科技大学计算机科学与技术拔尖班,西安电子科技大学入选基础学科拔尖学生培养计划2.0基地...
- c盘扩容提示簇被标记_如何解决C盘爆满
- 喜忧参半的电子烟 究竟是不是一个靠谱的创业机会?
- LDUOJ spj 修改
- html网页制作摘要,关于静态HTML网页制作
- 一个小的UGM的Demo
- 软件工程毕业设计课题(42)微信小程序毕业设计JAVA小说电子书小程序系统毕设作品项目
- SolrCloud 的搭建、使用
- 蓝奏云批量下载修复版 v0.3
热门文章
- Tommy Hilfiger 宣布,F1世界冠军Lewis Hamilton担任TOMMY HILFIGER全球男装代言人
- 企业固定资产标签粘贴规范
- 文件服务器搭建手机,自己搭建手机云服务器
- html 必应网搜索,教程:创建自定义搜索网页 - 必应自定义搜索 - Azure Cognitive Services | Microsoft Docs...
- python 生涯之语法基础
- 面试官:首屏加载速度慢怎么解决?
- 悄悄告诉你:11个高质量PNG素材来源,再也不用抠图了~
- 【Windows Esp32】基于 libjpeg-9e 编解码库的视频播放器
- 课下作业(选做)第八周
- 计算机通电后自动断电,电脑开机自动断电,详细教您电脑开机自动断电怎么解决...