1. 실행 이미지

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Tank : MonoBehaviour
{
    [SerializeField] GameObject indicator;
    [SerializeField] Sprite tank_mode;
    [SerializeField] Sprite siege_mode;

    public float speed = 5.0f; // 이동 속도
    private Vector3 targetPosition; // 목표 위치
    private bool isMoving = false; // 이동 중 여부
    private bool isSiege = false; // 시즈모드 여부

    void Start()
    {
        indicator.SetActive(false);
        StartCoroutine("CoMove");
        StartCoroutine("ChangeMode");
    }

    IEnumerator CoMove()
    {
        while (true)
        {
            // 마우스 우클릭 감지
            if (Input.GetMouseButtonDown(1) && !isSiege) // 시즈 모드가 아닐 때만 이동
            {
                // 마우스 포인터 위치를 월드 좌표로 변환
                targetPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                targetPosition.z = transform.position.z; // z 좌표는 변경하지 않음

                StopCoroutine("MoveIndicator");
                StartCoroutine("MoveIndicator",targetPosition);


                if (transform.position.x < targetPosition.x) this.gameObject.transform.localScale = new Vector3(1, 1, 1);
                else this.gameObject.transform.localScale = new Vector3(-1, 1, 1);
                isMoving = true; // 이동 시작
            }

            if (isMoving && !isSiege)
            {
                // 현재 위치에서 목표 위치로 천천히 이동
                transform.position = Vector2.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);


                // 목표 위치에 도달했는지 확인
                if (transform.position == targetPosition)
                {
                    isMoving = false; // 이동 중지
                }
            }

            yield return null;
        }
    }

    IEnumerator ChangeMode()
    {
        while (true)
        {
            if (Input.GetKeyDown(KeyCode.O))
            {
                isSiege = !isSiege; // 시즈 모드 토글
                if (isSiege)
                {
                    this.gameObject.GetComponent<SpriteRenderer>().sprite = siege_mode;
                    isMoving = false; // 시즈 모드일 때는 이동 중지
                }
                else
                {
                    this.gameObject.GetComponent<SpriteRenderer>().sprite = tank_mode;
                    // 마우스 우클릭으로 새로운 위치를 지정하기 전까지 이동하지 않음
                }
            }
            yield return null;
        }
    }

    IEnumerator MoveIndicator(Vector3 position)
    {
        this.indicator.SetActive(true);
        this.indicator.transform.position = position;
        yield return new WaitForSeconds(0.5f);
        this.indicator.SetActive(false);

        yield break;
    }

}

+ Recent posts