Void_F 8 月之前
父节点
当前提交
05a7be7871

+ 121 - 0
Assets/ModelCameraCtrl.cs

@@ -0,0 +1,121 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.EventSystems;
+
+public class ModelCameraCtrl : MonoBehaviour
+{
+    public static ModelCameraCtrl _Instance;
+
+    public Camera _camera;
+
+    public float smoothSpeed = 5f; // 摄像头平滑移动的速度
+    public float scrollSensitivity = 65f; // 鼠标滚轮的灵敏度
+    public float rotateSpeed =3f;
+    public float translateSpeed = 0.8f;
+    public float minDistance = 5f; // 摄像头与目标对象的最小距离
+    public float maxDistance = 50f; // 摄像头与目标对象的最大距离
+
+    public float currentDistance; // 当前摄像头与目标对象的距离
+    private Vector3 offset; // 摄像头与目标对象的偏移量
+    private Vector3 velocity = Vector3.zero; // 摄像头移动的速度
+
+    public float rotateYAngle = 0.0f;
+    public float rotateXAngle = 0.0f;
+
+    bool isRotate = false;
+
+    bool onUI = false;
+
+    private void Awake()
+    {
+        _Instance = this;
+    }
+
+    private void Start()
+    {
+        // 初始化当前距离为初始偏移量的距离
+        currentDistance = Vector3.Distance(_camera.transform.position, this.transform.position);
+        // 确保初始距离在允许的范围内
+        currentDistance = Mathf.Clamp(currentDistance, minDistance, maxDistance);
+
+        offset = _camera.transform.position - this.transform.position;
+    }
+
+    public void SetCameraPos(Transform pos,float distance)
+    {
+        currentDistance = distance;
+        this.transform.position = pos.position;
+    }
+
+    void LateUpdate()
+    {
+        onUI = false;
+        if (IsPointerOverUIElement()) onUI = true;
+
+        // 鼠标滚轮控制摄像头远近
+        if (Input.GetAxis("Mouse ScrollWheel") != 0 && onUI)
+        {
+            // 更新当前距离
+            currentDistance -= Input.GetAxis("Mouse ScrollWheel") * scrollSensitivity;
+            // 确保距离在允许的范围内
+            currentDistance = Mathf.Clamp(currentDistance, minDistance, maxDistance);
+
+
+            //this.GetComponent<DepthFog>().Height = 400000 / currentDistance;
+        }
+
+        translateSpeed = currentDistance / 600f;
+
+        scrollSensitivity = currentDistance / 16.0f * currentDistance / 16.0f;
+
+        scrollSensitivity = Mathf.Clamp(scrollSensitivity, 10, 4000);
+
+        if (Input.GetMouseButton(0)&& onUI)
+        {
+            rotateXAngle -= Input.GetAxis("Mouse Y") * rotateSpeed;
+            rotateYAngle += Input.GetAxis("Mouse X") * rotateSpeed;
+            isRotate = true;
+        }
+        else
+        {
+            isRotate = false;
+        }
+
+        if (isRotate)
+        {
+            Blink();
+        }
+        else
+        {
+            // 计算目标位置
+            Vector3 targetPosition = this.transform.position + Quaternion.Euler(new Vector3(rotateXAngle, rotateYAngle, 0)) *
+                offset.normalized * currentDistance;
+
+            // 摄像头平滑移动到目标位置
+            _camera.transform.position = Vector3.Lerp(_camera.transform.position, targetPosition, Time.deltaTime * smoothSpeed);
+        }
+    }
+
+    private bool IsPointerOverUIElement()
+    {
+        // 检查当前鼠标位置是否在 UI 上
+        return EventSystem.current.IsPointerOverGameObject();
+    }
+
+    public void Blink()
+    {
+        // 计算目标位置
+        Vector3 targetPosition = this.transform.position +
+                                 Quaternion.Euler(new Vector3(rotateXAngle, rotateYAngle, 0)) * offset.normalized *
+                                 currentDistance;
+
+        // 摄像头平滑移动到目标位置
+        _camera.transform.position = targetPosition;
+
+        //摄像头朝向目标对象
+        _camera.transform.transform.rotation =
+            Quaternion.LookRotation(this.transform.position - _camera.transform.position, Vector3.up);
+    }
+}

+ 11 - 0
Assets/ModelCameraCtrl.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 26171783b39c2434bb957b835bb63c8a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 40 - 0
Assets/ModelRT.renderTexture

@@ -0,0 +1,40 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!84 &8400000
+RenderTexture:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: ModelRT
+  m_ImageContentsHash:
+    serializedVersion: 2
+    Hash: 00000000000000000000000000000000
+  m_ForcedFallbackFormat: 4
+  m_DownscaleFallback: 0
+  m_IsAlphaChannelOptional: 0
+  serializedVersion: 5
+  m_Width: 1920
+  m_Height: 1080
+  m_AntiAliasing: 8
+  m_MipCount: -1
+  m_DepthStencilFormat: 94
+  m_ColorFormat: 8
+  m_MipMap: 0
+  m_GenerateMips: 1
+  m_SRGB: 0
+  m_UseDynamicScale: 0
+  m_BindMS: 0
+  m_EnableCompatibleFormat: 1
+  m_EnableRandomWrite: 0
+  m_TextureSettings:
+    serializedVersion: 2
+    m_FilterMode: 1
+    m_Aniso: 0
+    m_MipBias: 0
+    m_WrapU: 1
+    m_WrapV: 1
+    m_WrapW: 1
+  m_Dimension: 2
+  m_VolumeDepth: 1
+  m_ShadowSamplingMode: 2

+ 8 - 0
Assets/ModelRT.renderTexture.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 96195a920898eee489163081a4d74cda
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 8400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 85 - 11
Assets/Prefabs/UI/3D/GCZL.prefab

@@ -122,7 +122,7 @@ RectTransform:
   - {fileID: 3947806961304334158}
   - {fileID: 5507312291210941847}
   m_Father: {fileID: 4452380874907860040}
-  m_RootOrder: 2
+  m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -669,7 +669,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 4051474671842082500}
-  m_RootOrder: 2
+  m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -752,7 +752,7 @@ RectTransform:
   m_Children:
   - {fileID: 8672777295082025731}
   m_Father: {fileID: 4051474671842082500}
-  m_RootOrder: 4
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -2011,8 +2011,8 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 4452380875134963771}
-  - {fileID: 4051474671842082500}
   - {fileID: 3724357344709411697}
+  - {fileID: 4051474671842082500}
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -2650,7 +2650,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 4051474671842082500}
-  m_RootOrder: 1
+  m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -2727,7 +2727,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 4051474671842082500}
-  m_RootOrder: 3
+  m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 1, y: 1}
   m_AnchorMax: {x: 1, y: 1}
@@ -2985,7 +2985,7 @@ RectTransform:
   m_Children:
   - {fileID: 3546441126368806988}
   m_Father: {fileID: 4051474671842082500}
-  m_RootOrder: 5
+  m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -3280,7 +3280,7 @@ RectTransform:
   m_Children:
   - {fileID: 2241393892325574985}
   m_Father: {fileID: 4051474671842082500}
-  m_RootOrder: 7
+  m_RootOrder: 8
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -3415,7 +3415,7 @@ RectTransform:
   m_Children:
   - {fileID: 1312313767543932187}
   m_Father: {fileID: 4051474671842082500}
-  m_RootOrder: 6
+  m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -3547,6 +3547,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 145801703655066786}
+  - {fileID: 472130677956764762}
   - {fileID: 6664213581623212319}
   - {fileID: 4135238570885905939}
   - {fileID: 8646700386312987131}
@@ -3556,7 +3557,7 @@ RectTransform:
   - {fileID: 5521240595501243600}
   - {fileID: 7303660601285658013}
   m_Father: {fileID: 4452380874907860040}
-  m_RootOrder: 1
+  m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -3710,7 +3711,7 @@ RectTransform:
   m_Children:
   - {fileID: 1419633988613616756}
   m_Father: {fileID: 4051474671842082500}
-  m_RootOrder: 8
+  m_RootOrder: 9
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -3891,6 +3892,79 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u7F16\u7801:"
+--- !u!1 &7312901906956284535
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 472130677956764762}
+  - component: {fileID: 2593454755016570649}
+  - component: {fileID: 715144805002976954}
+  m_Layer: 5
+  m_Name: RawImage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &472130677956764762
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7312901906956284535}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 4051474671842082500}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 708, y: -400}
+  m_SizeDelta: {x: 1376, y: 696}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2593454755016570649
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7312901906956284535}
+  m_CullTransparentMesh: 1
+--- !u!114 &715144805002976954
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7312901906956284535}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Texture: {fileID: 8400000, guid: 96195a920898eee489163081a4d74cda, type: 2}
+  m_UVRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
 --- !u!1 &7431969402583016966
 GameObject:
   m_ObjectHideFlags: 0

文件差异内容过多而无法显示
+ 269 - 46
Assets/Scene 1.unity


+ 2 - 0
Assets/Scripts/StaticImportant.cs

@@ -185,6 +185,7 @@ public class StaticImportant : MonoBehaviour
             birdCamera.rotateYAngle = rotateYAngle;
             birdCamera.Blink();
         }
+        ModelCameraCtrl._Instance.SetCameraPos(birdCamera.target,targetDistance);
     }
 
     public void SetCameraToCenter(Vector3 centerPos, float distance,Vector2 rota)
@@ -222,6 +223,7 @@ public class StaticImportant : MonoBehaviour
             for (int i = 0; i < objs.Length; i++)
             {
                 GameObject insObj = Instantiate(objs[i], this.transform);
+                insObj.layer = 9;
                 models.Add(insObj);
                 yield return wait;
             }

+ 77 - 5
Assets/Scripts/UI/UIView/3D/GCZLLayer.cs

@@ -1,3 +1,4 @@
+using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
@@ -22,6 +23,53 @@ public class GCZLLayer : MonoBehaviour
 
     private GameObject lastClassBtn;
     private int currentClass = -99;
+
+    private GameObject InfoPanel;
+    private Button InfoExitButton;
+    private Button Info_DetailButton;
+    private Text InfoTitleText;
+    private Text InfoClassText;
+    private Text InfoNoText;
+    private Text InfoDayText;
+
+    private GameObject DetailPanel;
+    private Button DetailExitButton;
+    private Text DetailTitleText;
+
+    private LayerUnitData currentData;
+    
+    private void Awake()
+    {
+        InfoPanel = this.transform.Find("InfoPanel").gameObject;
+        InfoTitleText = InfoPanel.transform.Find("Title").GetComponent<Text>();
+        InfoClassText= InfoPanel.transform.Find("Class").GetComponent<Text>();
+        InfoNoText= InfoPanel.transform.Find("No").GetComponent<Text>();
+        InfoDayText= InfoPanel.transform.Find("Day").GetComponent<Text>();
+        InfoExitButton = InfoPanel.transform.Find("CloseButton").GetComponent<Button>();
+        InfoExitButton.onClick.AddListener(() =>
+        {
+            InfoPanel.SetActive(false);
+        });
+        Info_DetailButton = InfoPanel.transform.Find("MoreButton").GetComponent<Button>();
+        Info_DetailButton.onClick.AddListener(() =>
+        {
+            DetailTitleText.text = currentData.name;
+            DetailPanel.SetActive(true);
+        });
+
+        DetailPanel = this.transform.Find("DetailPanel").gameObject;
+        DetailTitleText = DetailPanel.transform.Find("Title").GetComponent<Text>();
+        DetailExitButton = DetailPanel.transform.Find("CloseButton").GetComponent<Button>();
+        DetailExitButton.onClick.AddListener(() =>
+        {
+            DetailPanel.SetActive(false);
+        });
+
+        InfoPanel.SetActive(false);
+        DetailPanel.SetActive(false);
+
+    }
+
     // Start is called before the first frame update
     async void Start()
     {
@@ -74,13 +122,25 @@ public class GCZLLayer : MonoBehaviour
                     GameObject obj = Instantiate(informationPrefab);
                     string realName = GlobalData.layerUnitDatas[i].name;
                     string priName = GlobalData.layerUnitDatas[i].name_pri;
+                    string className = GlobalData.layerUnitDatas[i].GetTypeName();
                     obj.transform.SetParent(informationContent);
                     obj.transform.Find("Name").GetComponentInChildren<Text>().text = realName;
+                    obj.transform.Find("Class").GetComponentInChildren<Text>().text = className;
+                    //todo
+                    obj.transform.Find("No").GetComponentInChildren<Text>().text = "未知";
+                    obj.transform.Find("Day").GetComponentInChildren<Text>().text = "近期";
+
                     obj.transform.localScale = Vector3.one;
                     informations.Add(obj);
+                    int dataIndex = i;
+
                     obj.GetComponent<Button>().onClick.AddListener(() =>
                     {
+                        
+                        currentData = GlobalData.layerUnitDatas[dataIndex];
                         StaticLod.instance.OnFoucusStatic(priName);
+                        ShowInfoPanelData();
+
                     }); 
                 }
             }
@@ -93,13 +153,22 @@ public class GCZLLayer : MonoBehaviour
                     GameObject obj = Instantiate(informationPrefab);
                     string realName = GlobalData.layerUnitDatas[i].name;
                     string priName = GlobalData.layerUnitDatas[i].name_pri;
+                    string className = GlobalData.layerUnitDatas[i].GetTypeName();
                     obj.transform.SetParent(informationContent);
                     obj.transform.Find("Name").GetComponentInChildren<Text>().text = realName;
+                    obj.transform.Find("Class").GetComponentInChildren<Text>().text = className;
+                    //todo
+                    obj.transform.Find("No").GetComponentInChildren<Text>().text = "未知";
+                    obj.transform.Find("Day").GetComponentInChildren<Text>().text = "近期";
+
                     obj.transform.localScale = Vector3.one;
                     informations.Add(obj);
+                    int dataIndex = i;
                     obj.GetComponent<Button>().onClick.AddListener(() =>
                     {
+                        currentData = GlobalData.layerUnitDatas[dataIndex];
                         StaticLod.instance.OnFoucusStatic(priName);
+                        ShowInfoPanelData();
                     });
                 }
             }
@@ -115,10 +184,13 @@ public class GCZLLayer : MonoBehaviour
         });
     }
 
-
-    // Update is called once per frame
-    void Update()
+    public void ShowInfoPanelData()
     {
-        
-    }
+        InfoTitleText.text = currentData.name;
+        InfoClassText.text = currentData.GetTypeName();
+        //todo
+        InfoNoText.text = "未知";
+        InfoDayText.text = "近期";
+        InfoPanel.SetActive(true);
+    }    
 }

+ 27 - 0
Assets/Scripts/UI/UIView/YZT/YZTLayer.cs

@@ -40,6 +40,33 @@ public class LayerUnitData
     public string name_pri;
     public string text1;
     public string text2;
+
+    public string GetTypeName()
+    {
+        string result = "";
+        switch (type)
+        {
+            case LayerUnitType.ZZ:
+                result = "闸站";
+                break;
+            case LayerUnitType.BZ:
+                result = "泵站";
+                break;
+            case LayerUnitType.NC:
+                result = "农场";
+                break;
+            case LayerUnitType.QXZ:
+                result = "气象站";
+                break;
+            case LayerUnitType.JK:
+                result = "监控";
+                break;
+            case LayerUnitType.QT:
+                result = "其他";
+                break;
+        }
+        return result;
+    }
 }
 
 [System.Serializable]

部分文件因为文件数量过多而无法显示