using System.Collections; using System.Collections.Generic; using UnityEngine; namespace BuildSystem { public class MouseClick : MonoBehaviour { public Transform ground;//地图 public Camera camera; RaycastHit raycastHit; /// /// 返回鼠标在地图上的坐标 /// /// public Vector3Int MouseInGrid() { Vector3 groundPos = camera.WorldToScreenPoint(ground.transform.position); Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, groundPos.z); Vector3 worldMousePos = camera.ScreenToWorldPoint(mousePos); Ray ray = new Ray(camera.transform.position, worldMousePos - camera.transform.position); //Debug.DrawRay(camera.transform.position, worldMousePos - camera.transform.position,Color.blue); int layerMask = (1 << 8) | (1 << 10); layerMask = ~layerMask; //取消obj层防止遮挡 if (Physics.Raycast(ray, out raycastHit,1000f ,layerMask)) { if (raycastHit.collider.tag == "Map") { //Debug.Log(WorldInGrid(raycastHit.point)); return WorldInGrid(raycastHit.point); } } return new Vector3Int(-1,-1,-1); } /// /// 给定一个世界坐标,判断坐标位于哪个grid /// /// /// Vector3Int WorldInGrid(Vector3 pos) { Vector3 gridSpace = pos - BuildSystemManager.Instance.startPos; int x = (int)(gridSpace.x / BuildSystemManager.Instance.gridSize); int z = (int)(gridSpace.z / BuildSystemManager.Instance.gridSize); return new Vector3Int(x,0,z); } } }