第一步,首先我们需要创建一个空的游戏体,来作为摄像机观察的目标点,为其创建脚本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); }