본문 바로가기
게임개발/게임플랫폼 응용 프로그래밍

벌쳐 지뢰 매설하기

by pudding81 2024. 2. 28.

 

 

 

 

 

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

public class SpiderMine 
{
    //생성자 
    public SpiderMine()
    {

    }
}

 

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


public class Vurture : MonoBehaviour
{

    List<SpiderMine> mines; 
    private const int CAPACITY = 3; //고정상수

    public GameObject minePrefab; //프리팹만들기 
    Vector3 mousePos, transPos, targetPos; 

    private void Awake()
    {
        Debug.LogFormat("{0}(이)가 생성되었습니다.", this);
    }


    void Start()
    {
       this.mines = new List<SpiderMine>();

        for (int i = 0; i < CAPACITY; i++)
        {
            this.CreateMine(); //최대 갯수만큼 지뢰 생성하기 
        }

    }


    void Update()
    {
        //마우스 클릭해서 움직이기
        if (Input.GetMouseButtonDown(0))
        {
            CalTargetPos();

            MoveToTarget();
        }

        //마인 떨어뜨리기

        if (Input.GetKeyDown(KeyCode.I))
        {
            this.LandMine();        
        }
     
    }


    private void CreateMine() //마인 생성하기
    {
        var mine = new SpiderMine();
        this.mines.Add(mine);
        Debug.LogFormat("{0}을 생성 했습니다. ({1}/{2})", mine, this.mines.Count, CAPACITY);
    }


    private void MoveToTarget() //타겟위치로 이동하기
    {
        transform.position = targetPos;
    }

    private void CalTargetPos() //타겟위치 계산하기
    {
        mousePos = Input.mousePosition;
        transPos = Camera.main.ScreenToWorldPoint(mousePos);
        targetPos = new Vector3(transPos.x,transPos.y, 0);

    }

    //지뢰를 매설하기 
    void LandMine()
    {
        if (mines.Count > 0) //지뢰가 있으면
        {
            var mine = this.mines[mines.Count - 1];
            this.mines.Remove(mine); //지뢰매설하기
            
            //프리팹 벌처 위치에 생성하기
            this.minePrefab.transform.position = this.transform.position;
            Instantiate(this.minePrefab);

            Debug.LogFormat("지뢰를 매설 했습니다. ({0}/{1})", this.mines.Count, CAPACITY);
        }
        else
        {
            Debug.Log("<color=red>더이상 지뢰가 없습니다.</color>");
        }
    }

}

 

마우스를 클릭한 위치로 이동하기 힘들어따~~~~

 

 

 

* 참고

 

 

오브젝트가 궤적을  남기면서 이동하고 싶다면

 

    void Update()
 {
   //마우스 클릭해서 움직이기
   if (Input.GetMouseButtonDown(0))
   {
       CalTargetPos();

       MoveToTarget();

   }
}



  private void CalTargetPos()
  {
      mousePos = Input.mousePosition;
      transPos = Camera.main.ScreenToWorldPoint(mousePos);
      targetPos = new Vector3(transPos.x,transPos.y, 0);

  }
  
  //오브젝트가 궤적을 남기면서 이동하고 싶다면 
    private void MoveToTarget()
  {
      transform.position = Vector3.MoveTowards(transform.position,targetPos,Time.deltaTime*Speed);
  }

 

 

마우스를 클릭한 상태에서 이동하고 싶다면 

 

 

    void Update()
 {
   //마우스 클릭한 상태에서 이동하고 싶다면
   if (Input.GetMouseButton(0))
   {
       CalTargetPos();

       MoveToTarget();

   }
}



  private void CalTargetPos()
  {
      mousePos = Input.mousePosition;
      transPos = Camera.main.ScreenToWorldPoint(mousePos);
      targetPos = new Vector3(transPos.x,transPos.y, 0);

  }
  
  //오브젝트가 궤적을 남기면서 이동하고 싶다면 
    private void MoveToTarget()
  {
      transform.position = Vector3.MoveTowards(transform.position,targetPos,Time.deltaTime*Speed);
  }