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

    这里写图片描述

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

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

  • 相关阅读:
    10个你可能不知道的JavaScript小技巧
    QuickFlow2.0 安装指南
    QuickFlow教程(5): RuleDriven活动,角色提供程序自定义,邮件模板
    QuickFlowDesigner教程(2)工作流表单快速自定义
    QuickFlowDesigner1.0(Build091025)发布
    QuickFlow2.0无代码工作流设计器QuickFlowDesigner1.0 beta publish
    QuickFlowDesigner教程(3)UI代码和工作流交互
    QuickFlow Aspx Form example deploy wizard
    多选用户字段的Caml查询问题
    QuickFlowDesigner教程(4)如何用代码控制活动操作人
  • 原文地址:https://www.cnblogs.com/mafeng/p/7597219.html
Copyright © 2011-2022 走看看