이전글 : 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); } } } |