Guest User

Untitled

a guest
Mar 18th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.10 KB | None | 0 0
  1. LeftTile
  2. Tile
  3. LeftAttachPoint
  4. TopAttachPoint
  5.  
  6. TopTile
  7. Tile
  8. LeftAttachPoint
  9. TopAttachPoint
  10.  
  11. public class TileManager : MonoBehaviour {
  12.  
  13. public GameObject [] prefabs;
  14. public GameObject currentTile;
  15.  
  16. // Use this for initialization
  17. void Start () {
  18. for (int i = 0; i < 100; i++)
  19. {
  20. SpawnTile();
  21. }
  22. }
  23.  
  24. void SpawnTile()
  25. {
  26. int RandomIndex = Random.Range(0,2);
  27. currentTile = (GameObject) Instantiate(prefabs[RandomIndex],currentTile.transform.GetChild(0).transform.GetChild(RandomIndex).position, Quaternion.identity);
  28. }
  29. }
  30.  
  31. public class PlayerScript: MonoBehaviour{
  32. public Point GridPosition { get; set; }
  33.  
  34. public void SetGridPosition(Point gridPos){
  35. this.GridPosition = gridPos; //Этот метод нужен для установки новой позиции игрока при перемещении на тайл с такой-то позицией.
  36. }
  37. }
  38.  
  39. public class TileScript: MonoBehaviour{
  40. public Point GridPosition { get; set; }
  41.  
  42. public void SetTileGridPosition (Point gridPos, GameObject Tile, Vector3 newTilePos){
  43. this.GridPosition = gridPos;
  44. Tile.transform.position = newTilePos;
  45. GameManager.TilesArray.Add (Tile);
  46. GameManager.AllTilesPoints.Add (gridPos);
  47. }
  48. }
  49.  
  50. public static List<GameObject> TilesArray = new List<GameObject>();
  51. public static List<Point> AllTilesPoints = new List<Point>();
  52. [SerializeField]
  53. private GameObject TilePrefab;
  54. private float TileWidthOffset; //...переменная для рассчёта ширины тайла
  55. private float TileHeightOffset;//...переменная для рассчёта высоты тайла
  56.  
  57. void Start(){
  58. SetTileOffsets();
  59. CreateTiles (TilePrefab);
  60. }
  61.  
  62. private void CreateTiles(GameObject TilePrefab){
  63. Vector3 TilesStart = new Vector3 (0f,0f,0f); //С какой позиции мы будем начинать спавнить тайлы
  64. //Здесь возможен любой другой цикл for создания тайлов, это уже на усмотрения твоей задумки, сколько и как нужны расположить тайлы
  65. //Пример создания сетки из пяти тайлов
  66. for (int y = 0; y < 5; y++) {
  67. for (int x = 0; x < 5; x++) {
  68. GameObject Tile = Instantiate (TilePrefab);
  69. Vector3 newTilePos = new Vector3(TilesStart.x + (TileWidthOffset * x), TilesStart.y+ (TileHeightOffset * y), 0f);
  70. Tile.GetComponent<TileScript> ().SetTileGridPosition (new Point (x, y), Tile, newTilePos );
  71. }
  72. }
  73. }
  74.  
  75. private void SetTileOffsets(){
  76. //....Здесь твой метод, рассчитывающий высоту / ширину твоего тайла для тайл оффсета....
  77.  
  78. }
  79. private void GoOverTilesArray(Point TileCheckPoint){
  80. for (int i = 0; i < TilesArray.Count; i++) {
  81. if (TileCheckPoint = TilesArray [i].GetComponent<TileScript> ().GridPosition) {
  82. Debug.Log ("Это тайл с позицией: " + TileCheckPoint.X + ", " + TileCheckPoint.Y);
  83. }
  84.  
  85. }
  86. }
  87.  
  88. private void OnMouseDown(){
  89. CheckTilesDirections ();
  90. }
  91.  
  92. private void CheckTilesDirections(){
  93. //Метод проверки направления тайла
  94. Point PlayerPoint = Player.GetComponent<PlayerScript>().GridPosition;
  95. float x = PlayerPoint.X;
  96. float y = PlayerPoint.Y;
  97. Point TileCheckPoint = new Point (x, y);
  98. //Проверяем существование пойнта в листе и если он существует, то какой это тайл
  99. //Допустим мы проверяем квадрат позиций вокруг игрока
  100. for (y + 1; y >= (y - 1); y--) {
  101. for (x - 1; x <= (x + 1); x++) {
  102. TileCheckPoint = new Point (x, y);
  103. if (GameManager.AllTilesPoints.Contains (TileCheckPoint)) {
  104. GameManager.GoOverTilesArray (TileCheckPoint); //Здесь мы просто выводим позиции тайлов в квадрате позиций, окружающих игрока.
  105. //Таким образом, пройдясь через массив тайлов и сопоставив их пойнт позиции в сетке с нужной нам для проверки позицией,
  106. //мы выводим в консль информацию о позиции этого тайла. Дальше уже додумать код для проверки тайла справа и спереди игрока,
  107. //я думаю не составит труда. Подкину мысль: if ((TileCheckPoint.X= PlayerPoint.X) && (TileCheckPoint.Y=PlayerPoint.Y+1)) - тайл слева в твоём случае
  108. //if ((TileCheckPoint.X = PlayerPoint.X+1) && (TileCheckPoint.Y = PlayerPoint.Y)) - тайл впереди игрока
  109.  
  110. }
  111. }
  112. }
  113. }
  114.  
  115. public struct Point
  116. {
  117. public int X {get; set;}
  118. public int Y {get; set;}
  119.  
  120. public Point(int x, int y){
  121. this.X = x;
  122. this.Y = y;
  123.  
  124. }
  125.  
  126.  
  127. }
Add Comment
Please, Sign In to add comment