1.另外新建一个场景:GameScene, 主要是用来制作游戏内容

通过点击游戏菜单中的“进入游戏”按钮转到到这里。

2.要实现场景键的切换,修改SceneController中的update方法,

void Update () {
           if (currentGameState == preGameState) {
                return;
           }
           //赋值游戏状态
           preGameState = currentGameState;
           switch(currentGameState)
           {
                case GameState.GAME_MENU:

                     break;
                case GameState.GAME_START:
                     Application.LoadLevel("GameScene");
                     break;
                case GameState.GAME_END:
                    
                     break;
                case GameState.GAME_QUIT:
                    
                     break;
                default:
                     Debug.Log("未知状态错误 state="+currentGameState);
                     break;
           }
      }

3.在点击按钮“进入游戏”后,SceneController的currentGameState值就

会修改为GameState.GAME_START,在下次执行update方法的之后,就会

执行到 Application.LoadLevel("gameScene"),这句话是用来切场景。

4.如果这时候执行程序,会出现以下错误:

unity 切换技能 unity按键切换场景_unity 切换技能

这是因为如果我们要切换场景,必须先把所有的场景放在build settings里面:

unity 切换技能 unity按键切换场景_unity 切换技能_02

打开,这时候,双击打开主场景:MainScene,然后点击Add Current,把当前场景添加到正在构建的场景里面。

unity 切换技能 unity按键切换场景_Time_03

5.然后在启动程序,点击“进入游戏”就可以切换到GameScene场景了。

6.不过这时候的游戏场景还是一片空白,接下来就给场景GameScene绘制游戏地图。

7.在Hierarchy面板点击Create,选择Terrain创建地形:

unity 切换技能 unity按键切换场景_游戏_04

8.导入Unity3d附带的地图资源包:

unity 切换技能 unity按键切换场景_Time_05

9.给场景场景太暗,给场景添加一个方向灯:

方向灯:顾名思义,只需要给修改方向,整个场景的光亮就会改变。

unity 切换技能 unity按键切换场景_unity 切换技能_06

10.修改一下地形:

unity 切换技能 unity按键切换场景_游戏_07

11.给地形增加贴图:

unity 切换技能 unity按键切换场景_游戏_08

12.同理,给地形增加一些花草树木:

这里要说明一点,如果是的Unity给游戏渲染做了一些优化,如果镜头距离目标较远的时候给

地形增加草,那么很可能在场景里面出现不了,此时把镜头拉近的时候,就可以看到了。

13.接下来是实现以第一人称来观看整个场景:

新建一个类:FirstPersonView用于绑定摄像机,实现第一人称视觉

/**
      *  鼠标左键GetMouseButton(0)
           鼠标右键GetMouseButton(1)
           鼠标中键GetMouseButton(2)
      **/
      public const int MOUSE_BTN_RIGHT = 1;
      
   
//射击准心贴图
   
     public Texture2D tex_fire;
     
      // Use this for initialization
      void Start () {
           //影藏鼠标指针
           Screen.showCursor = false;
      }
     
      // Update is called once per frame
      void Update () {
           //按住鼠标右键旋转
           if (Input.GetMouseButton(MOUSE_BTN_RIGHT)) {
                transform.Rotate (0, Input.GetAxis ("Mouse X"), 0);
           }
      }
      
   
     /**
   
       * 把鼠标的指针改成射击准星,并设置准心的位置为鼠标的指针点
   
       */
      void OnGUI()
      {
           if (tex_fire) {
                float x = Input.mousePosition.x - (20 >> 1);
                float y = Input.mousePosition.y + 10;
                GUI.DrawTexture (new Rect (x, Screen.height - y, 20, 20), tex_fire);
           }    
      }

14.同样的新建一个RoleMoveController的类绑定在摄像机,这个类主要是用来控制主角的移动:

public class RoleMoveController : MonoBehaviour {

      // Use this for initialization
      void Start () {
      
      }
      
      // Update is called once per frame
      void Update () {
           if (Input.GetKey (KeyCode.A)) {
                this.transform.Translate(Vector3.left*Time.deltaTime*Common.MOVE_SPEED);     
           }
           else if (Input.GetKey (KeyCode.D)) {
                this.transform.Translate(Vector3.right*Time.deltaTime*Common.MOVE_SPEED);
           }
           else if (Input.GetKey (KeyCode.W)) {
                this.transform.Translate(Vector3.forward*Time.deltaTime*Common.MOVE_SPEED);
           }
           else if (Input.GetKey (KeyCode.S)) {
                this.transform.Translate(Vector3.back*Time.deltaTime*Common.MOVE_SPEED);
           }
      }
 }

Common类主要是存放一些公共的常量:

public class Common{
      //移动速度
      public const int MOVE_SPEED = 5;
      //旋转速度
      public const int ROTATE_SPEED = 20;
 }

运行项目~!