为了接下来要做的小游戏,在这里我要小小的修改一下移动的代码。

public class PlayerMove : MonoBehaviour {

    //定义移动的速度
public float MoveSpeed = 8f; void Start () { }
void Update ()
{
//如果按下W或上方向键
if(Input.GetKey(KeyCode.W)||Input.GetKey(KeyCode.UpArrow))
{
MoveForward();
}
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
MoveBack();
}
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
MoveLeft();
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
MoveRight();
}
} void MoveForward()
{
this.transform.Translate(Vector3.forward * MoveSpeed * Time.deltaTime);
}
void MoveBack()
{
this.transform.Translate(Vector3.back * MoveSpeed * Time.deltaTime);
}
void MoveLeft()
{
this.transform.Translate(Vector3.left * MoveSpeed * Time.deltaTime);
}
void MoveRight()
{
this.transform.Translate(Vector3.right * MoveSpeed * Time.deltaTime);
}
}

这样写是为了便于以后可以自由的扩展功能,而且便于管理。

那么,现在我们要为下面要做的游戏做一个小小的策划。

  • 首先。我们要做一个3D版的是男人就下一百层。
  • 第二。我们需要三个可以跳跃的方块:向左移动的、向右移动的、不动的。
  • 第三。为了增加游戏难度,我们要设置方块只能停留数秒就消失。
  • 第四。可移动的方块踩到后就要停止运动。
  • 第五。人物没有跳跃能力,只能前后左右。

OK,策划暂时就是这样,那么,我们就从方块开始入手。 
三个方块,不动的方块我们就用现在的地板为模型,Ctrl+D复制出来一个,然后改名为StaticCube。然后接着复制出两个,分别命名为LeftCube、RightCube。

将这些方块按阶梯式布局,以便测试,然后运行游戏,可以看到,Player下去以后就再也上不来了。2333333

现在,我们开始让木块动起来。

那么,木块的代码我们要怎么写?总不会写两个吧?向左一个单独的代码,向右一个单独的代码? 
在我们没有更好的思路之前,先按着这个思路我们继续进行。。。

新建两个C#脚本,分别命为LeftCubeMove与RightCubeMove。在这里写Cube的移动代码。以Left为例:

public class LeftCubeMove : MonoBehaviour {
//定义Cube的初始移动速度
public float CubeSpeed = 1f; void Start () { } void Update () {
//使Cube的移动速度每一帧都增加
CubeSpeed += 0.1f;
//使Cube以CubeSpeed为速度向左移动
this.transform.Translate(Vector3.left * CubeSpeed * Time.deltaTime); }
}

然后将这两个脚本分别托给相应的Cube,运行游戏,可以看到Cube自己开始移动了。

那么我们怎样才能做到Player落在Cube上,Cube就停止移动呢?

所以问题来了,我们怎样判断Player是否落在Cube上了呢?

在这里我为大家做个解释:这就好比我在背后打你一拳,你并没看到,但是你知道有人打你,你为什么知道有人打你呢?因为你能感觉到,你是一个具有感觉能力的人。

所以,我们要让Cube也有具有感觉,那就是为Cube添加碰撞器。 
在我们新建Cube的时候,Unity会自动为Cube添加一个Box Collider, 
那么我们需要做的就是将Is Trigger选上,这个是触发器。

至于如何检测碰撞,我会在下一讲继续为大家讲解。

在这一讲结束前,我来教大家一个高大上的投影调法。

首先点击我们的光源:Directional light,然后右边有一个Light的选项面板,可以看到有Shadow Type的选项,这个的意思是阴影类型。 
将他设置为:Soft Shadows

然后将下面联动出来的Resolution(分辨率)设置为Very Hight Resolution(非常高的分辨率)。

然后大家就可以看到非常清晰的影子了。

大家也可以在设计师图中找到光源,去调整光的投射角度,可以更好的找到游戏的体验效果。

Unity -- 入门教程二的更多相关文章

  1. Unity入门教程(下)

    一.概要 在 Unity入门教程(上) 中我们创建了一个游戏项目,并且创建了玩家角色和小球这些游戏对象,还通过添加游戏脚本实现了小方块的弹跳.虽然功能比较简单,但是完整地表现了使用Unity开发游戏的 ...

  2. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

  3. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  4. 无废话ExtJs 入门教程二[Hello World]

    无废话ExtJs 入门教程二[Hello World] extjs技术交流,欢迎加群(201926085) 我们在学校里学习任何一门语言都是从"Hello World"开始,这里我 ...

  5. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...

  6. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  7. PySide——Python图形化界面入门教程(二)

    PySide——Python图形化界面入门教程(二) ——交互Widget和布局容器 ——Interactive Widgets and Layout Containers 翻译自:http://py ...

  8. Elasticsearch入门教程(二):Elasticsearch核心概念

    原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:ht ...

  9. RabbitMQ入门教程(二):简介和基本概念

    原文:RabbitMQ入门教程(二):简介和基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

随机推荐

  1. 光学字符识别OCR-6 光学识别

    经过前面的文字定位和文本切割,我们已经能够找出图像中单个文字的区域,接下来可以建立相应的模型对单字进行识别. 模型选择         在模型方面,我们选择了深度学习中的卷积神经网络模型,通过多层卷积 ...

  2. ThreeJs 基础入门

    本文来自网易云社区 作者:唐钊 Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它在 web 中创建各种三维场景,包括了摄影机.光影.材质等各种对象.使用它可以让我们更加直观的了解 we ...

  3. 简单检测CDN链接是否有效

    CDN链接经常是使用的.但是,CDN链接挂了怎么办,因此,就要调用使用本站点的库,那么怎么实现呢? 检测CDN的jquery链接是否有效(这种方法比较简单) <script src=" ...

  4. webdriver高级应用- 启动FireFox的同时打开Firebug

    1. 首先本机Firefox浏览器需要安装一下firebug插件,具体怎么安装这里不赘述,网上教程很多. 2. 具体自动化实现的代码如下: #encoding=utf-8 from selenium ...

  5. Selenium WebDriver- 操作浏览器的cookie

    #encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...

  6. Selenium WebDriver- 显式等待

    推荐使用显示等待,元素出现就不会等待而继续执行了.节省时间. #encoding=utf-8 import unittest import time from selenium import webd ...

  7. doc下设置永久环境变量的好方法

    http://www-2w.blog.163.com/blog/static/97931518201021211123267/ 需要查看命令具体实现:setx machine “%path%”. 配置 ...

  8. 九度oj 题目1475:IP数据包解析

    题目描述: 我们都学习过计算机网络,知道网络层IP协议数据包的头部格式如下: 其中IHL表示IP头的长度,单位是4字节:总长表示整个数据包的长度,单位是1字节. 传输层的TCP协议数据段的头部格式如下 ...

  9. 项目记事【多线程】:关于 SimpledDateFormat 的多线程问题

    背景: 最近项目引入了 SonarLink,解决代码规范的问题,在检查历史代码的时候,发现了一个问题. 先看代码: public class DateUtil { private static fin ...

  10. iOS学习笔记27-摄像头

    一.摄像头 在iOS中,手机摄像头的使用有以下两种方法: UIImagePickerController拍照和视频录制 优点:使用方便,功能强大 缺点:高度封装性,无法实现一些自定义工作 AVFoun ...