Bladeren bron

受伤闪烁+震动

SZAND\msx_2 1 jaar geleden
bovenliggende
commit
4e9b326a9c

+ 78 - 0
ActionTowerDefense/Assets/Resources/Prefab/FX/red.prefab

@@ -0,0 +1,78 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &7021976709591116431
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2752529019334082401}
+  - component: {fileID: 5098820168538723688}
+  - component: {fileID: 454352868677468057}
+  m_Layer: 5
+  m_Name: red
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2752529019334082401
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7021976709591116431}
+  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: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 1920, y: 1080}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5098820168538723688
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7021976709591116431}
+  m_CullTransparentMesh: 1
+--- !u!114 &454352868677468057
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7021976709591116431}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.8301887, g: 0.13252312, b: 0, a: 0.19215687}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1

+ 7 - 0
ActionTowerDefense/Assets/Resources/Prefab/FX/red.prefab.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9c3b104af86784d45bacf5a872189165
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 3 - 2
ActionTowerDefense/Assets/Resources/Prefab/Player.prefab

@@ -845,6 +845,7 @@ MonoBehaviour:
   outline1Mats:
   - {fileID: 2100000, guid: 60af008f6e7aa1549bc707cc9bccad80, type: 2}
   foot: {fileID: 3571941039716665623}
+  ss: {fileID: 0}
   extraRiseGravity: -28.8
   extraFallGravity: -14.4
   canMove: 1
@@ -895,6 +896,7 @@ MonoBehaviour:
   sustainedInjuryTime: 0
   sustainedInjury_IntervalTime: 0
   sustainedInjury_damage: 0
+  heavyDamage: 100
   playerId: 0
   canJump: 1
   canfly: 0
@@ -973,7 +975,6 @@ MonoBehaviour:
   - {x: -1, y: 0, z: 0}
   - {x: -1, y: 0, z: 0}
   - {x: -1, y: 0, z: 0}
-  demonicId: 
   attackState: 0
   attackMoveSpeed: 5
   cacheAttackTime: 0
@@ -1055,8 +1056,8 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   types: 4
-  currentSpirit: -1
   hasSpirits: 0
+  nowSpirit: 0
   maxCards: 3
   ownSpirits: ffffffffffffffffffffffff
   ultimateTimes: 000000000000000000000000

+ 147 - 7
ActionTowerDefense/Assets/Scenes/SampleScene.unity

@@ -6204,7 +6204,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 3490440114689228974}
-  m_RootOrder: 5
+  m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -17035,6 +17035,7 @@ GameObject:
   m_Component:
   - component: {fileID: 1055802830}
   - component: {fileID: 1055802829}
+  - component: {fileID: 1055802832}
   - component: {fileID: 1055802831}
   m_Layer: 0
   m_Name: View
@@ -17195,6 +17196,33 @@ AudioSource:
     m_PreInfinity: 2
     m_PostInfinity: 2
     m_RotationOrder: 4
+--- !u!114 &1055802832
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1055802828}
+  m_Enabled: 0
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 91644f7c339a01b48851e774f303aed2, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  mainCam: {fileID: 519420031}
+  player0Cam: {fileID: 815407867}
+  player1Cam: {fileID: 850878590}
+  isHeavyShake: 0
+  addShakeTime: 0.2
+  heavyShakeLevel: 2
+  heavyShakeFps: 20
+  maxShineSpeed: 0.8
+  onceShakeTime: 0.3
+  shakeLevel: 0.5
+  shakeFps: 10
+  shakeTime: 0
+  redEffect: {fileID: 262847337454929620}
+  minShineSpeed: 0.2
+  maxAlpha: 0.2
 --- !u!1001 &1071998862
 PrefabInstance:
   m_ObjectHideFlags: 0
@@ -17873,7 +17901,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 3490440114689228974}
-  m_RootOrder: 4
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -18337,7 +18365,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 3490440114689228974}
-  m_RootOrder: 6
+  m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -23588,7 +23616,7 @@ Transform:
   - {fileID: 738314641}
   - {fileID: 389289665}
   m_Father: {fileID: 3490440114689228974}
-  m_RootOrder: 3
+  m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1903750609
 GameObject:
@@ -28551,7 +28579,7 @@ RectTransform:
   - {fileID: 1456551981}
   - {fileID: 1789286033}
   m_Father: {fileID: 3490440114689228974}
-  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}
@@ -29744,6 +29772,117 @@ SpriteRenderer:
   m_WasSpriteAssigned: 1
   m_MaskInteraction: 0
   m_SpriteSortPoint: 0
+--- !u!1001 &262847337454929618
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 3490440114689228974}
+    m_Modifications:
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_RootOrder
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 2000
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 1200
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 7021976709591116431, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_Name
+      value: red
+      objectReference: {fileID: 0}
+    - target: {fileID: 7021976709591116431, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+--- !u!224 &262847337454929619 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2752529019334082401, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+  m_PrefabInstance: {fileID: 262847337454929618}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1 &262847337454929620 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 7021976709591116431, guid: 9c3b104af86784d45bacf5a872189165, type: 3}
+  m_PrefabInstance: {fileID: 262847337454929618}
+  m_PrefabAsset: {fileID: 0}
 --- !u!4 &458843120152938282
 Transform:
   m_ObjectHideFlags: 0
@@ -30420,6 +30559,7 @@ RectTransform:
   m_LocalScale: {x: 0, y: 0, z: 0}
   m_ConstrainProportionsScale: 0
   m_Children:
+  - {fileID: 262847337454929619}
   - {fileID: 3490440115155743561}
   - {fileID: 1932370447}
   - {fileID: 3490440114869015111}
@@ -30481,7 +30621,7 @@ Transform:
   - {fileID: 3490440114642113119}
   - {fileID: 3490440114947863751}
   m_Father: {fileID: 3490440114689228974}
-  m_RootOrder: 2
+  m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!114 &3490440114947863748
 MonoBehaviour:
@@ -30631,7 +30771,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 3490440114689228974}
-  m_RootOrder: 0
+  m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}

+ 18 - 0
ActionTowerDefense/Assets/Scripts/MoveCharacter.cs

@@ -17,6 +17,7 @@ public class MoveCharacter : Character
 
     [Header("组件")]
     public Foot foot;
+    private ScreenShake ss;
 
     [Header("额外重力")]
     public float extraRiseGravity = 0; //上升时额外重力加速度
@@ -109,12 +110,16 @@ public class MoveCharacter : Character
     public float sustainedInjury_IntervalTime;              //每次伤害的间隔时间
     public int sustainedInjury_damage;                      //每次造成的伤害
 
+    [Header("受到重伤")]
+    public float heavyDamage;
+
     private void Awake()
     {
         spinee = bodyTrans.GetChild(0).gameObject;
         mesh = spinee.GetComponent<MeshRenderer>();
         mats = mesh.materials;
         origY = transform.position.y;
+        ss = Camera.main.GetComponentInParent<ScreenShake>();
     }
 
     private void Start()
@@ -393,6 +398,19 @@ public class MoveCharacter : Character
                     rb.AddForce(force);
             }
         }
+
+        if (gameObject.layer == 6)  //屏幕红闪+抖动
+        {
+            if (ss == null)
+            {
+                ss = Camera.main.GetComponentInParent<ScreenShake>();
+            }
+            ss.enabled = true;
+            if (isSustainedInjury || damage >= heavyDamage)
+            {
+                ss.HeavyShakeShine();
+            }       
+        }
     }
 
     //受到持续伤害

+ 128 - 0
ActionTowerDefense/Assets/Scripts/ScreenShake.cs

@@ -0,0 +1,128 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class ScreenShake : MonoBehaviour
+{
+	[Header("摄像机")]
+    public Camera mainCam;
+    public Camera player0Cam;
+    public Camera player1Cam;
+	private CameraController cc;
+
+	[Header("受重击/连续受伤时强震强闪")]
+	public bool isHeavyShake;
+	public float addShakeTime;
+	public float heavyShakeLevel;
+	public float heavyShakeFps;
+	public float maxShineSpeed;
+
+	[Header("震动参数")]
+	public float onceShakeTime;         //单次震动时长
+	public float shakeLevel;			//震动幅度
+	public float shakeFps;				//震动帧率
+	private bool isShakeCamera;
+	private bool isRedShine;
+	private float curShakeLevel;
+	private float fps;
+	private float frameTime;
+	private float shakeDelta = 0.005f;
+	public float shakeTime;				//本次震动时长
+
+	[Header("红闪参数")]
+	public GameObject redEffect;
+	private Image red;
+	public float minShineSpeed;
+	public float maxAlpha;
+	private float shineSpeed;
+	private int shineChange;
+
+	void OnEnable()
+	{
+        if (cc == null)
+        {
+			cc = GetComponent<CameraController>();
+        }
+        if (red == null)
+        {
+			red = redEffect.GetComponent<Image>();
+        }
+		redEffect.SetActive(true);
+		isShakeCamera = true;
+		isRedShine = true;
+		shakeTime = onceShakeTime;
+		curShakeLevel = shakeLevel;
+		fps = shakeFps;
+		frameTime = 0.03f;
+		shineChange = 1;
+		shineSpeed = minShineSpeed;
+	}
+
+	void OnDisable()
+	{
+		mainCam.rect = new Rect(0.0f, 0.0f, 1.0f, 1.0f);
+		player0Cam.rect = new Rect(0.0f, 0.0f, 1.0f, 1.0f);
+		player1Cam.rect = new Rect(0.0f, 0.0f, 1.0f, 1.0f);
+		isShakeCamera = false;
+		redEffect.SetActive(false);
+		isRedShine = false;
+		shineSpeed = minShineSpeed;
+		isHeavyShake = false;
+	}
+
+	public void HeavyShakeShine()
+    {
+		shakeTime += addShakeTime;
+		isHeavyShake = true;
+		fps = heavyShakeFps;
+		curShakeLevel = heavyShakeLevel;
+		shineSpeed = maxShineSpeed;
+	}
+
+	// Update is called once per frame
+	void Update()
+	{
+        if (isRedShine)
+        {
+			float a = red.color.a;
+            if (a >= maxAlpha)
+            {
+				shineChange = -1;
+            }
+            if (a <= 0)
+            {
+				shineChange = 1;
+            }
+			a += shineChange * shineSpeed * Time.deltaTime;
+			Color r = red.color;
+			r.a = a;
+			red.color = r;
+        }
+
+		if (isShakeCamera)
+		{
+			shakeTime -= Time.deltaTime;
+			if (shakeTime <= 0)
+			{
+				enabled = false;
+			}
+
+			frameTime += Time.deltaTime;
+			if (frameTime > 1.0 / fps)
+			{
+				frameTime = 0;
+				if (cc.isSplit)
+				{
+					player0Cam.rect = new Rect(shakeDelta * (-1.0f + curShakeLevel * Random.value), shakeDelta * (-1.0f + curShakeLevel * Random.value), 1.0f, 1.0f);
+					player1Cam.rect = new Rect(shakeDelta * (-1.0f + curShakeLevel * Random.value), shakeDelta * (-1.0f + curShakeLevel * Random.value), 1.0f, 1.0f);
+				}
+				else
+				{
+					mainCam.rect = new Rect(shakeDelta * (-1.0f + curShakeLevel * Random.value), shakeDelta * (-1.0f + curShakeLevel * Random.value), 1.0f, 1.0f);
+				}
+			}
+		}
+	}
+
+}

+ 11 - 0
ActionTowerDefense/Assets/Scripts/ScreenShake.cs.meta

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