You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.5 KiB
96 lines
3.5 KiB
using AX.MessageSystem; |
|
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
|
|
public class QuadCamera : MonoBehaviour |
|
{ |
|
public CloneGameObjInfo info; |
|
public Transform target; |
|
private Camera myCam; |
|
private float height = 1.5f; //查看人员模式下,摄像机高度 |
|
private float distance = 2; //查看人员模式下,人与摄像机之间的距离 |
|
private float dampTrace = 20.0f; //查看人员模式下,摄像机平滑追踪的变量 |
|
private float lookingAtHeight = 2f; |
|
private float lookingAtDistance = 5; |
|
void Awake() |
|
{ |
|
myCam = GetComponent<Camera>(); |
|
} |
|
public void SetTarget(CloneGameObjInfo info) |
|
{ |
|
this.info = info; |
|
MessageDispatcher.AddListener("CancelQuadDisplay", DeleteThisCamera); |
|
MessageDispatcher.AddListener("OpenFourthG", DisableCameraOpenTransfer); |
|
MessageDispatcher.AddListener("QuadrupleMode", DisableCamera); |
|
target = EntitiesManager.Instance.GetEntityByID(info.gameObjID).transform; |
|
} |
|
void OnDestroy() |
|
{ |
|
MessageDispatcher.RemoveListener("CancelQuadDisplay", DeleteThisCamera); |
|
MessageDispatcher.RemoveListener("OpenFourthG", DisableCameraOpenTransfer); |
|
MessageDispatcher.RemoveListener("QuadrupleMode", DisableCamera); |
|
} |
|
/// <summary> |
|
/// 关闭四分屏模式,或四分屏模式下关闭4G图传窗口,则禁用四分屏相机,减少性能消耗 |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
private void DisableCamera(IMessage obj) |
|
{ |
|
var value = (bool)obj.Data; |
|
this.enabled = value; |
|
myCam.enabled = value; |
|
} |
|
private void DisableCameraOpenTransfer(IMessage obj) |
|
{ |
|
var value = (bool)obj.Data; |
|
//打开图传面板时,如果不在四分屏模式,则相机和此脚本禁用 |
|
//关闭图传面板时,相机和此脚本禁用 |
|
if ((/*打开图传面板*/value == true && /*不在四分屏模式*/QuadrupleMode.quadingMode == false) || /*关闭图传面板*/value == false) |
|
{ |
|
this.enabled = false; |
|
myCam.enabled = false; |
|
return; |
|
} |
|
//打开图传面板时,在四分屏模式,则相机和此脚本开启 |
|
if (value == true && QuadrupleMode.quadingMode == true) |
|
{ |
|
this.enabled = true; |
|
myCam.enabled = true; |
|
return; |
|
} |
|
} |
|
/// <summary> |
|
/// 删除此四分相机 |
|
/// </summary> |
|
/// <param name="obj"></param> |
|
private void DeleteThisCamera(IMessage obj) |
|
{ |
|
var deleteInfo = (CloneGameObjInfo)obj.Data; |
|
if (deleteInfo.gameObjID == info.gameObjID) |
|
{ |
|
Destroy(gameObject); |
|
} |
|
else |
|
{ |
|
StartCoroutine(UpdateName()); |
|
} |
|
} |
|
IEnumerator UpdateName() |
|
{ |
|
yield return new WaitForEndOfFrame(); |
|
gameObject.name = "QuadCam-" + transform.GetSiblingIndex().ToString(); |
|
} |
|
void LateUpdate() |
|
{ |
|
//有目标人员并且相机当前激活 |
|
if (target && myCam.enabled == true) |
|
{ |
|
//相机的位置,在人员胸前 |
|
transform.position = Vector3.Lerp(transform.position, target.position + (target.forward * distance) + (Vector3.up * height), Time.deltaTime * dampTrace); |
|
//transform.LookAt(target.position); |
|
transform.LookAt(target.position + (target.forward * lookingAtDistance) + (Vector3.up * lookingAtHeight)); |
|
} |
|
} |
|
}
|
|
|