summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-09-16 20:51:19 +0800
committerchai <chaifix@163.com>2021-09-16 20:51:19 +0800
commitcec37ddb003304a224b804a78479ae46dae58fed (patch)
tree03cb1ebba64cf6c38e9250816a7a4a4d13e36e38 /Assets/Scripts/Unit
parent8b65edb43be0945203633b33d7a62c81ab3f05ce (diff)
+ motion blur
Diffstat (limited to 'Assets/Scripts/Unit')
-rw-r--r--Assets/Scripts/Unit/AI/Actions.meta8
-rw-r--r--Assets/Scripts/Unit/AI/Conditionals.meta8
-rw-r--r--Assets/Scripts/Unit/AnimationData.cs6
-rw-r--r--Assets/Scripts/Unit/Components/UnitEffect.cs47
-rw-r--r--Assets/Scripts/Unit/Components/UnitEffect.cs.meta11
-rw-r--r--Assets/Scripts/Unit/Components/UnitRender.cs17
-rw-r--r--Assets/Scripts/Unit/Controller/PCController.cs13
-rw-r--r--Assets/Scripts/Unit/Effect/UnitCamera.cs2
-rw-r--r--Assets/Scripts/Unit/Events/EventMesh_ImageEffect_MotionBlur.cs17
-rw-r--r--Assets/Scripts/Unit/Events/EventMesh_ImageEffect_MotionBlur.cs.meta11
-rw-r--r--Assets/Scripts/Unit/Events/EventMesh_VisibilityInMainCamera.cs13
-rw-r--r--Assets/Scripts/Unit/Events/EventMesh_VisibilityInMainCamera.cs.meta11
-rw-r--r--Assets/Scripts/Unit/TimelineEventProxy.cs31
-rw-r--r--Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs17
14 files changed, 193 insertions, 19 deletions
diff --git a/Assets/Scripts/Unit/AI/Actions.meta b/Assets/Scripts/Unit/AI/Actions.meta
new file mode 100644
index 00000000..9b4ad463
--- /dev/null
+++ b/Assets/Scripts/Unit/AI/Actions.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 971e9d55b8bc0894eb6a110fb962000b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Unit/AI/Conditionals.meta b/Assets/Scripts/Unit/AI/Conditionals.meta
new file mode 100644
index 00000000..70a86da5
--- /dev/null
+++ b/Assets/Scripts/Unit/AI/Conditionals.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 85b7e0c7ed1d12f42a5178bfbf3d934c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Unit/AnimationData.cs b/Assets/Scripts/Unit/AnimationData.cs
index 784acf05..9af3d51c 100644
--- a/Assets/Scripts/Unit/AnimationData.cs
+++ b/Assets/Scripts/Unit/AnimationData.cs
@@ -437,6 +437,8 @@ public class AnimationData : ScriptableObject
events.Clear();
foreach (var animeEvent in animationEvents)
{
+ if (animeEvent == null)
+ continue;
if(animeEvent.startFrame == frame)
{
events.Add(animeEvent);
@@ -476,6 +478,8 @@ public class AnimationData : ScriptableObject
frames.Clear();
foreach (var animeEvent in animationEvents)
{
+ if (animeEvent == null)
+ continue;
if (!frames.Contains(animeEvent.startFrame))
{
frames.Add(animeEvent.startFrame);
@@ -509,6 +513,8 @@ public class AnimationData : ScriptableObject
{
foreach(var animEvent in animationEvents)
{
+ if (animEvent == null)
+ continue;
if(!AssetDatabase.IsSubAsset(animEvent))
{
AssetDatabase.AddObjectToAsset(animEvent, this);
diff --git a/Assets/Scripts/Unit/Components/UnitEffect.cs b/Assets/Scripts/Unit/Components/UnitEffect.cs
new file mode 100644
index 00000000..9add6513
--- /dev/null
+++ b/Assets/Scripts/Unit/Components/UnitEffect.cs
@@ -0,0 +1,47 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EffectHandle
+{
+ public float lifeTime;
+ public float curTime;
+ public bool markDead;
+}
+
+//Unit后处理效果
+public class UnitEffect : UnitComponent
+{
+ public List<EffectHandle> effects = new List<EffectHandle>();
+ public static GameObject effectPlane;
+
+ public void ShowMotionBlur(float lifetime)
+ {
+ EffectHandle eff = new EffectHandle();
+ eff.lifeTime = lifetime;
+ eff.curTime = 0;
+ eff.markDead = false;
+ effects.Add(eff);
+ effectPlane.gameObject.SetActive(true);
+ }
+
+ public override void OnUpdate()
+ {
+ base.OnUpdate();
+
+ effectPlane.transform.position = UnitManager.Instance.pc.center;
+
+ for(int i = 0; i < effects.Count; ++i)
+ {
+ if (effects[i].markDead)
+ continue;
+ effects[i].curTime += Time.deltaTime;
+ if(effects[i].curTime > effects[i].lifeTime)
+ {
+ effects[i].markDead = true;
+ effectPlane.gameObject.SetActive(false);
+ }
+ }
+ }
+
+}
diff --git a/Assets/Scripts/Unit/Components/UnitEffect.cs.meta b/Assets/Scripts/Unit/Components/UnitEffect.cs.meta
new file mode 100644
index 00000000..f71585b2
--- /dev/null
+++ b/Assets/Scripts/Unit/Components/UnitEffect.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 62163ab86151f004294a831544bb3c39
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Unit/Components/UnitRender.cs b/Assets/Scripts/Unit/Components/UnitRender.cs
index b3fd18c8..435c517d 100644
--- a/Assets/Scripts/Unit/Components/UnitRender.cs
+++ b/Assets/Scripts/Unit/Components/UnitRender.cs
@@ -7,6 +7,23 @@ using UnityEngine;
public class UnitRender : UnitComponent
{
+ public override void Initialize()
+ {
+ base.Initialize();
+ }
+ public void SetVisibilityInMainCamera(bool isVisible)
+ {
+ LayerMask mask = LayerMask.GetMask("PlayerCharacter");
+
+ if(!isVisible)
+ {
+ SceneManager.Instance.mainCamera.cullingMask &= ~mask.value;
+ }
+ else
+ {
+ SceneManager.Instance.mainCamera.cullingMask |= mask.value;
+ }
+ }
}
diff --git a/Assets/Scripts/Unit/Controller/PCController.cs b/Assets/Scripts/Unit/Controller/PCController.cs
index 2294ae62..f3defbd7 100644
--- a/Assets/Scripts/Unit/Controller/PCController.cs
+++ b/Assets/Scripts/Unit/Controller/PCController.cs
@@ -8,7 +8,9 @@ public class PCController : UnitController
{
public static PCController instance;
- private UnitAfterImage unitAfterImage;
+ public UnitAfterImage unitAfterImage;
+
+ public UnitEffect unitEffect;
public override UnitType type { get { return UnitType.PC; } }
@@ -29,13 +31,18 @@ public class PCController : UnitController
unitAfterImage = gameObject.GetOrAddComponent<UnitAfterImage>();
unitAfterImage.Initialize();
- }
+
+ unitEffect = gameObject.GetOrAddComponent<UnitEffect>();
+ unitEffect.Initialize();
+
+ }
public override void Update()
{
base.Update();
unitAfterImage.OnUpdate();
- }
+ unitEffect.OnUpdate();
+ }
public override void OnHit(CollisionInfo info)
{
diff --git a/Assets/Scripts/Unit/Effect/UnitCamera.cs b/Assets/Scripts/Unit/Effect/UnitCamera.cs
index 01194512..90d78730 100644
--- a/Assets/Scripts/Unit/Effect/UnitCamera.cs
+++ b/Assets/Scripts/Unit/Effect/UnitCamera.cs
@@ -4,7 +4,7 @@ using UnityEngine;
// 专门用来渲染player character的相机,用来做特效
[RequireComponent(typeof(Camera))]
-public class UnitCamera : MonoBehaviour
+public class UnitCamera : SingletonMB<UnitCamera>
{
PCController pc { get { return UnitManager.Instance.pc; } }
diff --git a/Assets/Scripts/Unit/Events/EventMesh_ImageEffect_MotionBlur.cs b/Assets/Scripts/Unit/Events/EventMesh_ImageEffect_MotionBlur.cs
new file mode 100644
index 00000000..714d65e5
--- /dev/null
+++ b/Assets/Scripts/Unit/Events/EventMesh_ImageEffect_MotionBlur.cs
@@ -0,0 +1,17 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EventMesh_ImageEffect_MotionBlur : AnimationEventBase
+{
+ public override TimelineEventProxy.EEventType type => TimelineEventProxy.EEventType.EventMesh_ImageEffect_MotionBlur;
+
+ public override string shortName => "M";
+
+ public float lifeTime;
+
+ public float angle;
+
+ public float amount;
+
+}
diff --git a/Assets/Scripts/Unit/Events/EventMesh_ImageEffect_MotionBlur.cs.meta b/Assets/Scripts/Unit/Events/EventMesh_ImageEffect_MotionBlur.cs.meta
new file mode 100644
index 00000000..e8e385f9
--- /dev/null
+++ b/Assets/Scripts/Unit/Events/EventMesh_ImageEffect_MotionBlur.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a75401f0015aa1e4f856979c8aa1dae2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Unit/Events/EventMesh_VisibilityInMainCamera.cs b/Assets/Scripts/Unit/Events/EventMesh_VisibilityInMainCamera.cs
new file mode 100644
index 00000000..cf6e1bc8
--- /dev/null
+++ b/Assets/Scripts/Unit/Events/EventMesh_VisibilityInMainCamera.cs
@@ -0,0 +1,13 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EventMesh_VisibilityInMainCamera : AnimationEventBase
+{
+ public override TimelineEventProxy.EEventType type => TimelineEventProxy.EEventType.EventMesh_VisibilityInMainCamera;
+
+ public override string shortName => "V";
+
+ public bool isVisible;
+
+}
diff --git a/Assets/Scripts/Unit/Events/EventMesh_VisibilityInMainCamera.cs.meta b/Assets/Scripts/Unit/Events/EventMesh_VisibilityInMainCamera.cs.meta
new file mode 100644
index 00000000..eb3e8bf8
--- /dev/null
+++ b/Assets/Scripts/Unit/Events/EventMesh_VisibilityInMainCamera.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a4957372b8a4fd946b86016c20f83750
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Unit/TimelineEventProxy.cs b/Assets/Scripts/Unit/TimelineEventProxy.cs
index 356a7498..9e41e30e 100644
--- a/Assets/Scripts/Unit/TimelineEventProxy.cs
+++ b/Assets/Scripts/Unit/TimelineEventProxy.cs
@@ -48,23 +48,26 @@ public partial class TimelineEventProxy
// 不要序列化枚举值,因为可能会随时更改
public enum EEventType
{
- EventGame_TimeScale, // 缩放时间
-
+ EventGame_TimeScale, // 缩放时间
+
+ EventMesh_ImageEffect_MotionBlur, // 运动模糊
+ EventMesh_ImageEffect_Glitch, // glitch
+ EventMesh_AfterImage, // 角色残像
+ EventMesh_AfterImageStop, // 角色残像停止事件
+ EventMesh_FadeIn, // 角色透明度
+ EventMesh_FadeOut, // 角色透明度
+ EventMesh_Gloss, // 角色泛光
+ EventMesh_VisibilityInMainCamera, // 是否在主相机渲染
+
+ EventUnit_SetPosition, // 设置位置
+ EventUnit_BulletTime, // 子弹时间
+
EventCamera_Zoom, // 相机聚焦
EventCamera_Shake, // 相机晃动
EventCamera_Blur, // 相机模糊
EventCamera_WhiteOut, // 相机白屏
-
- EventUnit_SetPosition, // 设置位置
-
- EventMesh_AfterImage, // 角色残像
- EventMesh_AfterImageStop, // 角色残像停止事件
- EventMesh_FadeIn, // 角色透明度
- EventMesh_FadeOut, // 角色透明度
- EventMesh_Gloss, // 角色泛光
- EventMesh_Blur, // 运动模糊(非后处理)
-
- EventEnv_Dark,
+
+ EventEnv_Dark,
EventEnv_Exposure,
EventUI_Drift, //
@@ -73,8 +76,6 @@ public partial class TimelineEventProxy
EventProjectile, // 发射体
EventEffect, // 特效
EventSound, // 音效
-
- EventBulletTime, // 子弹时间
}
public const int FPS = 30; // timeline 每秒采样30次
diff --git a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs
index a3eef37a..a15d262e 100644
--- a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs
+++ b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs
@@ -160,4 +160,21 @@ public partial class TimelineEventProxy
// 在unitState回调里处理
}
+ void EventMesh_VisibilityInMainCamera(AnimationEventBase animEvent)
+ {
+ EventMesh_VisibilityInMainCamera visible = animEvent as EventMesh_VisibilityInMainCamera;
+ if (visible == null)
+ return;
+ if (owner == null || owner.unitRender == null)
+ return;
+ owner.unitRender.SetVisibilityInMainCamera(visible.isVisible);
+ }
+
+ void EventMesh_ImageEffect_MotionBlur(AnimationEventBase animEvent)
+ {
+ EventMesh_ImageEffect_MotionBlur motionBlur = animEvent as EventMesh_ImageEffect_MotionBlur;
+ if (motionBlur == null)
+ return ;
+ ((PCController)owner).unitEffect.ShowMotionBlur(motionBlur.lifeTime);
+ }
} \ No newline at end of file