|
|
|
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));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|