第一步,首先我们需要创建一个空的游戏体,来作为摄像机观察的目标点,为其创建脚本CameraPoint.cs ;
/*
* CameraPoint Defintion
* Created by taotao man on 2015-8-2
* Brief: 空游戏体作为摄像机观察的目标点
* // 修改记录
* date:2015-9-14
* add SetA();
* change GetA();
*/
using UnityEngine;
using System.Collections;
public class CameraPoint : MonoBehaviour {
public static CameraPoint Instance = null;
void Awake() // 脚本唤醒,系统执行的第一个方法,在脚本中仅执行一次
{
Instance = this;
}
void OnDrawGizmos()
{
Gizmos.DrawIcon(transform.position, "CameraPoint.tif"); // 在场景视图世界位置绘制一个图标。
}
}
第二步,GameCamera.cs,将其指定场景中的摄像机
/*
* CameraCamera Definition
* Created by taotao man on 2015-8-2
* Brief: 移动鼠标的时候控制摄像机
* // 修改记录:
* date: 2015-9-14
* add SetA();
* change GetA();
*/
using UnityEngine;
using System.Collections;
public class GameCamera : MonoBehaviour {
public static GameCamera Inst = null;
protected float m_distance = 9; // 摄像机距离地面的距离
protected Vector3 m_rot = new Vector3(-55, 180, 0);// 摄像机的角度
protected float m_moveSpeed = 60; // 摄像机的移动速度,sjt,暂时没用到
// 摄像机的移动值
protected float m_vx = 0;
protected float m_vy = 0;
protected Transform m_cameraPoint; // 摄像机的焦点
protected Transform m_transform; // Transform 组件
void Awake()
{
Inst = this;
m_transform = this.transform;
}
// Use this for initialization
void Start ()
{
// 获得摄像机的焦点
m_cameraPoint = CameraPoint.Instance.transform;
Follow();
}
// 在Update之后执行
void LateUpdate() // 确保在所有的操作完成后再移动摄像机
{
Follow();
}
// 摄像机对齐到焦点的位置和角度
void Follow()
{
m_transform.position = m_cameraPoint.position;
m_transform.eulerAngles = m_rot;
m_transform.Translate(0, 0, m_distance);
this.transform.LookAt(m_cameraPoint);
}
// 控制摄像机移动
public void Control(bool mouse, float mx, float my) // 移动CamerPoint目标点
{
if (!mouse)
return;
m_cameraPoint.Translate(-mx, 0, -my);
}
}
第三步,在游戏管理器代码中,的Updae函数里面,添加代码如下:
void Update()
{
// 如果选中创建士兵的按钮则取消摄像机操作
if (m_isSelectedButton)
return;
// 按下鼠标操作
bool press = Input.GetMouseButton(0); // 左键按下
float mx = Input.GetAxis("Mouse X");
float my = Input.GetAxis("Mouse Y");
GameCamera.Inst.Control(press, mx, my);
}