private void AddPartFromPrefab(GameObject prefab) { var part = Instantiate(prefab, transform).transform; Vector3 position = Vector3.zero; if (_parts.Count == 1) { var face = Face; position = face.localPosition - face.forward; _world.ChangePositionInWorldBorders(ref position); } else if (_parts.Count >= 2) { var lastPart = _parts[_parts.Count - 1]; var preLastPart = _parts[_parts.Count - 2]; if (Vector3.Distance(_prevPositionNextPart, lastPart.localPosition) <= 1) { position = _prevPositionNextPart.ConvertToInt(); } else { position = lastPart.localPosition - (preLastPart.localPosition - lastPart.localPosition); } _world.ChangePositionInWorldBorders(ref position); } part.localPosition = position; _parts.Add(part); }