Siki_Unity_1-2_Unity5.2入门课程_进入Unity开发的奇幻世界_Roll A Ball
1-2 Unity5.2入门课程 进入Unity开发的奇幻世界
任务1:Roll A Ball项目简介
Unity官网的tutorial入门项目
方向键控制小球在平台上滚动,碰撞方块得分,消掉所有方块后胜利
任务2:初始化游戏环境
1. New Project "Roll A Ball"
2. save Main.unity into "Scenes" folder
3. create a Plane and rename it as "Ground"; and then scale it twice (the default width is 10m)
4. change the color of Ground (material)
a. create a folder called Materials and create a Material called Ground inside the folder
b. change the component Albedo of the Ground material to what u like (here is blue)
c. drag and drop the material to the GameObject(Ground)
5. create a Sphere and change the y position to 0.5 and rename it as Player
任务3:刚体介绍和脚本的创建
1. 刚体的添加
add component Rigidbody to Player
2. 控制小球的移动
a. create a folder called Scripts and create a c# script called Movement.cs inside it
// or add component in Player's inspector->New Scirpt
b. attach Movement.cs to Player
任务4:通过代码控制移动
通过Rigidbody来控制Player的移动
private Rigidbody rd;
// 在Start(){}中
rd = GetComponent<Rigidbody>();
// 在Update(){}中
// 给Player一个外力的作用,力的大小为1,方向为(1, 0, 0)
rd.AddForce(new Vector3(, , ));
此时,Player会自动向x轴正方向移动
任务5:通过键盘按键控制小球的移动
在Rigidbody的AddForce()中使用参数表示速度方向
// 水平方向控制,返回一个-1~1的浮点数(右方向为正)
float h = Input.GetAxis("Horizontal");
// 给Player一个外力的作用,力的大小为1,方向为(1, 0, 0)
rd.AddForce(new Vector3(h, , ) * force); float v = Input.GetAxis("Vertical");
rd.AddForce(new Vector3(, , v) * force); // 这里是通过施加外力的方法来控制小球的移动
speed设为5
可简写成
rd.AddForce(new Vector3(h, 0, v) * force);
任务6:控制相机的跟随
1. 将Camera调成俯视状态
2. 将Camera设置成Player的child
但是发现Camera会在小球移动的时候跟随小球旋转
3. 步骤2不合适,故尝试使用代码来控制
在Main Camera中添加脚本FollowTarget.cs
public Transform playerTransform; // 需要得到Player的位置,故使用Transform
将Player GameObject拖到Main Camera的Inspector中的变量出赋值
计算出想要的位置平移,在Update中实现即可
private Vector3 offset;
// 在Start(){}中
offset = transform.position - playerTransform.position;
// 在Update(){}中
transform.position = playerTransform.position + offset;
任务7:控制小球的移动范围
在Ground的四周添加墙
create a cube called Wall,scale z to 20 and set the position
ctrl + d to copy another three walls, and put them in the other side
将四堵墙设置为Ground的children,做好分类
任务8:创建可收集的食物
1. 创建cube,命名为PickUp,scale为0.5,rotation为(45, 45, 45)
2. 修改cube的颜色,新建一个名为PickUp的Material,将Albedo设置为黄色,并给cube赋值
3. 将PickUp制作成Prefab
创建文件夹Prefabs,将PickUp从Hierarchy拖入Project面板即可
4. 将PickUp复制并放置在Ground上围成一圈
5. 创建一个Empty GameObject,将所有PickUp放入成为children
任务9:控制食物的旋转
创建脚本PickUpRotating
transform.Rotate(new Vector3(0, 1, 0));
// 围绕某个轴进行旋转
任务10:关于Unity手册(API和Manual)
Help->Scripting Reference
任务11:碰撞检测
碰撞检测:刚体Rigidbody检测两个物体是否进行了碰撞
如Player在接触了Wall或是Ground的时候就成为碰撞,能够检测出碰撞到什么物体
OnCollisionEnter() -- when this collider/rigidbody has begun touching another 开始碰撞的时候,只会执行一次
OnCollisionExit() -- when this collider/rigidbody has stopped touching another 结束碰撞的时候,只会执行一次
OnCollisionStay() -- once per frame for every collider/rigidbody that is touching another两个物体碰撞的时候,会一直执行
在Player的Movement.cs中
给PickUp的Prefab加上tag“PickUp”
void OnCollisionEnter(Collision collision) {
// collision为与该物体碰撞的物体
// collision.collider为collider组件
// collision.collider.name为物体名字
// collision.collider.tag为物体标签
// collision.collider.gameObject为物体本身
if (collision.collider.tag == "PickUp") {
Destroy(collision.collider.gameObject);
}
}
会发现Player在碰到食物时会停顿一下,食物消失 -- 不大符合要求
(PS另一种为触发检测,见下一个任务)
任务12:触发检测控制主角捡起食物
触发检测:
触发器没有物理的碰撞效果,一个物体可以进入触发器内部,但是可以检测到是否进入了触发区域,比如在主角进入某个区域时有个机关会自动打开,就可以使用触发检测来完成
也是包含OnTriggerEnter(); OnTriggerExit(); OnTriggerStay();
将PickUp的Box Collider中的Is Trigger勾选
// 触发检测
void OnTriggerEnter(Collider collider) {
// collider表示跟该物体触发的碰撞器
if (collider.tag == "PickUp") {
Destroy(collider.gameObject);
}
}
任务13:显示分数和胜利检测
显示分数
1. private int score = 0;
2. create UI->Text
在Text的Rect Transform中按住alt选择top-left,将Text定位在屏幕左上角
3. Movement.cs
public Text scoreText;
private int score = ; // 在触发检测中添加
if (collider.tag == "PickUp") {
Destroy(collider.gameObject);
score++;
scoreText.text = score.ToString();
}
胜利检测
1. create UI->Text
按T切换到UI编辑
按住alt等比例放大拖动并在Inspector里选择左右居中,上下居中
改变颜色
修改内容为You Win!
2. 将该WinText的勾选框uncheck,表示不激活
3. Movement.cs
public GameObject winText;
当想要控制GameObject本身的时候就声明一个GameObject
当想要控制一个物体里面的组件时,只需声明相关组件即可,如上面的Text
gameObject.SetActive(true);
if (collider.tag == "PickUp") {
score++;
scoreText.text = score.ToString();
if(score == ) {
winText.SetActive(true);
}
Destroy(collider.gameObject);
}
任务14:游戏发布和运行
在File -> Build Settings中,将要发布的scenes拖到Scenes In Build中(有顺序),点击Build/Build And Run即可
若是选择Window平台,生成的会是一个exe文件和一个存放data的文件夹,这两部分缺一不可,而且需要位于同一目录下才能运行。
Siki_Unity_1-2_Unity5.2入门课程_进入Unity开发的奇幻世界_Roll A Ball的更多相关文章
- Asp.NET Core2.0 项目实战入门视频课程_完整版
END OR START? 看到这个标题,你开不开心,激不激动呢? 没错,.net core的入门课程已经完毕了.52ABP.School项目从11月19日,第一章视频的试录制,到今天完整版出炉,离不 ...
- 课程上线 -“新手入门 : Windows Phone 8.1 开发”
经过近1个月的准备和录制,“新手入门 : Windows Phone 8.1 开发”系列课程已经在Microsoft 虚拟学院上线,链接地址为:http://www.microsoftvirtuala ...
- Docker入门实战_正版电子书在线阅读_百度阅读
Docker入门实战_正版电子书在线阅读_百度阅读 Docker入门实战
- (二)Hololens Unity 开发入门 之 Hello HoloLens~
学习源于官方文档 微软官文~ 笔记一部分是直接翻译官方文档,部分各人理解不一致的和一些比较浅显的保留英文原文 (二)Hololens Unity 开发入门 之 Hello HoloLens~ 本文主要 ...
- 百度Apollo无人驾驶入门课程下载
本文提供 百度Apollo官网的无人驾驶入门课程下载,主要为视频文件. 视频数量:101个:文件格式:MP4:视频总时长:2小时40分钟:文件总大小:约1.13GB: 马上下载 关注公众号罗孚传说(R ...
- Scratch入门课程(1)——把工具准备好
为了让更多的同学了解少儿编程,从今天开始,我将以每周1次的频率发布Scratch的入门课程,大约在30课时左右. 几点情况说明: 1.这批课程主要面向2-4年级的同学,难度都不大,按照教程可以很轻松地 ...
- GEF入门实例_总结_06_为编辑器添加内容
一.前言 本文承接上一节:GEF入门实例_总结_05_显示一个空白编辑器 在上一节我们为我们的插件添加了一个空白的编辑器,这一节我们将为此编辑器添加内容. 二.GEF的MVC模式 在此只简单总结一下, ...
- GEF入门实例_总结_05_显示一个空白编辑器
一.前言 本文承接上一节:GEF入门实例_总结_04_Eclipse插件启动流程分析 在第三节( GEF入门实例_总结_03_显示菜单和工具栏 ),我们创建了菜单和工具栏. 这一节,我们来实现:点击 ...
- GEF入门实例_总结_04_Eclipse插件启动流程分析
一.前言 本文承接上一节:GEF入门实例_总结_03_显示菜单和工具栏 注意到app目录下的6个类文件. 这6个文件对RCP应用程序而言非常重要,可能我们现在对这几个文件的理解还是云里雾里,这一节我们 ...
随机推荐
- XML解析方式
两种解析方式概述 dom解析 (1)是W3C组织推荐的处理XML的一种解析方式. (2)将整个XML文档使用类似树的结构保存在内存中,在对其进行操作. (3)可以方便的对XML进行增删改查的操作 (4 ...
- window7及以上 创建软链接 mklink
软链接是一种文件共享方式. 命令:mklink /d "C:\d" "C:\e" 有哪些坑: 1.此命名必须以管理员方式在cmd运行 2.文件必须不存在..通过 ...
- Java反射机制--是什么,为什么,怎么用。
往往当我们面对一项新的知识时,我们往往需要知道三个方面,它是什么,它能做什么,它比原有知识强在哪里,我们该怎么使用它.当你能够解决这些问题时,便意味着你已经对这项知识入门了. 一.是什么 Java R ...
- iOS安装CocoaPods详细过程
iOS安装CocoaPods详细过程 一.简介 什么是CocoaPods CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的 ...
- NodeJ node.js Jquery Ajax 跨域请求
Jquery + Ajax 跨域请求 说白了就是前台请求ajax数据(JSON)但是请求的数据不在本地的绝对路径下,接口数据 是没有这个安全性的我对外公开的接口数据,只要你找到接口你就可以使用里面的数 ...
- getline的字符串读入
也许是最近模拟题打多了的缘故,我发现自己渐渐变得比较毒瘤起来,当然这也是有一定的好处的,因为从中我也学到了一些处理字符串的正确姿势,今天我们就来讲一 讲如何用函数getline来读入一整行字符串进行处 ...
- Echarts+百度地图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 06 day小数据池
1.小数据池,id() 小数据池针对的是: int ,str,bool-----都是不可变的数据类型 a.int 类型 a = 1000 b = 1000 print(id(a), id(b)) ...
- 使用 win10 的库来组织自己的同类文件
库相当于虚拟目录,可以把不同的文件夹包含起来. 找起东西来不用东奔西跑了...
- python应用:日期时间
计算时间差时,注意天数差引发的问题,获取天数差为 (date2-date1).days 此处,需谨记date2>date1,以保证结果的正确性 具体应用如下: # -*-coding:utf8- ...