summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Camera
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Camera')
-rw-r--r--Assets/Scripts/Camera/LensEffectHandler.cs35
-rw-r--r--Assets/Scripts/Camera/LensEffectHandler.cs.meta11
-rw-r--r--Assets/Scripts/Camera/MainCamera.cs153
-rw-r--r--Assets/Scripts/Camera/MainCamera.cs.meta11
-rw-r--r--Assets/Scripts/Camera/MainCameraDebug.cs10
-rw-r--r--Assets/Scripts/Camera/MainCameraDebug.cs.meta11
6 files changed, 231 insertions, 0 deletions
diff --git a/Assets/Scripts/Camera/LensEffectHandler.cs b/Assets/Scripts/Camera/LensEffectHandler.cs
new file mode 100644
index 00000000..63114535
--- /dev/null
+++ b/Assets/Scripts/Camera/LensEffectHandler.cs
@@ -0,0 +1,35 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+[RequireComponent(typeof(Camera))]
+public class LensEffectHandler : MonoBehaviour
+{
+ Camera m_Camera;
+
+ public delegate void RenderEventHandler();
+ public event RenderEventHandler onPreCull;
+ public event RenderEventHandler onPreRender;
+ public event RenderEventHandler onPostRender;
+
+ private void OnEable()
+ {
+ m_Camera = GetComponent<Camera>();
+ }
+
+ private void OnPreCull()
+ {
+ onPreCull?.Invoke();
+ }
+
+ private void OnPreRender()
+ {
+ onPreRender?.Invoke();
+ }
+
+ private void OnPostRender()
+ {
+ onPostRender?.Invoke();
+ }
+
+}
diff --git a/Assets/Scripts/Camera/LensEffectHandler.cs.meta b/Assets/Scripts/Camera/LensEffectHandler.cs.meta
new file mode 100644
index 00000000..cf914200
--- /dev/null
+++ b/Assets/Scripts/Camera/LensEffectHandler.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 058dffdf2041d7d43902a7c301296bb2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Camera/MainCamera.cs b/Assets/Scripts/Camera/MainCamera.cs
new file mode 100644
index 00000000..f439cf22
--- /dev/null
+++ b/Assets/Scripts/Camera/MainCamera.cs
@@ -0,0 +1,153 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// 主相机
+[ExecuteAlways]
+public class MainCamera : SingletonMB<MainCamera>
+{
+ #region inspector
+ [Serializable]
+ public struct Region
+ {
+ [SerializeField] public float l;
+ [SerializeField] public float r;
+ [SerializeField] public float t;
+ [SerializeField] public float b;
+ }
+
+ public new Camera camera { get; private set; }
+
+ public Vector3 offset = Vector3.zero;
+
+ [SerializeField] private float z;
+
+ [SerializeField] private Region region;
+
+ [SerializeField] private float moveSpeed;
+
+ [SerializeField] private AnimationCurve speedCurve;
+
+ [SerializeField] private float threshold;
+ #endregion
+
+ private LensEffectHandler m_LensEffectHandler;
+ public LensEffectHandler lensEffectHandler
+ {
+ get
+ {
+ if (m_LensEffectHandler == null)
+ m_LensEffectHandler = this.gameObject.GetOrAddComponent<LensEffectHandler>();
+ return m_LensEffectHandler;
+ }
+ }
+
+ private Vector2 position2D
+ {
+ get
+ {
+ return transform.position;
+ }
+ set
+ {
+ transform.position = new Vector3(value.x, value.y, transform.position.z);
+ }
+ }
+
+ private Vector3 position
+ {
+ get
+ {
+ return transform.position;
+ }
+ set
+ {
+ transform.position = value;
+ }
+ }
+
+ protected override void Awake()
+ {
+ base.Awake();
+ camera = gameObject.GetComponent<Camera>();
+ }
+
+ private void Start()
+ {
+ Vector3 pos = transform.position;
+ pos.z = this.z;
+ transform.position = pos;
+
+ Quaternion rot = Quaternion.LookRotation(Vector3.forward);
+ transform.rotation = rot;
+ }
+
+ void FollowPlayerCharacter()
+ {
+ if (UnitManager.Instance == null || UnitManager.Instance.pc == null)
+ return;
+
+ Region region = this.region;
+
+ //if (!UnitManager.Instance.pc.isTowardRight)
+ //{
+ // region.l = -this.region.r;
+ // region.r = -this.region.l;
+ //}
+
+ Vector3 camPos = position;
+
+ Vector3 worldPos = UnitManager.Instance.pc.transform.position + offset;
+
+ Vector2 viewPos = ((Vector2)camera.WorldToViewportPoint(worldPos)) * 2 - Vector2.one;
+
+ Vector3 dir = (worldPos - camPos).normalized;
+ float dest = (worldPos - camPos).magnitude;
+ float curve = speedCurve.Evaluate((threshold - Mathf.Clamp(dest, 0f, threshold)) / threshold);
+ Vector3 move = curve * dir * moveSpeed * Time.deltaTime;
+
+ if (IsInRegion(viewPos, region))
+ {
+ if(!IsInCenter(viewPos))
+ {
+ position2D = camPos + move;
+ if((worldPos - position).magnitude <= 0.1f)
+ {
+ position2D = worldPos;
+ }
+ }
+ return;
+ }
+ position2D = camPos + move;
+ if ((worldPos - position).magnitude <= 0.1f)
+ {
+ position2D = worldPos;
+ }
+ }
+
+ bool IsInRegion(Vector2 p, Region region)
+ {
+ return p.x > region.l
+ && p.x < region.r
+ && p.y > region.b
+ && p.y < region.t;
+ }
+
+ bool IsInCenter(Vector2 p)
+ {
+ return p.x == (region.l + region.r) / 2 && p.y == (region.t + region.b) / 2;
+ }
+
+ void Update()
+ {
+ FollowPlayerCharacter();
+ }
+
+ public void OnGUI()
+ {
+ if(MainCameraDebug.OnGUIHandlers != null)
+ MainCameraDebug.OnGUIHandlers.Invoke();
+ }
+
+} \ No newline at end of file
diff --git a/Assets/Scripts/Camera/MainCamera.cs.meta b/Assets/Scripts/Camera/MainCamera.cs.meta
new file mode 100644
index 00000000..1ad6678e
--- /dev/null
+++ b/Assets/Scripts/Camera/MainCamera.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 68da209687f0dcc49967a423b26c204c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Camera/MainCameraDebug.cs b/Assets/Scripts/Camera/MainCameraDebug.cs
new file mode 100644
index 00000000..7a8382ee
--- /dev/null
+++ b/Assets/Scripts/Camera/MainCameraDebug.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class MainCameraDebug
+{
+ public static Action OnGUIHandlers;
+
+}
diff --git a/Assets/Scripts/Camera/MainCameraDebug.cs.meta b/Assets/Scripts/Camera/MainCameraDebug.cs.meta
new file mode 100644
index 00000000..71e9cdb8
--- /dev/null
+++ b/Assets/Scripts/Camera/MainCameraDebug.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 31f8e21379e822447b55a74c799469f6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: