using System.Collections; using System.Collections.Generic; using UnityEngine; using AX.MessageSystem; using System; using AX.InputSystem; public class PrivateToolMessage : MonoBehaviour { public Vector3 objWorldPos; //作战部署顶视图UI private Transform FireDeployRawImage; //作战部署顶视图相机 private Camera FireDeployCamera; //UIRoot private Canvas canvas; private Vector3 mousePosOnUI; private float orthographicSize; // Use this for initialization void Start () { FireDeployCamera = GameObject.Find("FireDeployCamera").GetComponent(); FireDeployRawImage = GameObject.Find("OperationalPreparations/MainWindow/RawImage").transform; canvas = GameObject.Find("Canvas").GetComponent(); orthographicSize = FireDeployCamera.orthographicSize; MessageDispatcher.AddListener("UPDATE_ARROWORWATERSUPPLY_UIWITH", UpdateArrowOrWaterSupplyUIWith); } private void OnDestroy() { MessageDispatcher.RemoveListener("UPDATE_ARROWORWATERSUPPLY_UIWITH", UpdateArrowOrWaterSupplyUIWith); } private void UpdateArrowOrWaterSupplyUIWith(IMessage obj) { //Debug.Log("********"); if (transform.GetComponent().gameObjType == CloneObjType.DirectWaterSupply || transform.GetComponent().gameObjType == CloneObjType.RelayWaterSupply || transform.GetComponent().gameObjType == CloneObjType.CouplingWaterSupply || transform.GetComponent().gameObjType == CloneObjType.WaterLineWaterSupply || transform.GetComponent().gameObjType == CloneObjType.SuctionFeedWaterSupply || transform.GetComponent().gameObjType == CloneObjType.HandPumpWaterSupply || transform.GetComponent().gameObjType == CloneObjType.FloatingFirePumpWaterSupply ) { var data = (CameraCmdArgs)obj.Data; orthographicSize -= data.mouseScroll * FireDeployCamera.gameObject.GetComponent().mSpeed; orthographicSize = Mathf.Clamp(orthographicSize, FireDeployCamera.gameObject.GetComponent().minDistance, FireDeployCamera.gameObject.GetComponent().maxDistance); if (data.mouseScroll == 0 && data.distance != 0) { orthographicSize = data.distance; } //Debug.Log(FireDeployCamera.orthographicSize + " / " + orthographicSize + " = " + FireDeployCamera.orthographicSize / orthographicSize); var factor = FireDeployCamera.orthographicSize / orthographicSize; transform.GetComponent().sizeDelta = new Vector2(transform.GetComponent().sizeDelta.x * factor, transform.GetComponent().sizeDelta.y); transform.transform.Find("Background").GetComponent().sizeDelta = new Vector2(transform.transform.Find("Background").GetComponent().sizeDelta.x * factor, transform.transform.Find("Background").GetComponent().sizeDelta.y); transform.transform.Find("Background/Checkmark").GetComponent().sizeDelta = new Vector2(transform.transform.Find("Background/Checkmark").GetComponent().sizeDelta.x * factor, transform.transform.Find("Background/Checkmark").GetComponent().sizeDelta.y); } } // Update is called once per frame void Update () { //视口大小高与视口渲染的顶视图UI高的比例 var factor_y = (FireDeployCamera.orthographicSize * 2) / FireDeployRawImage.GetComponent().sizeDelta.y; //视口大小长与视口渲染的顶视图UI长的比例 var factor_x = (FireDeployCamera.orthographicSize * 2) * FireDeployCamera.aspect / FireDeployRawImage.GetComponent().sizeDelta.x; if (!InputManager.isDargUI)//TODO:判断UI是否拖动 { Vector3 localOffset = FireDeployCamera.transform.InverseTransformPoint(objWorldPos); Vector3 offset = new Vector3(localOffset.x / factor_x, localOffset.y / factor_y, 0); mousePosOnUI = offset; transform.GetComponent().localPosition = mousePosOnUI; } else { mousePosOnUI = transform.GetComponent().localPosition; Vector2 offset = mousePosOnUI; //顶视图相机的局部坐标系中相对于其中心点的偏移量 Vector3 localOffset = new Vector3(offset.x * factor_x, offset.y * factor_y, 0); //鼠标点击在作战部署顶视图上的点映射到世界坐标系中的点 objWorldPos = FireDeployCamera.transform.TransformPoint(localOffset); } if (transform.GetComponent().gameObjType == CloneObjType.DirectWaterSupply || transform.GetComponent().gameObjType == CloneObjType.RelayWaterSupply || transform.GetComponent().gameObjType == CloneObjType.CouplingWaterSupply || transform.GetComponent().gameObjType == CloneObjType.WaterLineWaterSupply || transform.GetComponent().gameObjType == CloneObjType.SuctionFeedWaterSupply || transform.GetComponent().gameObjType == CloneObjType.HandPumpWaterSupply || transform.GetComponent().gameObjType == CloneObjType.FloatingFirePumpWaterSupply ) {//处理私有工具供水类跟随顶视图相机视野缩放而缩放 var factor = orthographicSize / FireDeployCamera.orthographicSize; transform.GetComponent().sizeDelta = new Vector2(transform.GetComponent().sizeDelta.x * factor, transform.GetComponent().sizeDelta.y); transform.transform.Find("Background").GetComponent().sizeDelta = new Vector2(transform.transform.Find("Background").GetComponent().sizeDelta.x * factor, transform.transform.Find("Background").GetComponent().sizeDelta.y); transform.transform.Find("Background/Checkmark").GetComponent().sizeDelta = new Vector2(transform.transform.Find("Background/Checkmark").GetComponent().sizeDelta.x * factor, transform.transform.Find("Background/Checkmark").GetComponent().sizeDelta.y); orthographicSize = FireDeployCamera.orthographicSize; } } }