이전글 : https://arca.live/b/programmer/68310045

1. Player / 에너미 인스펙트





Enemy에 적용된 스크립트

public partial class Enemy_Script : MonoBehaviour // 변수 모음
{
    //컴포넌트 가져오기
    GameObject enemy_obj;
    Rigidbody2D enemy_rigid;
    SpriteRenderer enemy_Renderer;
    Animator enemy_animator;

    //행동 변수
    [SerializeField]
    private int enemy_move; // 몬스터 이동 속도  
   
    [SerializeField]
    private float enemyStateTime; // 생각 쿨타임

    [SerializeField]
    Vector2 enemyRaypoint;



}



public partial class Enemy_Script : MonoBehaviour // 함수 모음
{        
    void think()
    {
        enemy_move = Random.Range(-4, 5);
       
        while (enemy_move == 0)
        {
            enemy_move = Random.Range(-4, 5);
        }
       

        // 최소값은 랜덤에 포함되지만 최대값은 랜덤에 포함되지 않는다.
    }
    bool flipx_true()
    {
       return this.enemy_Renderer.flipX = true;
    }

    bool flipx_false()
    {
       return this.enemy_Renderer.flipX = false;
    }

}


public partial class Enemy_Script : MonoBehaviour// 유니티 구동 모음
{
    void Start()
    {
        //컴포넌트 가져오기
        enemy_rigid = GetComponent<Rigidbody2D>();
        enemy_Renderer = GetComponent<SpriteRenderer>();
        enemy_animator = GetComponent<Animator>();

        // 몬스터 속도 초기화
        think();
    }

    // Update is called once per frame
    void Update()
    {
        // 생각쿨타임
        enemyStateTime += Time.deltaTime;
        // 적 이동
        enemy_rigid.velocity = new Vector2(enemy_move, enemy_rigid.velocity.y);

        if (enemyStateTime > 5) // Invoke("think", 5); 로 대체 가능 (Invoke("함수이름", 시간[초])  : 주어진 시간이 지난 뒤, 지정된 함수를 실행하는 함수 )
        {
            think();
            enemyStateTime = 0;
        }

        // 애니메이션
        if (enemy_move > 0)
        {
            flipx_true();
            enemy_animator.SetBool("Enemy_IsWalk", true);
        }
        else if (enemy_move < 0)
        {
            flipx_false();
            enemy_animator.SetBool("Enemy_IsWalk", true);
        }
        else
        {
            enemy_animator.SetBool("Enemy_IsWalk", false);
        }

        enemyRaypoint = transform.position + new Vector3((float)enemy_move*0.3f, -0.55f,0);
        Debug.DrawRay(enemyRaypoint,Vector2.down,new Color(0,1,0));
        RaycastHit2D enemy_watching_obj = Physics2D.Raycast(enemyRaypoint,Vector2.down,1f);

        if (enemy_watching_obj.collider == null)
        {
            enemy_move = 0;
            Invoke("think", 1);
        }


    }

}