zoukankan      html  css  js  c++  java
  • Unity -- 入门教程二

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

    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(非常高的分辨率)。

    这里写图片描述

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

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

  • 相关阅读:
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之六 多点触控
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之九 定位
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之七 重力感应
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之五 保存数据的几种方式
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之八 照相机
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之三 Application 配置详解
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之四 打开与关闭应用程序是的保存数据
    ADOBE FLASH BUILDER 4.6 IOS 开发之部署与调试
    [译] 高性能JavaScript 1至5章总结
    页签及盒子的web标准实现
  • 原文地址:https://www.cnblogs.com/mafeng/p/7597219.html
Copyright © 2011-2022 走看看