Commit 2963b013 authored by 15김민규's avatar 15김민규

고블린의 정상적인 이동이 가능해짐. 더이상 막히거나 떨어지지 않음.

parent c626bd44
...@@ -161,4 +161,11 @@ AnimationClip: ...@@ -161,4 +161,11 @@ AnimationClip:
m_HasGenericRootTransform: 0 m_HasGenericRootTransform: 0
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
...@@ -128,7 +128,7 @@ Transform: ...@@ -128,7 +128,7 @@ Transform:
m_PrefabInternal: {fileID: 100100000} m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1636491341446076} m_GameObject: {fileID: 1636491341446076}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.862, y: 0, z: 0} m_LocalPosition: {x: 0.862, y: 1.405, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: m_Children:
- {fileID: 4015301101001556} - {fileID: 4015301101001556}
......
...@@ -1340,7 +1340,7 @@ Prefab: ...@@ -1340,7 +1340,7 @@ Prefab:
- target: {fileID: 66792933649035248, guid: 0443c2e9410bbe545bda40dc30fa6a63, - target: {fileID: 66792933649035248, guid: 0443c2e9410bbe545bda40dc30fa6a63,
type: 2} type: 2}
propertyPath: m_ColliderPaths.Array.size propertyPath: m_ColliderPaths.Array.size
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2} - target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalPosition.x propertyPath: m_LocalPosition.x
...@@ -1376,7 +1376,7 @@ Prefab: ...@@ -1376,7 +1376,7 @@ Prefab:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 1915452461634262, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2} - target: {fileID: 1915452461634262, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_IsActive propertyPath: m_IsActive
value: 0 value: 1
objectReference: {fileID: 0} objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2} m_SourcePrefab: {fileID: 100100000, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
...@@ -1963,7 +1963,7 @@ Prefab: ...@@ -1963,7 +1963,7 @@ Prefab:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2} - target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalPosition.y propertyPath: m_LocalPosition.y
value: 0 value: 1.405
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2} - target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalPosition.z propertyPath: m_LocalPosition.z
......
...@@ -3,16 +3,12 @@ using System.Collections.Generic; ...@@ -3,16 +3,12 @@ using System.Collections.Generic;
using UnityEngine; using UnityEngine;
public class EnemyMeleeIdle : StateMachineBehaviour { public class EnemyMeleeIdle : StateMachineBehaviour {
Vector2 origin;
float patrolRange; float patrolRange;
float patrolSpeed; float patrolSpeed;
float noticeRange; float noticeRange;
Vector3 leftsideAngle = new Vector3(0, 0, 0); Vector2 origin;
Vector3 rightsideAngle = new Vector3(0, 180, 0);
Transform animatorRoot; Transform animatorRoot;
Enemy enemy; Enemy enemy;
NumeratedDir moveDir = NumeratedDir.Left; // go left first
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state // 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) { override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
...@@ -25,7 +21,7 @@ public class EnemyMeleeIdle : StateMachineBehaviour { ...@@ -25,7 +21,7 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
patrolSpeed = enemy.patrolSpeed; patrolSpeed = enemy.patrolSpeed;
enemy.ChangeDir(NumeratedDir.Left); enemy.ChangeDir(NumeratedDir.Left);
enemy.ChangeVelocityX((int)moveDir * patrolSpeed); enemy.ChangeVelocityX(enemy.MoveDir * patrolSpeed);
} }
// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
...@@ -35,16 +31,16 @@ public class EnemyMeleeIdle : StateMachineBehaviour { ...@@ -35,16 +31,16 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
animator.SetTrigger("TrackTrigger"); animator.SetTrigger("TrackTrigger");
return; return;
} }
int integerDir = (int)enemy.MoveDir;
float span = animatorRoot.position.x - origin.x; float span = animatorRoot.position.x - origin.x;
if ((Mathf.Abs(span) > patrolRange && span * integerDir > 0) || if ((Mathf.Abs(span) > patrolRange && span * enemy.MoveDir > 0) ||
enemy.WallTest[(integerDir + 1) / 2] || enemy.WallTest[(enemy.MoveDir + 1) / 2] ||
enemy.CliffTest[(integerDir + 1) / 2] enemy.CliffTest[(enemy.MoveDir + 1) / 2]
) )
{ {
enemy.ChangeDir(integerDir * -1); enemy.ChangeDir(enemy.MoveDir * -1);
} enemy.ChangeVelocityX(enemy.MoveDir * patrolSpeed);
}
} }
// 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
......
...@@ -3,26 +3,28 @@ using System.Collections.Generic; ...@@ -3,26 +3,28 @@ using System.Collections.Generic;
using UnityEngine; using UnityEngine;
public class EnemyMeleeTrack : StateMachineBehaviour { public class EnemyMeleeTrack : StateMachineBehaviour {
GameObject player; float trackSpeed;
float trackSpeed; float attackRange;
float attackRange; GameObject player;
Vector3 leftsideAngle = new Vector3(0, 0, 0); Transform animatorRoot;
Vector3 rightsideAngle = new Vector3(0, 180, 0); Enemy enemy;
Transform pivotTransform;
readonly int maxFrame = 10; readonly int maxFrame = 10;
int frameCounter; int frameCounter = 0;
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state // 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) { override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
trackSpeed = animator.GetComponent<Enemy>().trackSpeed; animatorRoot = animator.transform.parent;
attackRange = animator.GetComponent<Enemy>().attackRange; enemy = animator.GetComponent<Enemy>();
player = EnemyManager.Instance.Player; player = EnemyManager.Instance.Player;
pivotTransform = animator.transform.parent; trackSpeed = enemy.trackSpeed;
float halfHeight = pivotTransform.gameObject.GetComponent<BoxCollider2D>().size.y / 2.0f; attackRange = enemy.attackRange;
Vector2 rootPosition2D = pivotTransform.position;
frameCounter = 0; NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right;
} enemy.ChangeVelocityX(trackSpeed);
enemy.ChangeDir(trackDir);
}
// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
...@@ -31,17 +33,24 @@ public class EnemyMeleeTrack : StateMachineBehaviour { ...@@ -31,17 +33,24 @@ public class EnemyMeleeTrack : StateMachineBehaviour {
animator.SetTrigger("AttackTrigger"); animator.SetTrigger("AttackTrigger");
return; return;
} }
int integerDir = enemy.MoveDir;
if (enemy.WallTest[(integerDir + 1) / 2] || enemy.CliffTest[(integerDir + 1) / 2])
{
enemy.ChangeVelocityX(0.0f);
}
else
{
enemy.ChangeVelocityX(enemy.MoveDir * trackSpeed);
}
frameCounter += 1; frameCounter += 1;
if (frameCounter >= maxFrame) if (frameCounter >= maxFrame)
{ {
pivotTransform.eulerAngles = (player.transform.position.x - pivotTransform.position.x < 0) ? leftsideAngle : rightsideAngle; NumeratedDir trackDir = (animatorRoot.position.x - player.transform.position.x > 0) ? NumeratedDir.Left : NumeratedDir.Right;
enemy.ChangeDir(trackDir);
frameCounter = 0; frameCounter = 0;
} }
Vector2 currPosition = pivotTransform.position;
Vector2 movingDistance = pivotTransform.right * trackSpeed * Time.deltaTime * -1;
pivotTransform.gameObject.GetComponent<Rigidbody2D>().MovePosition(currPosition + movingDistance);
} }
// 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
......
...@@ -44,7 +44,7 @@ public class Enemy : MonoBehaviour { ...@@ -44,7 +44,7 @@ public class Enemy : MonoBehaviour {
public bool[] WallTest { get; private set; } // {left, right} public bool[] WallTest { get; private set; } // {left, right}
public bool[] CliffTest { get; private set; } // {left, right} public bool[] CliffTest { get; private set; } // {left, right}
public NumeratedDir MoveDir { get; private set; } public int MoveDir { get; private set; }
// drop item // drop item
private int[] dropTable; private int[] dropTable;
...@@ -64,7 +64,7 @@ public class Enemy : MonoBehaviour { ...@@ -64,7 +64,7 @@ public class Enemy : MonoBehaviour {
private void Start() private void Start()
{ {
MoveDir = NumeratedDir.Left; MoveDir = (int)NumeratedDir.Left;
currHealth = maxHealth; currHealth = maxHealth;
Invisible = DuringKnockback = false; Invisible = DuringKnockback = false;
dropTable = enemyManager.DropTableByID[monsterID]; dropTable = enemyManager.DropTableByID[monsterID];
...@@ -146,16 +146,14 @@ public class Enemy : MonoBehaviour { ...@@ -146,16 +146,14 @@ public class Enemy : MonoBehaviour {
public void ChangeDir(NumeratedDir dir) public void ChangeDir(NumeratedDir dir)
{ {
MoveDir = dir; MoveDir = (int)dir;
transform.parent.eulerAngles = (dir == NumeratedDir.Left) ? new Vector2(0, 0) : new Vector2(0, 180); transform.parent.eulerAngles = (dir == NumeratedDir.Left) ? new Vector2(0, 0) : new Vector2(0, 180);
ChangeVelocityX((int)dir * Mathf.Abs(transform.parent.GetComponent<Rigidbody2D>().velocity.x));
} }
public void ChangeDir(int dir) public void ChangeDir(int dir)
{ {
MoveDir = (NumeratedDir)dir; MoveDir = 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);
ChangeVelocityX(dir * Mathf.Abs(transform.parent.GetComponent<Rigidbody2D>().velocity.x));
} }
// Animation Event // Animation Event
......
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