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.如果这时候执行程序,会出现以下错误:
这是因为如果我们要切换场景,必须先把所有的场景放在build settings里面:
打开,这时候,双击打开主场景:MainScene,然后点击Add Current,把当前场景添加到正在构建的场景里面。
5.然后在启动程序,点击“进入游戏”就可以切换到GameScene场景了。
6.不过这时候的游戏场景还是一片空白,接下来就给场景GameScene绘制游戏地图。
7.在Hierarchy面板点击Create,选择Terrain创建地形:
8.导入Unity3d附带的地图资源包:
9.给场景场景太暗,给场景添加一个方向灯:
方向灯:顾名思义,只需要给修改方向,整个场景的光亮就会改变。
10.修改一下地形:
11.给地形增加贴图:
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;
}
运行项目~!