From d02d8779f4c36d4aec58a5d2d460f482894af3b8 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 4 Nov 2020 08:59:59 +0800 Subject: *after image --- Assets/Scripts/Avatar/Abilities/AttackAbility.cs | 2 +- Assets/Scripts/Avatar/Actions/ActionEffects.meta | 8 - Assets/Scripts/Effects/AfterImage.meta | 8 + Assets/Scripts/Effects/AfterImage/AfterImage.cs | 79 +++++ .../Scripts/Effects/AfterImage/AfterImage.cs.meta | 11 + .../Scripts/Effects/AfterImage/AfterImagePool.cs | 50 +++ .../Effects/AfterImage/AfterImagePool.cs.meta | 11 + Assets/Scripts/Effects/AfterImageEffects.cs | 344 ++++++++++----------- Assets/Scripts/Physics/PhysicsBody.cs | 3 +- Assets/Scripts/Props.meta | 8 - 10 files changed, 334 insertions(+), 190 deletions(-) delete mode 100644 Assets/Scripts/Avatar/Actions/ActionEffects.meta create mode 100644 Assets/Scripts/Effects/AfterImage.meta create mode 100644 Assets/Scripts/Effects/AfterImage/AfterImage.cs create mode 100644 Assets/Scripts/Effects/AfterImage/AfterImage.cs.meta create mode 100644 Assets/Scripts/Effects/AfterImage/AfterImagePool.cs create mode 100644 Assets/Scripts/Effects/AfterImage/AfterImagePool.cs.meta delete mode 100644 Assets/Scripts/Props.meta (limited to 'Assets/Scripts') diff --git a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs index c6e4d21e..57e9541b 100644 --- a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs +++ b/Assets/Scripts/Avatar/Abilities/AttackAbility.cs @@ -105,7 +105,7 @@ public class AttackAbility : AbilityBase hitInfo.AddRecord(avatar); Debug.Log("hit " + avatar.Name); PhysicsBody body = avatar.Body; - body.SetLocalForce(new Vector3(1000, 5000, 0)); + body.SetLocalForce(new Vector3(-1000, 5000, 0)); if(avatar is ArmorSoldierScript) { ArmorSoldierScript solider = avatar as ArmorSoldierScript; diff --git a/Assets/Scripts/Avatar/Actions/ActionEffects.meta b/Assets/Scripts/Avatar/Actions/ActionEffects.meta deleted file mode 100644 index 17a426dd..00000000 --- a/Assets/Scripts/Avatar/Actions/ActionEffects.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0b5ccfefc2e6b104a8566f4da9a16c5f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Effects/AfterImage.meta b/Assets/Scripts/Effects/AfterImage.meta new file mode 100644 index 00000000..4d4c324a --- /dev/null +++ b/Assets/Scripts/Effects/AfterImage.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d16ac0401b1e91a4fa81ceec42b004d8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Effects/AfterImage/AfterImage.cs b/Assets/Scripts/Effects/AfterImage/AfterImage.cs new file mode 100644 index 00000000..1e1d0393 --- /dev/null +++ b/Assets/Scripts/Effects/AfterImage/AfterImage.cs @@ -0,0 +1,79 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class AfterImage : MonoBehaviour +{ + public Animator myAnimator; + //public CharacterControl myCharacterControl; + public Renderer myRenderer; + + public Animator targetAnimator; + public GameObject targetObject; + + public float time; + public float intensity; + public float pow; + public float timeMax = 45; + + public bool active; + + // Use this for initialization + void Start() + { + //targetObject = + } + + // Update is called once per frame + void Update() + { + if (time > 0) + { + time--; + active = true; + intensity = (time / timeMax) * 10 * pow; + UpdateRenderer(); + } + else + { + active = false; + intensity = 0; + } + } + + void UpdateRenderer() + { + myRenderer.material.SetFloat("_Intensity", intensity); + myRenderer.material.SetFloat("_MKGlowPower", intensity); + } + + public void Activate() + { + active = true; + transform.position = targetObject.transform.position; + transform.localScale = targetObject.transform.lossyScale; + transform.rotation = targetObject.transform.rotation; + + myAnimator.Play(targetAnimator.GetCurrentAnimatorStateInfo(0).shortNameHash, 0, targetAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime); + //myAnimator.Play(myCharacterControl.animator.GetCurrentAnimatorStateInfo(0).normalizedTime); + //myAnimator.no + + //foreach (AnimatorControllerParameter param in targetAnimator.parameters) + //{ + // if (param.type == AnimatorControllerParameterType.Float) + // { + // myAnimator.SetFloat(param.name, targetAnimator.GetFloat(param.name)); + // } + // if (param.type == AnimatorControllerParameterType.Int) + // { + // myAnimator.SetInteger(param.name, targetAnimator.GetInteger(param.name)); + // } + //} + + myAnimator.speed = 0.02f; + myAnimator.Update(1/60f); + time = timeMax + 1; + Update(); + } + +} \ No newline at end of file diff --git a/Assets/Scripts/Effects/AfterImage/AfterImage.cs.meta b/Assets/Scripts/Effects/AfterImage/AfterImage.cs.meta new file mode 100644 index 00000000..cd1fd19a --- /dev/null +++ b/Assets/Scripts/Effects/AfterImage/AfterImage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5912e1e5f1e32ea429bf6a9ec2d11a0f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Effects/AfterImage/AfterImagePool.cs b/Assets/Scripts/Effects/AfterImage/AfterImagePool.cs new file mode 100644 index 00000000..f9d033fd --- /dev/null +++ b/Assets/Scripts/Effects/AfterImage/AfterImagePool.cs @@ -0,0 +1,50 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class AfterImagePool : MonoBehaviour +{ + + //public CharacterControl myCharacterControl; + public GameObject targetObject; //Set these manually to the character object you're copying + public Animator targetAnimator; //Set these manually to the character object you're copying + public GameObject prefab; //This is the prefab you made in the scene. It's a parent transform with an animator and AfterImage script on it, with Armature and SkinnedMeshRenderer children + public int poolSize = 10; + public List afterImages; + + public int interval = 10; + + public int time = 0; + + // Use this for initialization + void Start() + { + //myCharacterControl = transform.root.GetComponent(); + //Debug.Log("START AFTER IMAGE POOL"); + afterImages = new List(poolSize); + for (int i = 0; i < poolSize; i++) + { + GameObject nextAfterImage = Instantiate(prefab); + afterImages.Add(nextAfterImage.GetComponent()); + + nextAfterImage.GetComponent().targetObject = targetObject; //Game Object Target + nextAfterImage.GetComponent().targetAnimator = targetAnimator; //Animator Target + } + } + + // Update is called once per frame + void Update() + { + //if (CitadelDeep.hitPause > 0 || CitadelDeep.debugPause) { return; } + time++; + if (time > interval) { time = 0; AddAfterImage(); } + } + + void AddAfterImage() + { + for (int i = 0; i < poolSize; i++) + { + if (!afterImages[i].active) { afterImages[i].Activate(); break; } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Effects/AfterImage/AfterImagePool.cs.meta b/Assets/Scripts/Effects/AfterImage/AfterImagePool.cs.meta new file mode 100644 index 00000000..78d84907 --- /dev/null +++ b/Assets/Scripts/Effects/AfterImage/AfterImagePool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4aaea939b0abb3c4eb78963aedf4b2f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Effects/AfterImageEffects.cs b/Assets/Scripts/Effects/AfterImageEffects.cs index ba269279..e6dd57e7 100644 --- a/Assets/Scripts/Effects/AfterImageEffects.cs +++ b/Assets/Scripts/Effects/AfterImageEffects.cs @@ -1,186 +1,186 @@ - using UnityEngine; -using System.Collections; -using System.Collections.Generic; -/// -/// 残影特效 -/// -public class AfterImageEffects : MonoBehaviour -{ +// using UnityEngine; +//using System.Collections; +//using System.Collections.Generic; +///// +///// 残影特效 +///// +//public class AfterImageEffects : MonoBehaviour +//{ - public Material[] materials = new Material[8]; +// public Material[] materials = new Material[8]; - //开启残影 - public bool _OpenAfterImage; +// //开启残影 +// public bool _OpenAfterImage; - //残影颜色 - public Color _AfterImageColor = Color.black; - //残影的生存时间 - public float _SurvivalTime = 1; - //生成残影的间隔时间 - public float _IntervalTime = 0.2f; - private float _Time = 0; - //残影初始透明度 - [Range(0.1f, 1.0f)] - public float _InitialAlpha = 1.0f; +// //残影颜色 +// public Color _AfterImageColor = Color.black; +// //残影的生存时间 +// public float _SurvivalTime = 1; +// //生成残影的间隔时间 +// public float _IntervalTime = 0.2f; +// private float _Time = 0; +// //残影初始透明度 +// [Range(0.1f, 1.0f)] +// public float _InitialAlpha = 1.0f; - private List _AfterImageList; - private SkinnedMeshRenderer _SkinnedMeshRenderer; +// private List _AfterImageList; +// private SkinnedMeshRenderer _SkinnedMeshRenderer; - void Awake() - { - _AfterImageList = new List(); - _SkinnedMeshRenderer = GetComponent(); - } - void Update() - { - if (_OpenAfterImage && _AfterImageList != null) - { - if (_SkinnedMeshRenderer == null) - { - _OpenAfterImage = false; - return; - } +// void Awake() +// { +// _AfterImageList = new List(); +// _SkinnedMeshRenderer = GetComponent(); +// } +// void Update() +// { +// if (_OpenAfterImage && _AfterImageList != null) +// { +// if (_SkinnedMeshRenderer == null) +// { +// _OpenAfterImage = false; +// return; +// } - _Time += Time.deltaTime; - //生成残影 - CreateAfterImage(); - //刷新残影 - UpdateAfterImage(); - } - } - /// - /// 生成残影 - /// - void CreateAfterImage() - { - //生成残影 - if (_Time >= _IntervalTime) - { - _Time = 0; +// _Time += Time.deltaTime; +// //生成残影 +// CreateAfterImage(); +// //刷新残影 +// UpdateAfterImage(); +// } +// } +// /// +// /// 生成残影 +// /// +// void CreateAfterImage() +// { +// //生成残影 +// if (_Time >= _IntervalTime) +// { +// _Time = 0; - Mesh mesh = new Mesh(); - _SkinnedMeshRenderer.BakeMesh(mesh); +// Mesh mesh = new Mesh(); +// _SkinnedMeshRenderer.BakeMesh(mesh); - Material material = new Material(_SkinnedMeshRenderer.material); - // SetMaterialRenderingMode(material, RenderingMode.Fade); +// Material material = new Material(_SkinnedMeshRenderer.material); +// // SetMaterialRenderingMode(material, RenderingMode.Fade); - _AfterImageList.Add(new AfterImage( - mesh, - material, - transform.localToWorldMatrix, - _InitialAlpha, - Time.realtimeSinceStartup, - _SurvivalTime)); - } - } - /// - /// 刷新残影 - /// - void UpdateAfterImage() - { - //刷新残影,根据生存时间销毁已过时的残影 - for (int i = 0; i < _AfterImageList.Count; i++) - { - float _PassingTime = Time.realtimeSinceStartup - _AfterImageList[i]._StartTime; +// _AfterImageList.Add(new AfterImage( +// mesh, +// material, +// transform.localToWorldMatrix, +// _InitialAlpha, +// Time.realtimeSinceStartup, +// _SurvivalTime)); +// } +// } +// /// +// /// 刷新残影 +// /// +// void UpdateAfterImage() +// { +// //刷新残影,根据生存时间销毁已过时的残影 +// for (int i = 0; i < _AfterImageList.Count; i++) +// { +// float _PassingTime = Time.realtimeSinceStartup - _AfterImageList[i]._StartTime; - if (_PassingTime > _AfterImageList[i]._Duration) - { - _AfterImageList.Remove(_AfterImageList[i]); - Destroy(_AfterImageList[i]); - continue; - } +// if (_PassingTime > _AfterImageList[i]._Duration) +// { +// _AfterImageList.Remove(_AfterImageList[i]); +// Destroy(_AfterImageList[i]); +// continue; +// } - if (_AfterImageList[i]._Material.HasProperty("_Color")) - { - _AfterImageList[i]._Alpha *= (1 - _PassingTime / _AfterImageList[i]._Duration); - _AfterImageColor.a = _AfterImageList[i]._Alpha; - // _AfterImageList[i]._Material.SetColor("_Color", _AfterImageColor); - } +// if (_AfterImageList[i]._Material.HasProperty("_Color")) +// { +// _AfterImageList[i]._Alpha *= (1 - _PassingTime / _AfterImageList[i]._Duration); +// _AfterImageColor.a = _AfterImageList[i]._Alpha; +// // _AfterImageList[i]._Material.SetColor("_Color", _AfterImageColor); +// } - // 绘制submesh - for(int j = 0; j < _AfterImageList[i]._Mesh.subMeshCount; ++j) - { - if (j >= 4) continue; - Graphics.DrawMesh(_AfterImageList[i]._Mesh, _AfterImageList[i]._Matrix, /*_AfterImageList[i]._Material*/materials[j], gameObject.layer, null, j); - } - } - } - /// - /// 设置纹理渲染模式 - /// - void SetMaterialRenderingMode(Material material, RenderingMode renderingMode) - { - switch (renderingMode) - { - case RenderingMode.Opaque: - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); - material.SetInt("_ZWrite", 1); - material.DisableKeyword("_ALPHATEST_ON"); - material.DisableKeyword("_ALPHABLEND_ON"); - material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); - material.renderQueue = -1; - break; - case RenderingMode.Cutout: - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); - material.SetInt("_ZWrite", 1); - material.EnableKeyword("_ALPHATEST_ON"); - material.DisableKeyword("_ALPHABLEND_ON"); - material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); - material.renderQueue = 2450; - break; - case RenderingMode.Fade: - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); - material.SetInt("_ZWrite", 0); - material.DisableKeyword("_ALPHATEST_ON"); - material.EnableKeyword("_ALPHABLEND_ON"); - material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); - material.renderQueue = 3000; - break; - case RenderingMode.Transparent: - material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); - material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); - material.SetInt("_ZWrite", 0); - material.DisableKeyword("_ALPHATEST_ON"); - material.DisableKeyword("_ALPHABLEND_ON"); - material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); - material.renderQueue = 3000; - break; - } - } -} -public enum RenderingMode -{ - Opaque, - Cutout, - Fade, - Transparent, -} -class AfterImage : Object -{ - //残影网格 - public Mesh _Mesh; - //残影纹理 - public Material _Material; - //残影位置 - public Matrix4x4 _Matrix; - //残影透明度 - public float _Alpha; - //残影启动时间 - public float _StartTime; - //残影保留时间 - public float _Duration; +// // 绘制submesh +// for(int j = 0; j < _AfterImageList[i]._Mesh.subMeshCount; ++j) +// { +// if (j >= 4) continue; +// Graphics.DrawMesh(_AfterImageList[i]._Mesh, _AfterImageList[i]._Matrix, /*_AfterImageList[i]._Material*/materials[j], gameObject.layer, null, j); +// } +// } +// } +// /// +// /// 设置纹理渲染模式 +// /// +// void SetMaterialRenderingMode(Material material, RenderingMode renderingMode) +// { +// switch (renderingMode) +// { +// case RenderingMode.Opaque: +// material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); +// material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); +// material.SetInt("_ZWrite", 1); +// material.DisableKeyword("_ALPHATEST_ON"); +// material.DisableKeyword("_ALPHABLEND_ON"); +// material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); +// material.renderQueue = -1; +// break; +// case RenderingMode.Cutout: +// material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); +// material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); +// material.SetInt("_ZWrite", 1); +// material.EnableKeyword("_ALPHATEST_ON"); +// material.DisableKeyword("_ALPHABLEND_ON"); +// material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); +// material.renderQueue = 2450; +// break; +// case RenderingMode.Fade: +// material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); +// material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); +// material.SetInt("_ZWrite", 0); +// material.DisableKeyword("_ALPHATEST_ON"); +// material.EnableKeyword("_ALPHABLEND_ON"); +// material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); +// material.renderQueue = 3000; +// break; +// case RenderingMode.Transparent: +// material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); +// material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); +// material.SetInt("_ZWrite", 0); +// material.DisableKeyword("_ALPHATEST_ON"); +// material.DisableKeyword("_ALPHABLEND_ON"); +// material.EnableKeyword("_ALPHAPREMULTIPLY_ON"); +// material.renderQueue = 3000; +// break; +// } +// } +//} +//public enum RenderingMode +//{ +// Opaque, +// Cutout, +// Fade, +// Transparent, +//} +//class AfterImage : Object +//{ +// //残影网格 +// public Mesh _Mesh; +// //残影纹理 +// public Material _Material; +// //残影位置 +// public Matrix4x4 _Matrix; +// //残影透明度 +// public float _Alpha; +// //残影启动时间 +// public float _StartTime; +// //残影保留时间 +// public float _Duration; - public AfterImage(Mesh mesh, Material material, Matrix4x4 matrix4x4, float alpha, float startTime, float duration) - { - _Mesh = mesh; - _Material = material; - _Matrix = matrix4x4; - _Alpha = alpha; - _StartTime = startTime; - _Duration = duration; - } +// public AfterImage(Mesh mesh, Material material, Matrix4x4 matrix4x4, float alpha, float startTime, float duration) +// { +// _Mesh = mesh; +// _Material = material; +// _Matrix = matrix4x4; +// _Alpha = alpha; +// _StartTime = startTime; +// _Duration = duration; +// } -} \ No newline at end of file +//} \ No newline at end of file diff --git a/Assets/Scripts/Physics/PhysicsBody.cs b/Assets/Scripts/Physics/PhysicsBody.cs index b6be778a..80026962 100644 --- a/Assets/Scripts/Physics/PhysicsBody.cs +++ b/Assets/Scripts/Physics/PhysicsBody.cs @@ -28,7 +28,8 @@ public sealed class PhysicsBody : MonoBehaviour { float rotY = Quaternion.ToEulerAngles(transform.rotation).y; rotY = Mathf.Rad2Deg * rotY; - return rotY > 0 && rotY <= 180; + bool right = rotY >= 0 && rotY <= 180; + return right; } } diff --git a/Assets/Scripts/Props.meta b/Assets/Scripts/Props.meta deleted file mode 100644 index bb96602e..00000000 --- a/Assets/Scripts/Props.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f299520ed9fcf4a45858ad4ef5a8d5d1 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: -- cgit v1.1-26-g67d0