- 最后登录
- 2014-10-23
- 注册时间
- 2011-7-19
- 阅读权限
- 90
- 积分
- 81303
- 纳金币
- -1
- 精华
- 11
|
脚本的层次结构如下:
例如我在按钮按下时切换到开始场景:
using System.Collections;
public class BeginGame : MonoBehaviour {
public StateRun m_RunState;
public Main_Script m_MainScript;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnMouseEnter()
{
print("enter");
}
void OnMouseUp()
{
m_MainScript.ChangeState(m_RunState);
}
void OnMouseExit()
{
print("exit");
}
}
这个脚本是挂在一个板上面的,点击它时就进入游戏的主场景了。下回说一下飞机的移动。
现在开始真正的游戏元素的编写了。
第一步,让飞机动起来。
首先是飞机的前进,通常2D中的做就是背景的循环滚动。
在3D中我们可以让摄像机移动,背景我们可以做超一个大地形。。在地形上摆一些固定的东西。
// Update is called once per frame
void Update () {
TurnLeft = false;
TurnRight = false;
if (Input.GetKey(KeyCode.W))
{
Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
//print(screenPos.y);
if (Screen.height > screenPos.y)
this.transform.Translate(Vector3.forward * Time.deltaTime * m_nMoveSpeed);
}
if (Input.GetKey(KeyCode.S))
{
Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
if (0 < screenPos.y)
this.transform.Translate(Vector3.forward * Time.deltaTime * -m_nMoveSpeed);
}
if (Input.GetKey(KeyCode.A))
{
Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
if (0 < screenPos.x)
this.transform.Translate(Vector3.left * Time.deltaTime * m_nMoveSpeed);
//向左转
if (CurRotation < RotateLimit)
{
print(CurRotation);
CurRotation += RotateSpeed;
}
TurnLeft = true;
}
if (Input.GetKey(KeyCode.D))
{
Vector3 screenPos = Camera.mainCamera.WorldToScreenPoint(this.transform.position);
if (Screen.width > screenPos.x)
this.transform.Translate(Vector3.left * Time.deltaTime * -m_nMoveSpeed);
//向右转
if (CurRotation > -RotateLimit)
CurRotation -= RotateSpeed;
TurnRight = true;
}
//回归
if (!TurnLeft && !TurnRight)
{
if (CurRotation > 0.0)
CurRotation -=RotateSpeed;
else if (CurRotation < 0)
CurRotation +=RotateSpeed;
}
Quaternion rot = Quaternion.AngleAxis(CurRotation, new Vector3(0, 0, 1));
m_Plane.rotation = rot;
//让相机和飞机一起以一定的速度前移
this.transform.Translate(Vector3.forward * Time.deltaTime * m_nMoveSpeed);
Camera.mainCamera.transform.Translate(Vector3.up * Time.deltaTime * m_nMoveSpeed);
}
飞机的主要控制代码。。不知为什么,我的两个角度限制没有效果。。郁闷。。有空还看一下。。
这次先加入子弹的发射吧,没用模型,先用的一个capsule的prefab代替吧。
一想到各种武器之间的随意切换,就不由的想到了设计模式中的Strategy模式。
有关策略模式的详细介绍可以通过百度和维基来学习。
这个模式其实和State模式差不多。
|
|