TigerProject/Assets/Test/Monster/GroundEnemyMovement.cs

77 lines
2.0 KiB
C#
Raw Normal View History

using UnityEngine;
using System.Collections.Generic;
public class GroundEnemyMovement : Entity
{
[SerializeField]
private Rigidbody2D rigidBody;
[SerializeField]
private SpriteRenderer spriteRenderer;
[SerializeField]
private float Speed = 3f;
[SerializeField]
private float startDirection = 1.5f;
private float currentDirection;
private float halfWidth;
private Vector2 movemenet;
private void Start()
{
halfWidth = spriteRenderer.bounds.extents.x;
currentDirection = startDirection > 0 ? 1f : -1f;
spriteRenderer.flipX = currentDirection == 1 ? false : true;
}
void FixedUpdate()
{
movemenet.x = Speed * currentDirection;
movemenet.y = rigidBody.linearVelocity.y;
rigidBody.linearVelocity = movemenet;
SetDirection();
}
private void SetDirection()
{
Vector2 frontVec = transform.position;
Vector2 wallDir = Vector2.right;
if (currentDirection > 0)
{
frontVec += Vector2.right * halfWidth;
wallDir = Vector2.right;
}else
{
frontVec += Vector2.left * halfWidth;
wallDir = Vector2.left;
}
RaycastHit2D cliffHit = Physics2D.Raycast(frontVec, Vector2.down, 1f, LayerMask.GetMask("Ground"));
Debug.DrawRay(frontVec, Vector2.down * 1f, Color.green);
float wallDist = halfWidth + 0.2f;
RaycastHit2D wallHit = Physics2D.Raycast(transform.position, wallDir, wallDist, LayerMask.GetMask("Ground"));
Debug.DrawRay(transform.position, wallDir * wallDist, Color.blue);
if (cliffHit.collider == null || wallHit.collider != null)
{
Turn();
}
}
private void Turn()
{
currentDirection *= -1;
spriteRenderer.flipX = !spriteRenderer.flipX;
}
private void OnCollisionEnter2D(Collision2D collision)
{
// <20>ε<EFBFBD><CEB5><EFBFBD> <20><>ü<EFBFBD><C3BC> <20>±װ<C2B1> "Player"<22><><EFBFBD><EFBFBD>
if (collision.gameObject.CompareTag("Player"))
{
Die();
}
}
}