unity跑酷怎么添加金币_【Unity3D实战】零基础一步一步教你制作跑酷类游戏(填坑完整版)...
在两个月前曾写了一篇《【Unity3D实战】零基础一步一步教你制作跑酷类游戏(1)》,里面一步一步演示了制作跑酷类游戏,然而由于时间原因,只写到了让角色往前移动为止。这个坑一直没有时间去填,(虽然也没多少人看啦),今天刚好有时间完成了一个跑酷类游戏的Demo。放上来给有兴趣的朋友看看。
Demo源码及对应素材下载:链接:http://pan.baidu.com/s/1i4QkkuD 密码:p04w
游戏简要说明
游戏类型:跑酷类游戏(Demo,非完整游戏)
操作方式:左右方向键(可自己移植到手机端)
游戏要素:
1.游戏角色会自动向前跑,玩家可通过左右方向键让其左右移动
2.游戏中存在障碍物,玩家需避开这些障碍物,否则会因为被障碍物阻挡的原因无法前进
3.当游戏角色因为被阻挡而消失在视野中时,视为失败
4.当游戏角色因为被阻挡而处于偏后方时,会提高移动速度直到回到原本所处的屏幕位置
游戏场景搭建
使用准备好的素材(路面、人物、障碍物),将这些素材制作成Prefab,然后根据自己喜好搭建好场景。如下图:
游戏脚本编写
游戏角色控制器moveController:
新建一个C#文件,命名为moveController,然后将其打开。
由于角色需要向前、左、右三个方向移动,所以我们需要有其在前进方向上的速度与左右方向上的速度,分别命名为:moveVSpeed、moveHSpeed,
同时由于玩家在落后的情况下需要加速,所以我们声明两个变量:前进方向上的最小移动速度minVSpeed与前进方向上的最大移动速度maxVSpeed。
于是我们可以得到以下脚本:
// 前进移动速度
float moveVSpeed;
// 水平移动速度
public float moveHSpeed = 5.0f;
// 最大速度
public float maxVSpeed = 10.0f;
// 最小速度
public float minVSpeed = 5.0f;其中moveHSpeed、maxVSpeed、minVSpeed声明为public,方便在面板上修改。
接下来,在Start()函数中定义moveVSpeed的初始值:
moveVSpeed = minVSpeed;
在Update()中使人物能移动起来:
float h = Input.GetAxis("Horizontal");
Vector3 vSpeed = new Vector3(this.transform.forward.x, this.transform.forward.y, this.transform.forward.z) * moveVSpeed ;
Vector3 hSpeed = new Vector3(this.transform.right.x, this.transform.right.y, this.transform.right.z) * moveHSpeed * h;
Vector3 jumpSpeed = new Vector3(this.transform.up.x, this.transform.up.y, this.transform.up.z) * jumpHeight * m_jumpState;
this.transform.position += (vSpeed + hSpeed + jumpSpeed) * Time.deltaTime;保存一下cs文件,切换到Unity,将该脚本挂载在角色对象的身上,保留默认值或手动设置:
运行游戏,看看是否能成功跑起来,并且能通过左右键控制人物左右移动。
看着人物越跑越远越跑越远,最后消失在远方......诶!教练,这和说好的不一样啊!人物咋不见了?
咳咳,这是因为我们没有让摄像机跟随它的原因,接下来,我们让摄像机与人物一起移动~
打开刚才的C#文件,声明一个public的变量
// 摄像机位置
public Transform cameraTransform;
在Update()函数中,添加以下代码:
// 设置摄像机移动速度
Vector3 vCameraSpeed = new Vector3(this.transform.forward.x, this.transform.forward.y, this.transform.forward.z) * minVSpeed;
// 让摄像机跑起来
cameraTransform.position += (vCameraSpeed) * Time.deltaTime;
注意到没,这里我们所定义的摄像机的移动速度与人物移动速度有点差别:
1.摄像机没有左右移动
2.摄像机的速度恒定为minVSpeed,也就是我们所定义的人物的最小移动速度(当然这个时候人物也一直是以这个速度在移动)
转到Unity,查看人物身上的Move Controller组件,现在这里应该多了一个变量等你设置:
我们将摄像机拖动到camera Transform处,再运行游戏。这时候你应该能看到人物在不断往前走,但在屏幕上的位置是没有变化的,因为摄像机一起移动了。
人物走着走着 哎呀 前面怎么没路了?别急,让我们来让路无限延长起来~
首先我们将道路的GameObject复制几个,我这里是总共有3个道路的GameObject,分别命名为Road1,Road2,Road3
然后在每一个Road下,添加一个Cube,将Cube的Mesh Renderer关闭,并将其Box Collider的Is Trigger勾上。命名为ArrivePos。(我才不会告诉你们这一步应该在上一行之前做呢!)
将多条道路拼好,连成一条笔直的公路。
然后新建一个空物体,命名为GameManager,为其新建C#Script GameManager.cs,然后打开该脚本。
声明一下多个变量:(注意引用命名空间using System.Collections.Generic;
// 生成障碍物点列表
public List bornPosList = new List();
// 道路列表
public List roadList = new List();
// 抵达点列表
public List arrivePosList = new List();
// 障碍物列表
public List objPrefabList = new List();
// 目前的障碍物
Dictionary> objDict = new Dictionary>();
// 道路间隔距离
public int roadDistance;并定义函数:// 切出新的道路
public void changeRoad(Transform arrivePos)
{
int index = arrivePosList.IndexOf(arrivePos);
if(index >= 0)
{
int lastIndex = index - 1;
if (lastIndex < 0)
lastIndex = roadList.Count - 1;
// 移动道路
roadList[index].position = roadList[lastIndex].position + new Vector3(roadDistance, 0, 0);
initRoad(index);
}
else
{
Debug.LogError("arrivePos index is error");
return;
}
}
void initRoad(int index)
{
string roadName = roadList[index].name;
// 清空已有障碍物
foreach(GameObject obj in objDict[roadName])
{
Destroy(obj);
}
objDict[roadName].Clear();
// 添加障碍物
foreach(Transform pos in bornPosList[index])
{
GameObject prefab = objPrefabList[Random.Range(0, objPrefabList.Count)];
Vector3 eulerAngle = new Vector3(0, Random.Range(0, 360), 0);
GameObject obj = Instantiate(prefab, pos.position, Quaternion.EulerAngles(eulerAngle)) as GameObject;
obj.tag = "Obstacle";
objDict[roadName].Add(obj);
}
}
在Start()中:
void Start () {
foreach(Transform road in roadList)
{
List objList = new List();
objDict.Add(road.name, objList);
}
initRoad(0);
initRoad(1);
}然后打开之前的moveController.cs,声明变量:
// 游戏管理器
public GameManager gameManager;
定义函数:
void OnTriggerEnter(Collider other)
{
// 如果是抵达点
if (other.name.Equals("ArrivePos"))
{
gameManager.changeRoad(other.transform);
}
// 如果是透明墙
else if (other.tag.Equals("AlphaWall"))
{
// 没啥事情
}
// 如果是障碍物
else if(other.tag.Equals("Obstacle"))
{
}
} 呼,一大串代码,大家敲的累不累,什么!你是copy过去的?太过分了!我要拿刀子了!
嗯,切换回Unity中,点击GameManager这个物体,设置其GameManager组件的值:
这里的BornPos指的是障碍物出生点,以下图所示为每一条道路定义一个或多个出生点,每条路的出生点用一个BornPos的空物体进行管理:
然后将出生点按其所处道路的序号一一拖入(先设置size的值,3条就设置为3)
RoadList也是一样,将道路按序号一一拖入。
这里的ArrivePosList要注意一下,并不是直接按道路序号拖入,而是往后一位,即:
road2
road3
........
roadn
road1这样的顺序将其对应的ArrivePos拖入列表
然后将需要生成的障碍物的Prefab文件拖入ObjPrefabList
设置道路的间隔距离(即一条道路的中心点到接下来一条道路中心点的距离 distance = road1.length / 2 + road2.length / 2 大概这么计算)
到这一步为止,GameManager的设置基本完成。点击人物的GameObject,设置moveController,将GameManager的游戏对象拖入到指定位置:
对了,还有一步非常重要的设置:
为人物添加Collider与RightBody,为所有障碍物和路面添加Collider(注意不要勾上Is Trigger)
然后运行游戏。
呼,这时候没有问题的话应该是能看到有障碍物出现了,人物走到障碍物处会被挡住,并且道路会自动拼接移动,无止境的走下去、走下去、走下去。。。
这个Demo也基本进入尾声了,接下来,做最后的游戏失败判断和让角色赶回正常位置。
打开GameManager.cs,声明变量:
public bool isEnd = false;
打开moveController.cs 声明变量:
// 摄像机距离人物的距离
public float cameraDistance;
在Update()函数中 添加以下代码:
// 当人物与摄像机距离小于cameraDistance时 让其加速
if(this.transform.position.x - cameraTransform.position.x < cameraDistance)
{
moveVSpeed += 0.1f;
if (moveVSpeed > maxVSpeed)
{
moveVSpeed = maxVSpeed;
}
}
// 超过时 让摄像机赶上
else if(this.transform.position.x - cameraTransform.position.x > cameraDistance)
{
moveVSpeed = minVSpeed;
cameraTransform.position = new Vector3(this.transform.position.x - cameraDistance, cameraTransform.position.y, cameraTransform.position.z);
}
// 摄像机超过人物
if(cameraTransform.position.x - this.transform.position.x > 0.0001f)
{
Debug.Log("你输啦!!!!!!!!!!");
gameManager.isEnd = true;
}
定义OnGUI()函数:
void OnGUI()
{
if (gameManager.isEnd)
{
GUIStyle style = new GUIStyle();
style.alignment = TextAnchor.MiddleCenter;
style.fontSize = 40;
style.normal.textColor = Color.red;
GUI.Label(new Rect(Screen.width / 2 - 100, Screen.height / 2 - 50, 200, 100), "你输了~", style);
}
}
到这一步,Demo编写完成。(由于现在是凌晨4点 实在太疲惫,所以本篇基本都是直接贴代码,如果有朋友有什么问题的话 可以直接留言哈~)
原文:http://blog.csdn.net/sun15980/article/details/51093048
unity跑酷怎么添加金币_【Unity3D实战】零基础一步一步教你制作跑酷类游戏(填坑完整版)...相关推荐
- unity跑酷怎么添加金币_叫好不叫买?《跑酷老奶奶》游戏评测
游戏简述: 游戏背景讲述的是一位名叫史密斯的老奶奶,她非常喜欢苹果,但是有一个配备滚轮装备的小偷正从她的果园里偷苹果!为了抓住小偷,她从果园追逐到城市,飞跃谷仓和办公室,务必在小偷得手之前,先获得苹果 ...
- unity跑酷怎么添加金币_超级酱跑酷:SUPER UNITYCHAN RUN修改金币方法
在玩<超级酱跑酷:SUPER UNITYCHAN RUN>的时候,想必很多玩家因金币不够而导致自己做不了很多事情,在这里小编给各位玩家介绍几款好用的修改器,如:八门神器.葫芦侠.烧饼修改器 ...
- 【Unity3D实战】零基础一步一步教你制作跑酷类游戏
原转载自 https://blog.csdn.net/sun15980/article/details/51093048 ,已失效 新 [Unity3D开发小游戏]Unity3D零基础一步一步教你制作 ...
- unity给头发添加物理_不需要写代码,直接在unity实现手机可以跑的毛发效果
马上注册,加入CGJOY,让你轻松玩转CGJOY. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 大家好, 我是炭窑居士, 好久不见 这次由我和好友fxyyoung一起给大家带来原创的毛发 ...
- 小强软件测试_小强老师零基础学习软件测试视频教程 理论篇+自动化篇+工具篇+实战等零基础课程...
小强老师零基础学习软件测试视频教程 理论篇+自动化篇+工具篇+实战等零基础课程 1.jpg (53.32 KB, 下载次数: 0) 2017-10-5 09:33 上传 2.jpg (49.08 KB ...
- 如何解析lvx文档_建站零基础入门:手把手教你如何自助建站
使用阿里云云服务器ECS搭建网站有多种方式,本文主要介绍自助建站的流程. 建站方式 使用ECS建站的方式如下表所示.请根据实际业务需求,选择适合您的建站方式. 自助建站步骤 1.选择服务器. 不同网站 ...
- 零基础学python实战-零基础学习python_类和对象(36-40课)
今天我们开始学习面向对象的知识咯,之前我对面向对象也学的懵懵的,因为感觉知道好像又不是特别清楚,接下来我们一起来学习类和对象吧.零基础的课程我都是看小甲鱼的视频学的,没基础的可以去这个网址下载视频学习 ...
- 九宫怎么排列和使用_剪映零基础入门教程第三十七篇:一学就会系列之九宫格小程序配音...
很多玩儿抖音的朋友都看过九宫格视频,但是并不是每个玩抖音的人都会制作这个九宫格视频,实际这个需要借助小工具来帮忙,而常用抖音的朋友们会对剪映更加熟悉一些,且九宫格视频在剪映内的制作方式则比较简单.那么 ...
- java无线电台RS制信号_中国MOOC_零基础学Java语言_第2周 判断_2信号报告
2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength) 信号强度即大小. 其中R位于报告第一 ...
最新文章
- 投票系统web服务器,创建一个Web投票系统
- 打通C/4HANA和S/4HANA的一个原型开发:智能服务创新案例
- shell中条件判断if中的-z到-d的意思
- OGC之路(1) 之 WMS标准学习总结
- 在Ubuntu|CentOS上安装Shutter截图工具及快捷键设置
- Gaze Estimation笔记——data normalization
- mysql 排序字段索引吗_Mysql 排序优化与索引使用(转)
- 中国糖和甜味剂市场趋势报告、技术动态创新及市场预测
- layui中laypage当前页刷新
- leetcode(105)从前序遍历和中序遍历构建二叉树
- Logback 深入分析
- 海康摄像机通过Ehome协议接入EasyCVR无法成功上线的原因排查及配置注意事项
- linux下拷贝某一时间段的文件
- Win10电脑如何清理系统垃圾
- 中级php工程师笔试,PHP工程师笔试题目及行测题型示例
- 给所有的Control加两个属性,实现回车键自动跳转到下一个控件
- 深入浅出自然语义处理原理并构建自然语义处理(NLP)模型GPT2
- java中根遍历后根遍历构造,恳求大佬指点!!!首先标明空子树的先根遍历序列建立一棵二叉树...
- 【中间件】RabbitMQ入门学习笔记
- conda 清除已经下载的缓冲包
热门文章
- 2018年NOIP普及组完善程序题2—右侧第一个更大值
- 学习笔记:CODESYS(顺序功能图SFC)
- Eclipse 从SVN检出项目之《文件夹 “” 已不存在 》
- 基于HTML旅游网站设计与实现 途游网站制作 学生DW静态旅游网页设计 html静态旅游风景区网页设计制作 web前端课程设计 web前端课程设计代码 web课程设计
- 沙拉翻译网页双语显示,程序员必备,是神器没错了
- 海关数据:外贸主动营销工具有哪些?
- 以地图视角回顾70年互联网发展
- 客户流失?来看看大厂如何基于spark+机器学习构建千万数据规模上的用户留存模型 ⛵
- c++打印心形_C语言控制台打印3D爱心图案
- 【2020秋招】提前批陌陌机器学习算法工程师面试经验