Commit 753e071e authored by 15김민규's avatar 15김민규

넉백 구현. 움직임 제대로 나옴.

parent b062ff54
...@@ -108,6 +108,13 @@ AnimationClip: ...@@ -108,6 +108,13 @@ AnimationClip:
m_HasMotionFloatCurves: 0 m_HasMotionFloatCurves: 0
m_GenerateMotionCurves: 0 m_GenerateMotionCurves: 0
m_Events: m_Events:
- time: 0
functionName: ChangeVelocityX
data:
objectReferenceParameter: {fileID: 0}
floatParameter: 0
intParameter: 0
messageOptions: 0
- time: 1 - time: 1
functionName: DeadEvent functionName: DeadEvent
data: data:
......
...@@ -192,9 +192,6 @@ AnimatorStateTransition: ...@@ -192,9 +192,6 @@ AnimatorStateTransition:
m_PrefabInternal: {fileID: 0} m_PrefabInternal: {fileID: 0}
m_Name: m_Name:
m_Conditions: m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: TrackTrigger
m_EventTreshold: 0
- m_ConditionMode: 1 - m_ConditionMode: 1
m_ConditionEvent: TrackTrigger m_ConditionEvent: TrackTrigger
m_EventTreshold: 0 m_EventTreshold: 0
...@@ -272,8 +269,7 @@ AnimatorState: ...@@ -272,8 +269,7 @@ AnimatorState:
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: m_Transitions:
- {fileID: 1101117024733671452} - {fileID: 1101117024733671452}
m_StateMachineBehaviours: m_StateMachineBehaviours: []
- {fileID: 114316214165794054}
m_Position: {x: 50, y: 50, z: 0} m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0 m_IKOnFeet: 0
m_WriteDefaultValues: 1 m_WriteDefaultValues: 1
......
...@@ -45,7 +45,7 @@ GameObject: ...@@ -45,7 +45,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!1 &1734061800721222 --- !u!1 &1734061800721222
GameObject: GameObject:
m_ObjectHideFlags: 1 m_ObjectHideFlags: 1
...@@ -149,7 +149,7 @@ Rigidbody2D: ...@@ -149,7 +149,7 @@ Rigidbody2D:
m_Mass: 1 m_Mass: 1
m_LinearDrag: 0 m_LinearDrag: 0
m_AngularDrag: 0.05 m_AngularDrag: 0.05
m_GravityScale: 30 m_GravityScale: 1
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_Interpolate: 0 m_Interpolate: 0
m_SleepingMode: 1 m_SleepingMode: 1
...@@ -260,7 +260,7 @@ MonoBehaviour: ...@@ -260,7 +260,7 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
monsterID: 117 monsterID: 117
maxHealth: 15 maxHealth: 55
weight: 10 weight: 10
patrolRange: 2 patrolRange: 2
noticeRange: 2 noticeRange: 2
......
...@@ -1108,6 +1108,11 @@ MonoBehaviour: ...@@ -1108,6 +1108,11 @@ MonoBehaviour:
type: 2} type: 2}
m_PrefabInternal: {fileID: 1711972807} m_PrefabInternal: {fileID: 1711972807}
m_Script: {fileID: 11500000, guid: 7fe540ec78947fc449eabc76bd87823d, type: 3} m_Script: {fileID: 11500000, guid: 7fe540ec78947fc449eabc76bd87823d, type: 3}
--- !u!4 &1207417820 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63,
type: 2}
m_PrefabInternal: {fileID: 1787348169}
--- !u!224 &1209430809 stripped --- !u!224 &1209430809 stripped
RectTransform: RectTransform:
m_CorrespondingSourceObject: {fileID: 224402251087470820, guid: c179f0931cfabec428a868a6edc543b0, m_CorrespondingSourceObject: {fileID: 224402251087470820, guid: c179f0931cfabec428a868a6edc543b0,
...@@ -1150,7 +1155,7 @@ Transform: ...@@ -1150,7 +1155,7 @@ Transform:
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 1509282194} - {fileID: 1207417820}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 4 m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
...@@ -1330,62 +1335,6 @@ Canvas: ...@@ -1330,62 +1335,6 @@ Canvas:
m_CorrespondingSourceObject: {fileID: 223237664237935382, guid: 692aad2449e06054799ea4706578fb23, m_CorrespondingSourceObject: {fileID: 223237664237935382, guid: 692aad2449e06054799ea4706578fb23,
type: 2} type: 2}
m_PrefabInternal: {fileID: 28941081} m_PrefabInternal: {fileID: 28941081}
--- !u!1001 &1509282193
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 1244139631}
m_Modifications:
- target: {fileID: 66792933649035248, guid: 0443c2e9410bbe545bda40dc30fa6a63,
type: 2}
propertyPath: m_ColliderPaths.Array.size
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1915452461634262, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
m_IsPrefabAsset: 0
--- !u!4 &1509282194 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63,
type: 2}
m_PrefabInternal: {fileID: 1509282193}
--- !u!4 &1604462410 stripped --- !u!4 &1604462410 stripped
Transform: Transform:
m_CorrespondingSourceObject: {fileID: 4884929250924374, guid: e6794ab8e2e4c6340a23b382e9497cbb, m_CorrespondingSourceObject: {fileID: 4884929250924374, guid: e6794ab8e2e4c6340a23b382e9497cbb,
...@@ -1640,6 +1589,57 @@ Prefab: ...@@ -1640,6 +1589,57 @@ Prefab:
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: c179f0931cfabec428a868a6edc543b0, type: 2} m_SourcePrefab: {fileID: 100100000, guid: c179f0931cfabec428a868a6edc543b0, type: 2}
m_IsPrefabAsset: 0 m_IsPrefabAsset: 0
--- !u!1001 &1787348169
Prefab:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 1244139631}
m_Modifications:
- target: {fileID: 66792933649035248, guid: 0443c2e9410bbe545bda40dc30fa6a63,
type: 2}
propertyPath: m_ColliderPaths.Array.size
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1915452461634262, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
m_IsPrefabAsset: 0
--- !u!114 &1908917313 stripped --- !u!114 &1908917313 stripped
MonoBehaviour: MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 114939219159237616, guid: 62a83d11a7addc342ad436145784e698, m_CorrespondingSourceObject: {fileID: 114939219159237616, guid: 62a83d11a7addc342ad436145784e698,
......
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyDamaged : StateMachineBehaviour {
RuntimeAnimatorController ac;
float knockbackTime;
float knockbackSpeed;
float knockbackDir; // 1: right \ -1: left
Vector3 leftsideAngle = new Vector3(0, 0, 0);
Vector3 rightsideAngle = new Vector3(0, 180, 0);
Transform pivotTransform;
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
ac = animator.runtimeAnimatorController;
foreach(var clip in ac.animationClips)
{
if (clip.name.Contains("Damaged"))
{
knockbackTime = clip.length;
}
}
knockbackSpeed = animator.GetFloat("knockbackDistance") / knockbackTime;
Transform playerTransform = EnemyManager.Instance.Player.transform;
pivotTransform = animator.transform.parent;
pivotTransform.eulerAngles = (playerTransform.position.x - pivotTransform.position.x < 0) ? leftsideAngle : rightsideAngle;
knockbackDir = (playerTransform.position.x - pivotTransform.position.x < 0) ? 1 : -1;
}
// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
Vector2 currPosition = pivotTransform.position;
Vector2 movingDistance = new Vector2(knockbackSpeed * Time.deltaTime, 0) * knockbackDir;
pivotTransform.gameObject.GetComponent<Rigidbody2D>().MovePosition(currPosition + movingDistance);
}
// OnStateExit is called when a transition ends and the state machine finishes evaluating this state
//override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
//
//}
// OnStateMove is called right after Animator.OnAnimatorMove(). Code that processes and affects root motion should be implemented here
//override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
//
//}
// OnStateIK is called right after Animator.OnAnimatorIK(). Code that sets up animation IK (inverse kinematics) should be implemented here.
//override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
//
//}
}
fileFormatVersion: 2
guid: 752c7d4f7a0f1444c84cadeae1fab1d7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
...@@ -31,15 +31,18 @@ public class EnemyMeleeIdle : StateMachineBehaviour { ...@@ -31,15 +31,18 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
animator.SetTrigger("TrackTrigger"); animator.SetTrigger("TrackTrigger");
return; return;
} }
float span = animatorRoot.position.x - origin.x; if (!enemy.DuringKnockback)
{
if ((Mathf.Abs(span) > patrolRange && span * enemy.MoveDir > 0) || float span = animatorRoot.position.x - origin.x;
enemy.WallTest[(enemy.MoveDir + 1) / 2] ||
enemy.CliffTest[(enemy.MoveDir + 1) / 2] if ((Mathf.Abs(span) > patrolRange && span * enemy.MoveDir > 0) ||
) enemy.WallTest[(enemy.MoveDir + 1) / 2] ||
{ enemy.CliffTest[(enemy.MoveDir + 1) / 2]
enemy.ChangeDir(enemy.MoveDir * -1); )
enemy.ChangeVelocityX(enemy.MoveDir * patrolSpeed); {
enemy.ChangeDir(enemy.MoveDir * -1);
enemy.ChangeVelocityX(enemy.MoveDir * patrolSpeed);
}
} }
} }
......
...@@ -22,8 +22,15 @@ public class EnemyMeleeTrack : StateMachineBehaviour { ...@@ -22,8 +22,15 @@ public class EnemyMeleeTrack : StateMachineBehaviour {
attackRange = enemy.attackRange; attackRange = enemy.attackRange;
NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right; NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right;
enemy.ChangeVelocityX(trackSpeed);
enemy.ChangeDir(trackDir); enemy.ChangeDir(trackDir);
if (enemy.CliffTest[(enemy.MoveDir + 1) / 2] || animator.GetComponent<Enemy>().PlayerDistance < attackRange)
{
enemy.ChangeVelocityX(0.0f);
}
else
{
enemy.ChangeVelocityX(enemy.MoveDir * trackSpeed);
}
} }
// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
...@@ -33,7 +40,6 @@ public class EnemyMeleeTrack : StateMachineBehaviour { ...@@ -33,7 +40,6 @@ public class EnemyMeleeTrack : StateMachineBehaviour {
animator.SetTrigger("AttackTrigger"); animator.SetTrigger("AttackTrigger");
return; return;
} }
int integerDir = enemy.MoveDir; int integerDir = enemy.MoveDir;
if (enemy.WallTest[(integerDir + 1) / 2] || enemy.CliffTest[(integerDir + 1) / 2]) if (enemy.WallTest[(integerDir + 1) / 2] || enemy.CliffTest[(integerDir + 1) / 2])
{ {
...@@ -51,7 +57,7 @@ public class EnemyMeleeTrack : StateMachineBehaviour { ...@@ -51,7 +57,7 @@ public class EnemyMeleeTrack : StateMachineBehaviour {
enemy.ChangeDir(trackDir); enemy.ChangeDir(trackDir);
frameCounter = 0; frameCounter = 0;
} }
} }
// OnStateExit is called when a transition ends and the state machine finishes evaluating this state // OnStateExit is called when a transition ends and the state machine finishes evaluating this state
//override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { //override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
......
...@@ -41,8 +41,18 @@ public class Enemy : MonoBehaviour { ...@@ -41,8 +41,18 @@ public class Enemy : MonoBehaviour {
public float PlayerDistance { get; private set; } public float PlayerDistance { get; private set; }
private readonly float knockbackCritPoint = 0.25f; private readonly float knockbackCritPoint = 0.25f;
public bool[] WallTest { get; private set; } // {left, right} public bool[] WallTest { get; private set; }
public bool[] CliffTest { get; private set; } // {left, right} public bool[] CliffTest { get; private set; }
/*
public bool[] WallTest { get { return wallTest; } private set { wallTest = value; } } // {left, right}
public bool[] CliffTest { get { return cliffTest; } private set { cliffTest = value; } } // {left, right}
[SerializeField]
private bool[] wallTest;
[SerializeField]
private bool[] cliffTest;
*/
public int MoveDir { get; private set; } public int MoveDir { get; private set; }
...@@ -68,10 +78,11 @@ public class Enemy : MonoBehaviour { ...@@ -68,10 +78,11 @@ public class Enemy : MonoBehaviour {
currHealth = maxHealth; currHealth = maxHealth;
Invisible = DuringKnockback = false; Invisible = DuringKnockback = false;
dropTable = enemyManager.DropTableByID[monsterID]; dropTable = enemyManager.DropTableByID[monsterID];
Physics2D.IgnoreCollision(enemyManager.Player.gameObject.GetComponent<Collider2D>(), transform.parent.GetComponent<Collider2D>()); //Physics2D.IgnoreCollision(enemyManager.Player.gameObject.GetComponent<Collider2D>(), transform.parent.GetComponent<Collider2D>());
PlayerDistance = Vector2.Distance(enemyManager.Player.transform.position, transform.parent.position);
} }
private void Update() private void FixedUpdate()
{ {
PlayerDistance = Vector2.Distance(enemyManager.Player.transform.position, transform.parent.position); PlayerDistance = Vector2.Distance(enemyManager.Player.transform.position, transform.parent.position);
CheckCliff(); CheckWall(); CheckCliff(); CheckWall();
...@@ -87,7 +98,7 @@ public class Enemy : MonoBehaviour { ...@@ -87,7 +98,7 @@ public class Enemy : MonoBehaviour {
{ {
Vector2 origin = (Vector2)transform.parent.position + Dir * new Vector2(colliderSize.x / 2.0f, 0); Vector2 origin = (Vector2)transform.parent.position + Dir * new Vector2(colliderSize.x / 2.0f, 0);
Vector2 direction = Vector2.down; Vector2 direction = Vector2.down;
float distance = colliderSize.y / 2.0f; float distance = colliderSize.y / 4.0f;
int layerMask = LayerMask.NameToLayer("platform"); int layerMask = LayerMask.NameToLayer("platform");
RaycastHit2D hit = Physics2D.Raycast(origin, direction, distance, layerMask); RaycastHit2D hit = Physics2D.Raycast(origin, direction, distance, layerMask);
...@@ -101,7 +112,7 @@ public class Enemy : MonoBehaviour { ...@@ -101,7 +112,7 @@ public class Enemy : MonoBehaviour {
foreach (int Dir in Enum.GetValues(typeof(NumeratedDir))) foreach (int Dir in Enum.GetValues(typeof(NumeratedDir)))
{ {
Vector2 origin = (Vector2)transform.parent.position + Dir * new Vector2(colliderSize.x / 2.0f, 0); Vector2 origin = (Vector2)transform.parent.position + new Vector2(Dir * colliderSize.x / 2.0f, colliderSize.y);
Vector2 direction = Vector2.right * Dir; Vector2 direction = Vector2.right * Dir;
float distance = 0.02f; float distance = 0.02f;
int layerMask = LayerMask.GetMask("Wall", "OuterWall"); int layerMask = LayerMask.GetMask("Wall", "OuterWall");
...@@ -124,35 +135,49 @@ public class Enemy : MonoBehaviour { ...@@ -124,35 +135,49 @@ public class Enemy : MonoBehaviour {
float knockbackDist = attack.damage * attack.knockBackMultiplier / weight; float knockbackDist = attack.damage * attack.knockBackMultiplier / weight;
float knockbackTime = (knockbackDist >= 0.5f) ? 0.5f : knockbackDist; float knockbackTime = (knockbackDist >= 0.5f) ? 0.5f : knockbackDist;
if (!DuringKnockback) if (DuringKnockback)
{ {
StartCoroutine(Knockback(knockbackDist, knockbackTime)); StopCoroutine("Knockback");
}
StartCoroutine(Knockback(knockbackDist, knockbackTime));
if (knockbackDist >= knockbackCritPoint) if (knockbackDist >= knockbackCritPoint)
{ {
animator.SetFloat("knockbackTime", knockbackTime); animator.SetFloat("knockbackTime", knockbackTime);
animator.SetTrigger("DamagedTrigger"); animator.SetTrigger("DamagedTrigger");
}
} }
} }
// change speed of rigidbody of enemy // change direction, and speed of rigidbody of enemy
public void ChangeVelocityX(float val) public void ChangeVelocityX(float val)
{
if (!DuringKnockback)
{
Vector2 tempVelocity = transform.parent.GetComponent<Rigidbody2D>().velocity;
tempVelocity.x = val;
transform.parent.GetComponent<Rigidbody2D>().velocity = tempVelocity;
}
}
private void SudoChangeVelocityX(float val)
{ {
Vector2 tempVelocity = transform.parent.GetComponent<Rigidbody2D>().velocity; Vector2 tempVelocity = transform.parent.GetComponent<Rigidbody2D>().velocity;
tempVelocity.x = val; tempVelocity.x = val;
transform.parent.GetComponent<Rigidbody2D>().velocity = tempVelocity; transform.parent.GetComponent<Rigidbody2D>().velocity = tempVelocity;
} }
public void ChangeDir(NumeratedDir dir) public void ChangeDir(object dir)
{ {
MoveDir = (int)dir; if (!DuringKnockback)
transform.parent.eulerAngles = (dir == NumeratedDir.Left) ? new Vector2(0, 0) : new Vector2(0, 180); {
MoveDir = (int)dir;
transform.parent.eulerAngles = ((NumeratedDir)dir == NumeratedDir.Left) ? new Vector2(0, 0) : new Vector2(0, 180);
}
} }
public void ChangeDir(int dir) private void SudoChangeDir(object dir)
{ {
MoveDir = dir; MoveDir = (int)dir;
transform.parent.eulerAngles = ((NumeratedDir)dir == NumeratedDir.Left) ? new Vector2(0, 0) : new Vector2(0, 180); transform.parent.eulerAngles = ((NumeratedDir)dir == NumeratedDir.Left) ? new Vector2(0, 0) : new Vector2(0, 180);
} }
...@@ -210,19 +235,23 @@ public class Enemy : MonoBehaviour { ...@@ -210,19 +235,23 @@ public class Enemy : MonoBehaviour {
IEnumerator Knockback(float knockbackDist, float knockbackTime) IEnumerator Knockback(float knockbackDist, float knockbackTime)
{ {
DuringKnockback = true; DuringKnockback = true;
NumeratedDir isPlayerLeft = (enemyManager.Player.transform.position.x - transform.parent.position.x <= 0) ? int knockbackDir = (enemyManager.Player.transform.position.x - transform.parent.position.x >= 0) ? -1 : 1;
NumeratedDir.Left : NumeratedDir.Right; float knockbackVelocity = knockbackDir * knockbackDist / knockbackTime;
SudoChangeDir(knockbackDir * -1);
float knockbackVelocity = (int)isPlayerLeft * knockbackDist / knockbackTime; SudoChangeVelocityX(knockbackVelocity);
transform.parent.eulerAngles = (isPlayerLeft == NumeratedDir.Left) ? new Vector2(0.0f, 0.0f) : new Vector2(0.0f, 180.0f);
for (float timer = 0; timer <= knockbackTime; timer += Time.deltaTime)
Vector2 tempVelocity = transform.parent.GetComponent<Rigidbody2D>().velocity; {
tempVelocity.x = knockbackVelocity; if (CliffTest[(knockbackDir + 1) / 2])
transform.parent.GetComponent<Rigidbody2D>().velocity = tempVelocity; {
SudoChangeVelocityX(0.0f);
yield return new WaitForSeconds(knockbackTime); yield return new WaitForSeconds(knockbackTime - timer);
break;
}
yield return new WaitForFixedUpdate();
}
DuringKnockback = false; DuringKnockback = false;
ChangeVelocityX(0.0f);
} }
// Debuff // Debuff
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment