결과

 

A* 알고리즘 구현을 해보기 위해 준비하다가 , 마우스 클릭으로 쉽게 장애물을 만들고 장애물 경로를 피해 찾아갔으면 좋겠다 싶어서 마우스 클릭으로 장애물을 만드는 기능을 구현했다.

 

RayCast를 활용하여 구현 하였고 해당 기능이 있으면 Play를 하여 내가 원하는 경로를 직접 만들어 줄 수 있는것이 장점이다.

 

 

코드는 생각나는데로 하드 코딩하여 썩 좋은 코드는 아니다.

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

public class GridMapGenerator : MonoBehaviour
{
    [SerializeField] private GameObject obstacle;
    [SerializeField] private GameObject selectAreaPrefab;

    public LayerMask Selectlayer;
    private GameObject selectArea;

    float delayClick = 0.1f;
    float curClickTimer;

    private void Awake()
    {
        selectArea = Instantiate(selectAreaPrefab);
    }

    private void Update()
    {
        curClickTimer += Time.deltaTime;

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);


        if (Physics.Raycast(ray,out RaycastHit hit,1000.0f))
        {
            Debug.DrawLine(ray.origin, hit.point, Color.red);
            
            selectArea.transform.position = new Vector3(Mathf.Round(hit.point.x), 0.1f, Mathf.Round(hit.point.z));

            if (Input.GetMouseButton(0) && curClickTimer > delayClick && LayerMatchCheck(hit.transform.gameObject.layer, Selectlayer))
            {
                curClickTimer = 0;

                GameObject obj = Instantiate(obstacle);
                Vector3 pos = new Vector3(selectArea.transform.position.x, 0, selectArea.transform.position.z);
                obj.transform.position = pos;
            }
        }

       
    }

    private bool LayerMatchCheck(int target , LayerMask layer)
    {
        if(layer == (layer.value | 1 << target ))
        {
            return true;
        }

        return false;
    }
}

+ Recent posts