summaryrefslogtreecommitdiff
path: root/Assets/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/Effects/FxClear.cs264
-rw-r--r--Assets/Scripts/Input/InputManager.cs9
-rw-r--r--Assets/Scripts/Line3D.meta8
-rw-r--r--Assets/Scripts/Line3D/Line3DRenderer.cs18
-rw-r--r--Assets/Scripts/Line3D/Line3DRenderer.cs.meta11
-rw-r--r--Assets/Scripts/Projectile/Projectile.cs7
-rw-r--r--Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs5
-rw-r--r--Assets/Scripts/Unit/Collider/CollisionSystem.cs6
-rw-r--r--Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs6
-rw-r--r--Assets/Scripts/Unit/Components/UnitState/PCState.cs9
-rw-r--r--Assets/Scripts/Unit/TimelineEventProxy.cs52
11 files changed, 142 insertions, 253 deletions
diff --git a/Assets/Scripts/Effects/FxClear.cs b/Assets/Scripts/Effects/FxClear.cs
index f5d3dff9..6b26da6c 100644
--- a/Assets/Scripts/Effects/FxClear.cs
+++ b/Assets/Scripts/Effects/FxClear.cs
@@ -50,59 +50,27 @@ public struct PlayEffectInfo
}
}
-#if UNITY_EDITOR
-[ExecuteInEditMode]
-#endif
public class FxClear : MonoBehaviour
{
-
[SerializeField]
public float ClearTime = 2f;
private EffectPlayTypes m_EffectPlayType = EffectPlayTypes.None;
- /// <summary>
- /// 이름만 root. effect Tr 싱크 위해 사용.
- /// </summary>
+ public float time { get { return m_curTime; } }
+
private Transform m_rootTr = null;
private float m_curTime = 0.0f;
- //private bool m_bExistTr = false;
private bool m_bAttached = false;
+
private Vector3 m_offset = Vector3.zero;
private Vector3 m_rot = Vector3.zero;
private Vector3 m_scale = Vector3.zero;
- private int m_ownerDbId = 0;
-
- public int ownerDbId
- {
- get
- {
- return m_ownerDbId;
- }
- }
-
- private bool m_bUIEffect = false;
-
#if UNITY_EDITOR
private double m_prevTime = 0.0f;
private float m_removeWaitTime = 0.0f;
- private bool m_runInEditor = false;
private bool m_destroyRequested = false;
-
- private List<ParticleSystem> m_Particles = null;
-
- public bool RunInEditor
- {
- get
- {
- return m_runInEditor;
- }
- set
- {
- m_runInEditor = value;
- }
- }
#endif
private void Awake()
@@ -114,32 +82,11 @@ public class FxClear : MonoBehaviour
private void Start()
{
-#if UNITY_EDITOR
- if (m_runInEditor)
- {
- UnityEditor.EditorApplication.update += Update;
- m_prevTime = UnityEditor.EditorApplication.timeSinceStartup;
- return;
- }
-#endif
}
private void OnDestroy()
{
Release();
-
-#if UNITY_EDITOR
-
- if (m_runInEditor)
- {
- if (m_Particles != null)
- {
- m_Particles.Clear();
- m_Particles = null;
- }
- }
-
-#endif
}
public void Initialize(PlayEffectInfo info)
@@ -152,30 +99,6 @@ public class FxClear : MonoBehaviour
m_rot = info.rot;
m_scale = info.scale;
m_bAttached = info.bAttached;
- m_ownerDbId = info.dbId;
- m_bUIEffect = info.bUIEffect;
-
-#if UNITY_EDITOR
-
- if (m_runInEditor)
- {
- if (m_Particles == null)
- {
- m_Particles = new List<ParticleSystem>();
-
- transform.DoRecursively(x =>
- {
- ParticleSystem sys = x.GetComponent<ParticleSystem>();
-
- if (sys != null)
- {
- m_Particles.Add(sys);
- sys.Stop();
- }
- });
- }
- }
-#endif
SyncTr();
gameObject.SetActive(true);
@@ -184,17 +107,11 @@ public class FxClear : MonoBehaviour
public void Release()
{
m_rootTr = null;
- m_ownerDbId = 0;
m_curTime = 0.0f;
- //m_bExistTr = false;
m_bAttached = false;
m_offset = Vector3.zero;
m_rot = Vector3.zero;
m_scale = Vector3.zero;
- m_bUIEffect = false;
-#if UNITY_EDITOR
- m_removeWaitTime = 0.0f;
-#endif
}
private void SyncTr()
@@ -202,29 +119,29 @@ public class FxClear : MonoBehaviour
#if UNITY_EDITOR
if (transform == null || transform.gameObject == null)
return;
- if (m_runInEditor)
- {
- if (m_rootTr == null)
- {
- transform.position = m_offset;
- }
- else
- {
-
- transform.localRotation = m_rootTr.rotation;
-
- if (m_bAttached)
- {
- transform.position = m_rootTr.position + (m_rootTr.rotation * m_offset);
- }
- else
- {
- transform.position = m_rootTr.position - (m_rootTr.rotation * m_offset);
- }
- }
- }
- else
- {
+ //if (m_runInEditor)
+ //{
+ // if (m_rootTr == null)
+ // {
+ // transform.position = m_offset;
+ // }
+ // else
+ // {
+
+ // transform.localRotation = m_rootTr.rotation;
+
+ // if (m_bAttached)
+ // {
+ // transform.position = m_rootTr.position + (m_rootTr.rotation * m_offset);
+ // }
+ // else
+ // {
+ // transform.position = m_rootTr.position - (m_rootTr.rotation * m_offset);
+ // }
+ // }
+ //}
+ //else
+ //{
if (m_rootTr == null)
{
transform.position = m_offset;
@@ -242,7 +159,7 @@ public class FxClear : MonoBehaviour
transform.position = m_rootTr.position + (m_rootTr.rotation * m_offset);
}
- }
+ //}
#else
if (m_rootTr == null)
{
@@ -265,14 +182,9 @@ public class FxClear : MonoBehaviour
#if UNITY_EDITOR
- if (m_runInEditor == false && m_bAttached && m_rootTr != null)
+ if (m_bAttached && m_rootTr != null)
{
transform.SetParent(m_rootTr);
-
- if (m_bUIEffect)
- {
- transform.localPosition = m_offset;
- }
}
#else
@@ -280,10 +192,6 @@ public class FxClear : MonoBehaviour
if (m_bAttached && m_rootTr != null)
{
transform.SetParent(m_rootTr);
- if (m_bUIEffect)
- {
- transform.localPosition = m_offset;
- }
}
#endif
@@ -300,122 +208,22 @@ public class FxClear : MonoBehaviour
public void Restore()
{
- if (m_EffectPlayType == EffectPlayTypes.None)
- {
- DestroyImmediate(this.gameObject);
- return;
- }
-
- //EffectManager.Instance.RestoreEffect(this);
+ DestroyImmediate(this.gameObject);
}
-#if UNITY_EDITOR
-
- private void UpdateInEditMode()
+ public void UpdateFunc(float dt)
{
- if (!m_destroyRequested)
- {
- double timeDelta = UnityEditor.EditorApplication.timeSinceStartup - m_prevTime;
- m_prevTime = UnityEditor.EditorApplication.timeSinceStartup;
-
- if (m_removeWaitTime <= 0.0f) // 순서 관계..
- {
- if (ClearTime > 0.0f)
- {
- if (ClearTime < m_curTime)
- {
- List<Object> selectBuffer = new List<Object>();
-
- if (m_Particles != null)
- {
- for (int i = 0; i < m_Particles.Count; i++)
- {
- m_Particles[i].Stop();
- m_Particles[i].gameObject.SetActive(false);
- }
-
- Object[] selectedObjects = UnityEditor.Selection.objects;
- for (int i = 0; i < selectedObjects.Length; i++)
- {
- if (m_Particles.Find(e => e.gameObject.GetInstanceID() == selectedObjects[i].GetInstanceID()) == null)
- {
- selectBuffer.Add(m_Particles[i]);
- }
- }
- UnityEditor.Selection.objects = selectBuffer.ToArray();
- if (UnityEditor.Selection.selectionChanged != null)
- {
- UnityEditor.Selection.selectionChanged();
- }
- }
-
- m_removeWaitTime = 1.0f;
- }
- else
- {
- if (m_Particles != null)
- {
- for (int i = 0; i < m_Particles.Count; i++)
- {
- m_Particles[i].Simulate(m_curTime);
- }
- }
- }
- }
- }
- else
- {
- m_removeWaitTime -= (float)timeDelta;
- if (m_removeWaitTime < 0.0f)
- {
- transform.parent = null;
- UnityEditor.EditorApplication.update -= Update;
- DestroyImmediate(gameObject);
-
- m_destroyRequested = true;
- return;
- }
- }
-
- SyncTr();
- }
- }
-
-#endif
-
- private void Update()
- {
- m_curTime += Time.unscaledDeltaTime;
-
-#if UNITY_EDITOR
- if (m_runInEditor)
- {
- UpdateInEditMode();
- return;
- }
-#endif
-
+ m_curTime += dt;
+ SyncTr();
if (m_EffectPlayType != EffectPlayTypes.Loop && m_curTime >= ClearTime)
{
Restore();
return;
}
+ }
- //rootTr이 애초에 비어있으면 싱크 맞춰줄 필요 없음. - EffectMgr 통해서 관리되지 않는 이펙트.
- //if (m_bExistTr == false)
- // return;
- //
- //if (m_rootTr == null || m_rootTr.gameObject.activeInHierarchy == false)
- //{
- // Restore();
- // return;
- //}
- //
- //if (m_bAttached == false)
- //{
- // return;
- //}
- //
- //SyncTr();
+ private void Update()
+ {
+ UpdateFunc(Time.unscaledDeltaTime);
}
} \ No newline at end of file
diff --git a/Assets/Scripts/Input/InputManager.cs b/Assets/Scripts/Input/InputManager.cs
index 838409b5..4ad6ec02 100644
--- a/Assets/Scripts/Input/InputManager.cs
+++ b/Assets/Scripts/Input/InputManager.cs
@@ -38,10 +38,11 @@ public class InputManager : SingletonMB<InputManager>
cmd.key = vKey;
cmd.time = Time.time;
m_CommandQueue.Add(cmd);
- Debug.Log(cmd.time);
- string cmdStr = "";
- m_CommandQueue.ForEach(s => cmdStr += s.key.ToString() + ",");
- Debug.Log(cmdStr);
+
+ //Debug.Log(cmd.time);
+ //string cmdStr = "";
+ //m_CommandQueue.ForEach(s => cmdStr += s.key.ToString() + ",");
+ //Debug.Log(cmdStr);
}
}
float curTime = Time.time;
diff --git a/Assets/Scripts/Line3D.meta b/Assets/Scripts/Line3D.meta
new file mode 100644
index 00000000..7ca25728
--- /dev/null
+++ b/Assets/Scripts/Line3D.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: df7762b0e9f4ea643822227dc54aa423
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Line3D/Line3DRenderer.cs b/Assets/Scripts/Line3D/Line3DRenderer.cs
new file mode 100644
index 00000000..d16916cb
--- /dev/null
+++ b/Assets/Scripts/Line3D/Line3DRenderer.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class Line3DRenderer : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Line3D/Line3DRenderer.cs.meta b/Assets/Scripts/Line3D/Line3DRenderer.cs.meta
new file mode 100644
index 00000000..ad2c4500
--- /dev/null
+++ b/Assets/Scripts/Line3D/Line3DRenderer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f4af360e8a036c74499160090bb71ff7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Projectile/Projectile.cs b/Assets/Scripts/Projectile/Projectile.cs
index b1eb1b61..a6411f5f 100644
--- a/Assets/Scripts/Projectile/Projectile.cs
+++ b/Assets/Scripts/Projectile/Projectile.cs
@@ -59,7 +59,7 @@ public class Projectile : MonoBehaviour
private List<int> m_Hitmask;
- private float time;
+ public float time;
private bool markDestroy;
@@ -94,7 +94,7 @@ public class Projectile : MonoBehaviour
{
this.transform.position += this.velocity * deltaTime;
time += deltaTime;
- if(time > this.lifetime || markDestroy)
+ if (time > this.lifetime || markDestroy)
{
DestroyImmediate(this.gameObject);
}
@@ -170,6 +170,9 @@ public class Projectile : MonoBehaviour
if (spark)
{
GameObject obj = GameObject.Instantiate(spark);
+#if UNITY_EDITOR
+ obj.transform.SetParent(TimelineEventProxy.Root_Particles.transform);
+#endif
obj.transform.position = collision.collidee.unitCollider.owner.center;
markDestroy = true;
diff --git a/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs b/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs
index c2dd5f92..771e946b 100644
--- a/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs
+++ b/Assets/Scripts/Unit/Action/WaitForActionReachEnd.cs
@@ -18,9 +18,8 @@ public class WaitForActionReachEnd : IEnumerator
public bool MoveNext()
{
- var stateInfo = m_UnitAnimation.layers[m_Layer].stateInfo;
- float normalTime = stateInfo.normalizedTime;
- return normalTime < 1f;
+ var layer = m_UnitAnimation.layers[m_Layer];
+ return layer.playbackNormalizedTime < 1f;
}
public void Reset()
diff --git a/Assets/Scripts/Unit/Collider/CollisionSystem.cs b/Assets/Scripts/Unit/Collider/CollisionSystem.cs
index e84c54a9..4a73446f 100644
--- a/Assets/Scripts/Unit/Collider/CollisionSystem.cs
+++ b/Assets/Scripts/Unit/Collider/CollisionSystem.cs
@@ -126,10 +126,14 @@ public class CollisionSystem : SingletonMB<CollisionSystem>
foreach (var projectile in registry.projectiles)
{
+ if (projectile == null)
+ continue;
for(int i = 0; i < hurtboxes.Count; ++i)
{
ColliderDescriptor hurtCollider = hurtboxes[i];
- if (projectile.owner.type == hurtCollider.unitCollider.owner.type)
+ if (hurtCollider.unitCollider == null)
+ continue;
+ if (projectile.owner == null || hurtCollider.unitCollider.owner == null || projectile.owner.type == hurtCollider.unitCollider.owner.type)
continue;
Box hurtbox = ColliderUtility.GetColliderInWorldSpace(hurtCollider);
foreach (var itor in projectile.GetCollidersInWorldSpace())
diff --git a/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
index 6d17971d..1a990252 100644
--- a/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
+++ b/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
@@ -45,7 +45,7 @@ public class AnimatorLayerInfo
get
{
AnimatorStateInfo stateInfo = m_Animator.GetCurrentAnimatorStateInfo(layerIndex);
- if (isInTransition)
+ if (isInTransition) // 过渡中的动作认为当前动作是下一个动作
{
stateInfo = m_Animator.GetNextAnimatorStateInfo(layerIndex);
}
@@ -62,7 +62,7 @@ public class AnimatorLayerInfo
get
{
AnimatorClipInfo[] clips = null;
- if (!isInTransition)
+ if (!isInTransition)
{
clips = m_Animator.GetCurrentAnimatorClipInfo(layerIndex);
if (clips.Length == 0)
@@ -70,7 +70,7 @@ public class AnimatorLayerInfo
clips = m_Animator.GetNextAnimatorClipInfo(layerIndex);
}
}
- else
+ else // 过渡中的动作认为当前动作是下一个动作
{
clips = m_Animator.GetNextAnimatorClipInfo(layerIndex);
}
diff --git a/Assets/Scripts/Unit/Components/UnitState/PCState.cs b/Assets/Scripts/Unit/Components/UnitState/PCState.cs
index 435591b0..6bd6fa78 100644
--- a/Assets/Scripts/Unit/Components/UnitState/PCState.cs
+++ b/Assets/Scripts/Unit/Components/UnitState/PCState.cs
@@ -210,12 +210,12 @@ public class PCState : UnitState
{
const int total = 3;
int id = 0;
- m_Owner.pcAnimation.AnimAttack(id);
+ m_Owner.pcAnimation.AnimAttack(id++);
yield return null;
while (true)
{
bool canCombo = m_Owner.pcAnimation.baseLayer.IsToggleOpen(EAnimationToogle.Combo);
- if (canCombo)
+ if (canCombo && id < total)
{
if (Input.GetKeyDown("j"))
{
@@ -227,9 +227,8 @@ public class PCState : UnitState
{
TurnAround(true);
}
- ++id;
- m_Owner.pcAnimation.AnimAttack(id);
- yield return null;
+ m_Owner.pcAnimation.AnimAttack(id++);
+ yield return null;
yield return new WaitForTransitionDone(m_Owner.pcAnimation);
}
}
diff --git a/Assets/Scripts/Unit/TimelineEventProxy.cs b/Assets/Scripts/Unit/TimelineEventProxy.cs
index 825cf5bf..e56f590a 100644
--- a/Assets/Scripts/Unit/TimelineEventProxy.cs
+++ b/Assets/Scripts/Unit/TimelineEventProxy.cs
@@ -8,10 +8,36 @@ using UnityEngine;
[DisallowMultipleComponent]
public partial class TimelineEventProxy
{
+
#if UNITY_EDITOR // ActionTool里
+ private static GameObject m_Root_Particles;
+ public static GameObject Root_Particles
+ {
+ get
+ {
+ if (m_Root_Particles == null)
+ m_Root_Particles = new GameObject("Root_Particles");
+ return m_Root_Particles;
+ }
+ }
+ private static GameObject m_Root_Projectiles;
+ public static GameObject Root_Projectiles
+ {
+ get
+ {
+ if (m_Root_Projectiles == null)
+ m_Root_Projectiles = new GameObject("Root_Projectiles");
+ return m_Root_Projectiles;
+ }
+ }
+
public bool isInEditMode;
+
public delegate void RegisterProjectileHandle(Projectile projectile);
public RegisterProjectileHandle registerProjectile;
+
+ public delegate void RegisterParticleSystemHandle(FxClear vfx);
+ public RegisterParticleSystemHandle registerParticleSystem;
#endif
public enum EEventType
@@ -91,8 +117,10 @@ public partial class TimelineEventProxy
}
}
m_PrevFrame = frame;
- }
-
+ }
+
+ #region Event Handles
+
void ExecuteEvents(List<AnimationEventBase> events)
{
if (events == null || events.Count == 0)
@@ -122,9 +150,16 @@ public partial class TimelineEventProxy
GameObject go = GameObject.Instantiate(prefab);
go.transform.SetParent(root.transform);
- FxClear onClear = root.AddComponent<FxClear>();
- onClear.RunInEditor = true;
- onClear.Initialize(new PlayEffectInfo(path, EffectPlayTypes.Oneshot, m_Root, effect.position, effect.rotation, effect.scale, 0, false));
+ FxClear onClear = root.AddComponent<FxClear>();
+ onClear.gameObject.name = prefab.name + "(Clone)";
+ onClear.Initialize(new PlayEffectInfo(path, EffectPlayTypes.Oneshot, m_Root, effect.position, effect.rotation, effect.scale, 0, false));
+#if UNITY_EDITOR
+ if (isInEditMode && registerParticleSystem != null)
+ {
+ registerParticleSystem(onClear);
+ }
+ onClear.gameObject.transform.SetParent(Root_Particles.transform);
+#endif
}
}
@@ -168,7 +203,10 @@ public partial class TimelineEventProxy
{
registerProjectile(projectile);
}
+ obj.transform.SetParent(Root_Projectiles.transform);
#endif
- }
-
+ }
+
+ #endregion
+
} \ No newline at end of file