MaxEggplant | Дата: Воскресенье, 22 Ноября 2020, 15:01 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Возникла проблема: Собираю рамку из кусочков, заранее заданного размера. Правая граница должна находиться на 0 по Х, тем не менее, по какой-то причине вся конструкция почему-то смещается влево и вперед на фиксированное значение, вне зависимости от размеров рамки. Может быть у меня замылился глаз, и я просто уже не вижу строку, в которой сам когда-то присвоил это смещение. Иначе - не догадываюсь в чем причина, от слова совсем. Хелп! Ниже приведено изображение результата работы кода и сам код. На картинке выделены оси X и Z для лучшей наглядности.
КАРТИНКА (пристите, сюда изображение прикрепляться не захотело)
Код using System.Collections; using System.Collections.Generic; using UnityEngine;
public class CaseBuilder : MonoBehaviour { public int _caseWidth; public int _caseHeight;
public float _caseBlockSize = 0.5f;
public string _CaseBlocksPath; //путь к префабам кейса public string _hinge; //префаб петли public string _handle; //префаб рукояти public string _angle; //префаб блока угла public string _wall; //префаб блока стены public string _floor; //префаб блока дна
public Vector3 _startBuildPoint = Vector3.zero;
public Vector3 _upLeft = Vector3.zero; public Vector3 _upRight = Vector3.up * 90; public Vector3 _downLeft = Vector3.up * 270; public Vector3 _downRight = Vector3.up * 180;
public void BuildCase() { GameObject Case = SetGameObject(Vector3.zero, Vector3.one, "case"); Case.AddComponent<CaseEngine>(); BuildParts(SetGameObject(Vector3.zero, Vector3.one, "TopPart", Case.transform).transform, new Vector3(-_caseWidth * _caseBlockSize, 0, _caseHeight * _caseBlockSize)); } public GameObject SetGameObject(Vector3 pos = new Vector3(), Vector3 size = new Vector3(), string name = "obj", Transform parent = null) { GameObject Obj = new GameObject(name); Obj.transform.SetParent(parent); Obj.transform.position = pos; Obj.transform.localScale = size; return Obj; } public GameObject LoadGameObject(string prefName, string name, Vector3 pos = new Vector3(), Vector3 rot = new Vector3(), Transform parrent = null) { GameObject InstObj = Instantiate(Resources.Load(_CaseBlocksPath + "/" + prefName), pos, Quaternion.identity, parrent) as GameObject; if (rot != Vector3.zero) InstObj.transform.rotation = Quaternion.Euler(rot); else InstObj.transform.rotation = Quaternion.Euler(Vector3.zero); if (name != null) InstObj.name = name; return InstObj; } public void BuildParts(Transform parrent, Vector3 startPos) { //_startBuildPoint = startPos + new Vector3(-_caseWidth * _caseBlockSize, 0, _caseHeight * _caseBlockSize); Vector3 BlockPosition = startPos; for (int y = 0; y < _caseHeight; y++) { for (int x = 0; x < _caseWidth; x++) { LoadGameObject(ChangeBlockShapePath(x, y), "Block", BlockPosition, ChangeBlockRotation(x, y), parrent); BlockPosition.x += _caseBlockSize; } BlockPosition.x = startPos.x; BlockPosition.z -= _caseBlockSize; } } public string ChangeBlockShapePath(int x, int y) //принимает (x,y) позицию, возвращает ссылку на блок соответствующий переданной позиции { string prefName = _wall; if ((x == 0 || x == _caseWidth - 1) && (y == 0 || y == _caseHeight - 1)) prefName = _angle; else if ((x > 0 && x < _caseWidth - 1) && (y > 0 && y < _caseHeight - 1)) prefName = _floor; else prefName = _wall;
return prefName; } public Vector3 ChangeBlockRotation(int x, int y) //(осторожно, лапша)принимает (x,y) позицию, возвращает поворот объекта { Vector3 Rotation = Vector3.zero; if (!((x > 0 && x < _caseWidth - 1) && (y > 0 && y < _caseHeight - 1))) { if (x == 0) Rotation = _upLeft; if (y == 0) Rotation = _upRight; if (x == _caseWidth - 1) Rotation = _downRight; if (y == _caseHeight - 1) Rotation = _downLeft;
} if ((x < 1 || x > _caseWidth - 2) && (y < 1 || y > _caseHeight - 2)) {
if (x == 0) { if (y == 0) Rotation = _upLeft; if (y >= _caseWidth - 1) Rotation = _downLeft; } else if (x == _caseWidth - 1) {
if (y == 0) Rotation = _upRight; if (y >= _caseWidth - 1) Rotation = _downRight; }
} return Rotation; } }
Сообщение отредактировал MaxEggplant - Воскресенье, 22 Ноября 2020, 15:03 |
|
| |