Як можна реалізувати будівництво з блоків? Чи не Minecraft-стайл, а з різних моделей типу стін, дахів, на тіррейне? Так щоб можна було рівно зістикувати, і без перетинів.
А ще, як вирівняти тіррейн в певному радіусі щодо однієї точки?
Розумію, що "треба самому все робити", але немає готових скриптів будівництва, або напрацювань, хоча б початок, щоб перевірялися колізії.
P.S. Як побудоване користувачем відобразити в мультіплеере, або з цим не повинно виникнути прогалини? просто в мультіплеере взагалі не шарю = (
Навряд чи хто поділиться, сам зіткнувся з проблемою перевірки вільного місця. Виявилося важче ніж думав (баг був малопомітний)
Щодо синхронізації по мережі:
Так просто нічого не буде доступний широкому, так чи інакше доведеться думати і робити. Так само вам треба визначитися "яку мережу" будете використовувати.
Щодо зміни динамічно висоти террайна, десь тут (на форумі) був приклад + скрипт, як террейн деформувався від вибухів.
Програміст - це професійний конвертер галюцинацій замовника в жорстку формальну систему.
Еcли хто інстансілл об'єкт, то якщо нетворк інстанси тоді егго положення і переміщених побачать всі гравці - воще не складно. а ось якщо його схопив і рушив не той хто істансіл тоді складніше - НЕ синхронізується - хоча теж рішення є
Уже є ідея використовувати DragRigidBody, лочіть поворот, щоб стіни не падали. Але як інстанси, і захистити від інших гравців. І взагалі, ЧИ БУДЕ працювати DragRigidBody в мультіплеере?
P.S. Ця тема перша в гуглі за запитом "будівництво unity3d", lol
Тут, имхо, основною проблемою є синхронізація, я тут зі знайомим працюю над проектом 3д світу, в якому кожен може будувати.
Оскільки треба зробити 24 \ 7 сервер, і кожен заходить бачив би споруди. Можливо навіть тіррейн повинен буде довантажувати з мережі.
Підучити основи спочатку. Що таке буферизація. Тобто якщо буде використана стандартна команда нетворк інстанси або як там на фотоні допустимо, то цей інстанси буде Буферізірованний, тобто будь-який новий хто зайде побачить кінцевий результат всіх дій які відбувалися з цим го. Навіть якщо він зайшов 100500 років після того як ці операції були пророблені. А як не дати іншим гравцями чіпати чужий інстансірованний об'єкт. Та дуже просто-проблему навіть в тому що всі пересування які він зробить побачить тільки він сам і більше ніхто. Проблеми у тебе великі будуть але не там де ти думаєш. а в адмініструванні гри - збереження запис облік.
Драг ріджібаді йому все одно де працювати. Хоч в мультіплеере хоч де. а синхронізація цей об'єкта який тягають ніяким чином до драгу не відноситься - це інший код зовсім.
Щодо побачить він сам: Що щодо того, що зміни будуть проводитися вже з іншого ип, але господарем? І ще будуть зберігатися чужі зміни у нього самого?
І що буде з об'єктами після рестарту сервера? Адже їх зберігати треба якось.
Сказали ж учи основи. Все що ти проінстансіруешь природно не зберегтися при перезавантаженні гри. ось ці зміни і треба зберігати - складати бази і т д Та потім ще і вантажити кожен раз гру з баз з побудованими об'єктами.
Наскільки сильно зміниться приблизно такий код? Прохання про помилки можливі не говорити, ще не дописав і не тестіл. Просто наскільки це зміниться для мережі?
var curObject. Rigidbody;
var canMove = false;
var MoveModeOn = false;
var speed. int = 1;
function Update # 40; # 41;
# 123;
if # 40; Input. GetKey # 40; KeyCode. M # 41; # 41;
# 123;
MoveModeOn =. MoveModeOn;
canMove = MoveModeOn; // here's a code that checking if player can build (he's admin or it's his plot)
# 125;
if # 40; Input. GetKey # 40; KeyCode. W # 41; curObject canMove # 41;
# 123;
curObject. transform. position. x = curObject. transform. position. x + speed;
# 125;
if # 40; Input. GetKey # 40; KeyCode. S # 41; curObject canMove # 41;
# 123;
curObject. transform. position. x = curObject. transform. position. x - speed;
# 125;
if # 40; Input. GetKey # 40; KeyCode. A # 41; curObject canMove # 41;
# 123;
curObject. transform. position. z = curObject. transform. position. z + speed;
# 125;
if # 40; Input. GetKey # 40; KeyCode. D # 41; curObject canMove # 41;
# 123;
curObject. transform. position. z = curObject. transform. position. z - speed;
# 125;
var mainCamera = FindCamera # 40; # 41; ;
var hit. RaycastHit;
if # 40; Input. GetMouseButtonDown # 40; 1 # 41; # 41;
# 123;
if # 40; Physics. Raycast # 40; mainCamera. ScreenPointToRay # 40; Input. mousePosition # 41 ;. hit. 100 # 41; # 41;
curObject = hit. rigidbody;
# 125;
# 125;