LocationController.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using UnityEngine;
  6. using UnityEngine.AI;
  7. /// <summary>
  8. /// Проектирование помещения
  9. /// не используется
  10. /// </summary>
  11. public class LocationController : MonoBehaviour
  12. {
  13. public List<GameObject> rooms;
  14. public GameObject Location;
  15. // Start is called before the first frame update
  16. void Start()
  17. {
  18. // location_22
  19. //var rooms_0 = rooms.ElementAt(0);
  20. //Cube(rooms_0, new Vector3(6, 8, 1)); //x=6 y=8 h1
  21. //var rooms_1 = rooms.ElementAt(1);
  22. //Cube(rooms_1, new Vector3(2, 10, 1), new Vector2(6, 0));
  23. //var rooms_2 = rooms.ElementAt(2);
  24. //Cube(rooms_2, new Vector3(5, 4, 1), new Vector2(8, 5));
  25. // location_25
  26. var rooms_0 = Instantiate(Resources.Load("GameObjects/Cube", typeof(GameObject)) as GameObject);
  27. rooms_0.transform.SetParent(Location.transform);
  28. Cube(rooms_0, new Vector3(3.57f, 6.31f, 1)); //x=6 y=8 h1
  29. rooms.Add(rooms_0);
  30. var rooms_1 = Instantiate(Resources.Load("GameObjects/Cube", typeof(GameObject)) as GameObject);
  31. rooms_1.transform.SetParent(Location.transform);
  32. Cube(rooms_1, new Vector3(4, 3.7f, 1), new Vector2(3.57f, 0)); //x=6 y=8 h1
  33. rooms.Add(rooms_1);
  34. var rooms_2 = Instantiate(Resources.Load("GameObjects/Cube", typeof(GameObject)) as GameObject);
  35. rooms_2.transform.SetParent(Location.transform);
  36. Cube(rooms_2, new Vector3(3, 4.46f, 1), new Vector2(3.57f, 1.85f)); //x=6 y=8 h1
  37. rooms.Add(rooms_2);
  38. //var rooms_1 = rooms.ElementAt(1);
  39. //Cube(rooms_1, new Vector3(2, 10, 1), new Vector2(6, 0));
  40. //var rooms_2 = rooms.ElementAt(2);
  41. //Cube(rooms_2, new Vector3(5, 4, 1), new Vector2(8, 5));
  42. //Room("r0", new Vector3(6, 8, 1)); //x=6 y=8 h1
  43. //Room("r1", new Vector3(2, 10, 1), new Vector2(6, 0));
  44. //Room("r2", new Vector3(5, 4, 1), new Vector2(8, 5));
  45. }
  46. // Update is called once per frame
  47. void Update()
  48. {
  49. }
  50. public static void Cube(GameObject cube, Vector3 cube_size, Vector2 position = new Vector2())
  51. {
  52. //GameObject cube = GameObject.Find("Cube");
  53. cube_size = new Vector3(cube_size.x, cube_size.y, cube_size.z);
  54. Vector3 pos_cube = new Vector3(cube_size.x / 2f, cube_size.z / 2f, cube_size.y / 2f);
  55. cube.transform.position = new Vector3(pos_cube.x + position.x, pos_cube.y, pos_cube.z + position.y);
  56. // above
  57. GameObject plane_a = cube.transform.GetChild(0).gameObject;
  58. //plane_above.transform.localScale = cube_size;
  59. plane_a.transform.localScale = new Vector3(cube_size.x, 0.01f, cube_size.y);
  60. plane_a.transform.localPosition = new Vector3(0, pos_cube.y, 0);//y x=0
  61. // front
  62. GameObject plane_b = cube.transform.GetChild(1).gameObject;
  63. plane_b.transform.localScale = new Vector3(cube_size.x, 0.01f, cube_size.z);
  64. plane_b.transform.localPosition = new Vector3(0, 0, -pos_cube.z);
  65. // side
  66. GameObject plane_c = cube.transform.GetChild(2).gameObject;
  67. plane_c.transform.localScale = new Vector3(cube_size.y, 0.01f, cube_size.z);
  68. plane_c.transform.localPosition = new Vector3(-pos_cube.x, 0, 0);
  69. // низ
  70. GameObject plane_d = cube.transform.GetChild(3).gameObject;
  71. plane_d.transform.localScale = new Vector3(cube_size.x, 0.01f, cube_size.y);
  72. plane_d.transform.localPosition = new Vector3(0, -pos_cube.y, 0);
  73. // зад
  74. GameObject plane_e = cube.transform.GetChild(4).gameObject;
  75. plane_e.transform.localScale = new Vector3(cube_size.y, 0.01f, cube_size.z);
  76. plane_e.transform.localPosition = new Vector3(pos_cube.x, 0, 0);
  77. // front 2
  78. GameObject plane_f = cube.transform.GetChild(5).gameObject;
  79. plane_f.transform.localScale = new Vector3(cube_size.x, 0.01f, cube_size.z);
  80. plane_f.transform.localPosition = new Vector3(0, 0, pos_cube.z);
  81. }
  82. public static void Room(string room_name, Vector3 cube_size, Vector2 position = new Vector2())
  83. {
  84. //GameObject cube = GameObject.Find("Cube");
  85. var room = Instantiate(Resources.Load("GameObjects/RoomTest", typeof(GameObject)) as GameObject);
  86. room.name = room_name;
  87. cube_size = new Vector3(cube_size.x, cube_size.y, cube_size.z);
  88. Vector3 pos_cube = new Vector3(cube_size.x / 2f, cube_size.z / 2f, cube_size.y / 2f);
  89. room.transform.position = new Vector3(pos_cube.x + position.x, pos_cube.y, pos_cube.z + position.y);
  90. // above
  91. var SideA = room.transform.GetChild(0).gameObject;
  92. var panel_a = Instantiate(Resources.Load("GameObjects/Panel", typeof(GameObject)) as GameObject);
  93. panel_a.name = "Plane_a_" + 0;
  94. panel_a.transform.SetParent(SideA.transform);
  95. //GameObject plane_a = cube.transform.GetChild(0).gameObject;
  96. //plane_above.transform.localScale = cube_size;
  97. panel_a.transform.localScale = new Vector3(cube_size.x, 0.01f, cube_size.y);
  98. panel_a.transform.localPosition = new Vector3(0, pos_cube.y, 0);//y x=0
  99. panel_a.transform.rotation = SideA.transform.rotation;
  100. // front
  101. var SideB = room.transform.GetChild(1).gameObject;
  102. //GameObject plane_b = cube.transform.GetChild(1).gameObject;
  103. //plane_b.transform.localScale = new Vector3(cube_size.x, 0.01f, cube_size.z);
  104. for (int i = 0; i < cube_size.x; i++)
  105. {
  106. var panel = Instantiate(Resources.Load("GameObjects/Panel", typeof(GameObject))) as GameObject;
  107. panel.name = "Plane_b_" + i;
  108. panel.transform.SetParent(SideB.transform);
  109. panel.transform.localPosition = new Vector3(i, 0, -pos_cube.z);
  110. panel.transform.rotation = SideB.transform.rotation;
  111. }
  112. // side
  113. var SideC = room.transform.GetChild(2).gameObject;
  114. //GameObject plane_c = cube.transform.GetChild(2).gameObject;
  115. for (int i = 0; i > -cube_size.x; i--)
  116. {
  117. var panel = Instantiate(Resources.Load("GameObjects/Panel", typeof(GameObject))) as GameObject;
  118. panel.name = "Plane_c_" + i;
  119. panel.transform.SetParent(SideC.transform);
  120. panel.transform.position = new Vector3(i, 0, 0);
  121. panel.transform.rotation = SideC.transform.rotation;
  122. }
  123. // низ
  124. var SideD = room.transform.GetChild(3).gameObject;
  125. var panel_d = Instantiate(Resources.Load("GameObjects/Panel", typeof(GameObject))) as GameObject;
  126. //GameObject plane_d = cube.transform.GetChild(3).gameObject;
  127. panel_d.name = "Plane_d_" + 0;
  128. panel_d.transform.SetParent(SideD.transform);
  129. panel_d.transform.localScale = new Vector3(cube_size.x, 0.01f, cube_size.y);
  130. panel_d.transform.position = new Vector3(0, -pos_cube.y, 0);
  131. panel_d.transform.rotation = SideD.transform.rotation;
  132. // зад
  133. var SideE = room.transform.GetChild(4).gameObject;
  134. for (int i = 0; i > -cube_size.x; i--)
  135. {
  136. var panel = Instantiate(Resources.Load("GameObjects/Panel", typeof(GameObject))) as GameObject;
  137. //GameObject plane_e = cube.transform.GetChild(4).gameObject;
  138. panel.name = "Plane_e_" + i;
  139. panel.transform.SetParent(SideE.transform);
  140. panel.transform.position = new Vector3(pos_cube.x, 0, 0);
  141. panel.transform.rotation = SideE.transform.rotation;
  142. }
  143. // front 2
  144. var SideF = room.transform.GetChild(5).gameObject;
  145. for (int i = 0; i > -cube_size.x; i--)
  146. {
  147. var panel = Instantiate(Resources.Load("GameObjects/Panel", typeof(GameObject))) as GameObject;
  148. //GameObject plane_f = cube.transform.GetChild(5).gameObject;
  149. panel.name = "Plane_f_" + i;
  150. panel.transform.SetParent(SideF.transform);
  151. panel.transform.position = new Vector3(0, 0, pos_cube.z);
  152. panel.transform.rotation = SideF.transform.rotation;
  153. }
  154. }
  155. //public GameObject currentTank;
  156. //private GameObject Tank;
  157. private NavMeshAgent agent;
  158. public GameObject SpotSpawn;
  159. public Vector3 target;
  160. private bool b_target = true;
  161. public void TakePosition()
  162. {
  163. var Tank = Instantiate(Instantiate(Resources.Load("GameObjects/Panel", typeof(GameObject))) as GameObject);
  164. Tank.transform.position = SpotSpawn.transform.position;
  165. if (Tank != null)
  166. {
  167. Ray ray;
  168. RaycastHit hit;
  169. ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition);
  170. if (Physics.Raycast(ray, out hit, 10000.0f))
  171. {
  172. // Tank.transform.position = hit.point;
  173. target = hit.point;
  174. if (b_target)
  175. {
  176. if (Vector3.Distance(target, transform.position) > 2f)
  177. {
  178. agent.SetDestination(target);
  179. b_target = false;
  180. Tank = null;
  181. }
  182. }
  183. }
  184. }
  185. }
  186. //public GameObject tankTemplatePrefab; //префаб для прозрачного танка
  187. //public GameObject tankPrefab; //префаб оригинального танка
  188. public LayerMask terrainMask; //слой который назначет террейну
  189. // этот метод назначить на клик кнопки "создать танк"
  190. public void makeTankOnClick()
  191. {
  192. //запускаем корутину
  193. StartCoroutine("setTankPosition");
  194. }
  195. /// <summary>
  196. /// http://unity3d.ru/distribution/viewtopic.php?f=18&t=36275
  197. /// </summary>
  198. /// <returns></returns>
  199. IEnumerator setTankPosition()
  200. {
  201. // создаём прозрачный танк
  202. GameObject tankTemplate = Instantiate<GameObject>(Instantiate(Resources.Load("GameObjects/Panel", typeof(GameObject))) as GameObject);
  203. // переменные для обнаружения столкновений мышки с террейном
  204. Ray ray;
  205. RaycastHit hit;
  206. // бесконечный цикл до тех пор, пока не кликнем по террейну
  207. while (true)
  208. {
  209. // пускаем луч из мышки
  210. ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  211. // если луч попал в террейн
  212. if (Physics.Raycast(ray, out hit, terrainMask))
  213. {
  214. // перемещаем прозрачный танк в позицию столкновения луча и террейна
  215. tankTemplate.transform.position = hit.point;
  216. //tankPrefab.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
  217. // если нажали левую кнопку мышки
  218. if (Input.GetMouseButtonDown(0))
  219. {
  220. // удаляем прозрачный танк
  221. Destroy(tankTemplate);
  222. // и создаём оригинальный танк на его месте
  223. GameObject tank = Instantiate<GameObject>(Instantiate(Resources.Load("GameObjects/Panel", typeof(GameObject))) as GameObject);
  224. tank.transform.position = hit.point;
  225. //пустить tank в плаванье через навигейтАгент
  226. // останавливаем корутину
  227. yield break;
  228. }
  229. }
  230. yield return null;
  231. }
  232. }
  233. }