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

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

parent c626bd44
......@@ -161,4 +161,11 @@ AnimationClip:
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 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:
m_PrefabInternal: {fileID: 100100000}
m_GameObject: {fileID: 1636491341446076}
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_Children:
- {fileID: 4015301101001556}
......
......@@ -1340,7 +1340,7 @@ Prefab:
- target: {fileID: 66792933649035248, guid: 0443c2e9410bbe545bda40dc30fa6a63,
type: 2}
propertyPath: m_ColliderPaths.Array.size
value: 0
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4874486600194970, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_LocalPosition.x
......@@ -1376,7 +1376,7 @@ Prefab:
objectReference: {fileID: 0}
- target: {fileID: 1915452461634262, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
propertyPath: m_IsActive
value: 0
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0443c2e9410bbe545bda40dc30fa6a63, type: 2}
......@@ -1963,7 +1963,7 @@ Prefab:
objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalPosition.y
value: 0
value: 1.405
objectReference: {fileID: 0}
- target: {fileID: 4639192263818050, guid: a164c147037e89448820f7387c724c42, type: 2}
propertyPath: m_LocalPosition.z
......
......@@ -3,16 +3,12 @@ using System.Collections.Generic;
using UnityEngine;
public class EnemyMeleeIdle : StateMachineBehaviour {
Vector2 origin;
float patrolRange;
float patrolSpeed;
float noticeRange;
Vector3 leftsideAngle = new Vector3(0, 0, 0);
Vector3 rightsideAngle = new Vector3(0, 180, 0);
Vector2 origin;
Transform animatorRoot;
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
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
......@@ -25,7 +21,7 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
patrolSpeed = enemy.patrolSpeed;
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
......@@ -35,16 +31,16 @@ public class EnemyMeleeIdle : StateMachineBehaviour {
animator.SetTrigger("TrackTrigger");
return;
}
int integerDir = (int)enemy.MoveDir;
float span = animatorRoot.position.x - origin.x;
if ((Mathf.Abs(span) > patrolRange && span * integerDir > 0) ||
enemy.WallTest[(integerDir + 1) / 2] ||
enemy.CliffTest[(integerDir + 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(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
......
......@@ -3,26 +3,28 @@ using System.Collections.Generic;
using UnityEngine;
public class EnemyMeleeTrack : StateMachineBehaviour {
GameObject player;
float trackSpeed;
float attackRange;
Vector3 leftsideAngle = new Vector3(0, 0, 0);
Vector3 rightsideAngle = new Vector3(0, 180, 0);
Transform pivotTransform;
float trackSpeed;
float attackRange;
GameObject player;
Transform animatorRoot;
Enemy enemy;
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
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
trackSpeed = animator.GetComponent<Enemy>().trackSpeed;
attackRange = animator.GetComponent<Enemy>().attackRange;
// 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) {
animatorRoot = animator.transform.parent;
enemy = animator.GetComponent<Enemy>();
player = EnemyManager.Instance.Player;
pivotTransform = animator.transform.parent;
float halfHeight = pivotTransform.gameObject.GetComponent<BoxCollider2D>().size.y / 2.0f;
Vector2 rootPosition2D = pivotTransform.position;
frameCounter = 0;
}
trackSpeed = enemy.trackSpeed;
attackRange = enemy.attackRange;
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
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
......@@ -31,17 +33,24 @@ public class EnemyMeleeTrack : StateMachineBehaviour {
animator.SetTrigger("AttackTrigger");
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;
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;
}
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
......
......@@ -44,7 +44,7 @@ public class Enemy : MonoBehaviour {
public bool[] WallTest { 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
private int[] dropTable;
......@@ -64,7 +64,7 @@ public class Enemy : MonoBehaviour {
private void Start()
{
MoveDir = NumeratedDir.Left;
MoveDir = (int)NumeratedDir.Left;
currHealth = maxHealth;
Invisible = DuringKnockback = false;
dropTable = enemyManager.DropTableByID[monsterID];
......@@ -146,16 +146,14 @@ public class Enemy : MonoBehaviour {
public void ChangeDir(NumeratedDir dir)
{
MoveDir = dir;
MoveDir = (int)dir;
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)
{
MoveDir = (NumeratedDir)dir;
MoveDir = dir;
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
......
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