网上演练贵港万达广场(人员密集)
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.
 
 
 

95 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 = 3; //查看人员模式下,摄像机高度
private float distance = 2; //查看人员模式下,人与摄像机之间的距离
private float dampTrace = 20.0f; //查看人员模式下,摄像机平滑追踪的变量
private float lookingAtHeight = 3.5f;
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));
}
}
}