Это копия, сохраненная 25 июля 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Прошлый тред: https://2ch.hk/gd/res/401747.html (М)
Официальный сайт: https://unity3d.com/ru
Документация: https://docs.unity3d.com/ru/current/Manual/index.html
Уроки: https://unity3d.com/ru/learn/tutorials
Форум: https://forum.unity3d.com/
Магазин ассетов: https://unity3d.com/ru/asset-store
UnityWiki: http://wiki.unity3d.com/index.php/Main_Page
На Unity сделано много замечательных игр - Rust, Блицкриг 3, Pillars of Eternity, Tyranny, Kerbal Space Program и многие другие. Главным преимуществом Unity перед другими движками является его простота для одиночной разработки. Не нужно иметь целую компанию девелоперов, чтобы сделать хорошую игру. Если ты один или имеешь небольшую команду и хочешь сделать хорошую игру без претензий на ААА, то Unity станет лучшим выбором. Тем не менее, даже крупные корпорации зачастую выбирают для своих игр именно Unity.
FAQ
- Какие у Unity сильные стороны?
- Простота разработки, удобный инструментарий, кроссплатформенность, богатая документация, огромное сообщество.
- Какие у Unity слабые стороны?
- Сложность в создании фотореалистичной графики. Для графики "как в Crysis" рекомендуется взять другой движок. Хотя Unity вполне способен выдавать не уступающую любым другим движкам картинку, это требует определённого навыка от разработчика.
- На каких языках я могу писать скрипты для Unity?
- На выбор два языка - C# и UnityScript. UnityScript - это что-то среднее между JavaScript и ActionScript. Выбирай язык по своему вкусу, они оба вполне удобны, но помни, что большинство примеров написано на C#.
- Для каких жанров подходит Unity?
- Для абсолютно любых! Жанр ограничивается лишь фантазией разработчика (и его умением писать скрипты, разумеется). Можно создавать и РПГ, и стратегии, и слэшеры. Можно делать VR-проекты или Minecraft-подобные песочницы.
- На каких платформах работают созданные с помощью Unity игры?
- Windows, Linux, MacOS, SteamOS, Android, iOS, Windows Phone, PlayStation4, Xbox One, WebGL, Oculus Rift и многие другие. Полный список можно найти на официальном сайте. Таким образом, игры Unity работают на десктопах, на смартфонах, планшетах, приставках, в браузерах, VR-очках и некоторых других системах.
- Часто вижу скриншоты с красивой природой на Unity. Как такое создать?
- Очень просто! В Unity встроены удобные инструменты для создания террейна и SpeedTree для создания деревьев и готовая реализация ветра - не нужно ничего писать или скачивать и подключать плагины - ландшафт в Unity создаётся в пару кликов.
- Что такое стартер киты?
- Starter Kit - это набор скриптов и префабов, а зачастую и графических элементов для игры. Они призваны облегчить разработку игры определённого жанра и как правило разбиты по жанрам (Action-RPG Starter Kit, RTS Starter Kit, 3D Shooter Starter Kit, Space Game Starter Kit, VR Starter Kit и так далее). Также бывают стартер киты различных игровых элементов, не связанных с геймплеем (Nature Starter Kit с дополнительными природными объектами, Medieval Starter Kit со средневековыми объектами и так далее). По сути, стартер киты выполняют в разработке игры ту же роль, что и фреймворки в программировании. Однако стоит отметить, что использование геймплейного стартер кита принуждает разработчика изучать большое количество чужого кода и чужой структуры для внесения своих изменений и полноценного использования. В связи с этим большинство разработчиков предпочитает писать почти всё с нуля, получая полное понимание работы своей игры. Новичкам крайне не рекомендуется начинать знакомство с Unity со стартер китов.
- Что нужно уметь делать для создания полноценной игры, кроме Unity-разработки?
- Кроме непосредственной разработки игры на Unity, требуется также уметь создавать 3D модели (3ds Max, Blender, ZBrush), 2D рисунки (GraphicsGale, Aseprite, Piskel), текстуры (Substance Designer, NeoTextureEdit), музыку (FruityLoops, Ableton). Не обязательно учить это всё - например, в 2D играх не нужны 3D модели, а музыка необходима далеко не всегда. Также вы можете скачивать элементы для ваших игр на бесплатных сайтах. Если у вас есть деньги, то все необходимые элементы можно заказать у фрилансеров на https://www.fl.ru/ (русскоязычный) или https://www.upwork.com/ (англоязычный).
- Бесплатен ли Unity?
- Можно свободно скачивать, использовать и продавать готовые игры на Unity с лицензией Personal - это абсолютно бесплатно! Но на бесплатной версии при запуске игры будет появляться короткий стартовый ролик "Made with Unity", а также ваши доходы ограничены 100 000 долларов в год. Для снятия этих ограничений нужно приобретать платные версии лицензий Unity. В конечном итоге, платные варианты используются лишь крупными компаниями с огромными доходами, тогда как обычные разработчики в большинстве своём используют бесплатную Personal лицензию.
Обучение
- Язык
Итак, с чего же начать изучение этого замечательного движка? Прежде всего, с изучения языка. Самые основы C# можно узнать на интерактивных курсах здесь:
https://dotnetcademy.net/CSharp/Beginner
или в текстовом туториале здесь:
https://www.tutorialspoint.com/csharp/csharp_quick_guide.htm
Для изучения основ UnityScript выучи вначале основы JavaScript:
https://learn.javascript.ru/
Помни, что далеко не все элементы JS есть в US. Чтобы понять, в чём разница между этими двумя языками, прочти эту статью:
http://wiki.unity3d.com/index.php/UnityScript_versus_JavaScript
Помни, что тебе достаточно одного языка из двух и учить их оба одновременно не нужно.
- Движок
Если ты уже умеешь использовать язык, то можно приступать непосредственно к изучению движка. Крайне рекомендется купить/скачать книгу Unity in action (Unity в действии). В ней подробно описываются множество возможностей движка.
http://www.ozon.ru/context/detail/id/34792570/
Также посмотри на видеотуториалы с официального сайта:
https://unity3d.com/learn/tutorials
Если же ты не любишь видеотуториалы (или не понимаешь разговорный английский) и предпочитаешь текст, то посмотри здесь:
http://catlikecoding.com/unity/tutorials/
Тут крайне подробно описан процесс разработки и приведены примеры кода. Эти туториалы универсальны и описывают множество различных частей игры, от работы с текстурами до генерации карты мира. А вот в этом туториале описыватся разработка двухмерной игры с видом сверху:
https://www.raywenderlich.com/61532/unity-2d-tutorial-getting-started
Это будет полезно, даже если ты планируешь разрабатывать трёхмерную игру. Ни в коем случае нельзя обойти вниманием этот сборник туториалов:
https://noobtuts.com/unity
В нём подробно описывается процесс пошагового создания разных игр - двухмерных и трёхмерных.
Разумеется, все эти туториалы охватывают лишь часть возможностей Unity. Самый надёжный способ выучить Unity - это начать делать игру и по мере разработки гуглить непонятные моменты.
Шапка: http://www.writeurl.com/publish/zukmrogwv45ptyuseyol
Кстати, я об этом не подумал, придётся таки рейкастами делать, похоже. Спасибо, анон.
> придётся таки рейкастами делать, похоже
Там и делать нефиг.
GameObject[] objects;
public GameObject closestObject;
void Start () {
objects = GameObject.FindGameObjectsWithTag ("Object");
}
void Update () {
RaysMode (objects);
}
void RaysMode (GameObject[] objs) {
closestObject = null;
float minDist = Mathf.Infinity;
foreach (GameObject obj in objs) {
RaycastHit hit;
Ray ray = new Ray (transform.position, obj.transform.position - transform.position);
if (Physics.Raycast (ray, out hit))
if (hit.transform.tag == "Object" && hit.distance < minDist) {
closestObject = obj;
minDist = hit.distance;
}
}
}
> придётся таки рейкастами делать, похоже
Там и делать нефиг.
GameObject[] objects;
public GameObject closestObject;
void Start () {
objects = GameObject.FindGameObjectsWithTag ("Object");
}
void Update () {
RaysMode (objects);
}
void RaysMode (GameObject[] objs) {
closestObject = null;
float minDist = Mathf.Infinity;
foreach (GameObject obj in objs) {
RaycastHit hit;
Ray ray = new Ray (transform.position, obj.transform.position - transform.position);
if (Physics.Raycast (ray, out hit))
if (hit.transform.tag == "Object" && hit.distance < minDist) {
closestObject = obj;
minDist = hit.distance;
}
}
}
Как в таком случае удобнее загрузить в него префабы, через Resources.Load?
Что тебе там не понятно?
Это тебе не засмеялся-обосрался тред, чтоб по 20 постов в минуту набивать.
Coroutine с yield return WaitForSeconds
После чего там же запускаешь анимацию
Или Invoke("zapuskaemKotika", 5)
А почему такие операции обычно записывают в отдельные функции, а не просто кидают в Update?
Можешь и просто в апдейт. Просто мне так привычнее, не люблю когда в апдейте насрано (а в больших скриптах обычно так и получается), так что я методы инкапсулирую, по итогу в апдейте строк 5-8 и все они по разным методам лежат.
Короче, мне так чисто для восприятия легче.
Если хочешь — пихай в апдейт, суть не поменяется.
Пардон, какой в шараге сленг был, такой в памяти и остался. Мы академиев не кончали.
Анончик,слушай,я вообще не прогромист.Может ты напишешь этот скриптик для меня,плиз?
Если ты не погромист и даже это не понимаешь, то нахера тебе это вообще нужно? Только чтобы анимация котика была?
Тут одним кодом не поможешь. Тут надо пояснить как аниматор создать, как на объект перенести, как в него анимацию передать (если она вообще есть), как туда передать состояние и т.д.
Короче, волшебного кода, который можно просто скопипастить, не получится.
>Тут надо пояснить как аниматор создать, как на объект перенести, как в него анимацию передать (если она вообще есть), как туда передать состояние и т.д.
Вообще то,уже это знаю и всё готово.Говорю же,нужно сделать сделать запуск после 5 секунд после начала сцены.
Окей. И как называется переменная для перехода из состояния "котяра статичен" в состояние "котяра анимирован"?
Я,конечно,не погромист,но переменные вроде как угодно можно называть.Так что пусть будит "KotikObormotik".
> но переменные вроде как угодно можно называть
Можно, ага. Только они должны совпадать с теми, что в аниматоре.
На скрине прогресс за сегодня
Уже лучше. Если просто запускаешь сцену - котяра анимируется? К нему вообще хоть какой-то скрипт привязан?
Анимируется,один раз проходит анимация сразу после запуска сцены.Никаких скриптов.
> один раз проходит анимация
А надо чтоб было постоянно?
Если да, то жмаки по файлу анимации и в инспекторе поставь галочку на Loop Time. А потом уже и скрипт добавишь.
Лезть в переменные аниматора будет явно надолго, так что давай велосипедить.
1. Если сцена запущена — останови.
2. Сними галочку с аниматора (ту что на пикрилейтеде).
3. Создай C# скрипт, назови его CatAnimation.
4. Открой его в редакторе, удали там вообще всё, до последнего символа. И копипасти туда вот это
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CatAnimation : MonoBehaviour {
Animator animator;
void Start () {
animator = GetComponent<Animator> ();
Invoke ("Animate", 5f);
}
void Animate () {
animator.enabled = true;
}
}
5. Перетяни этот скрипт в инспекторе на тот объект, на котором висит аниматор (скорее всего это и есть твой кошак).
Если всё сделаешь правильно, то заработает.
Лезть в переменные аниматора будет явно надолго, так что давай велосипедить.
1. Если сцена запущена — останови.
2. Сними галочку с аниматора (ту что на пикрилейтеде).
3. Создай C# скрипт, назови его CatAnimation.
4. Открой его в редакторе, удали там вообще всё, до последнего символа. И копипасти туда вот это
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CatAnimation : MonoBehaviour {
Animator animator;
void Start () {
animator = GetComponent<Animator> ();
Invoke ("Animate", 5f);
}
void Animate () {
animator.enabled = true;
}
}
5. Перетяни этот скрипт в инспекторе на тот объект, на котором висит аниматор (скорее всего это и есть твой кошак).
Если всё сделаешь правильно, то заработает.
Как ты с подобной реализацией навигации для действий реализуешь прохождение через двери требующие открывания?
Да на здоровье.
А вообще ты какой-то странный. Накатывать юньку только чтобы заанимировать котика — это даже не микроскопом гвозди забивать, это уровнем повыше.
Мне просто нравиться сцены из ассетиков собирать.А котика я в блендере анимировал.
GOAP неприменим к играм. Не трать время на ерунду и используй behavior tree
Спасибо за разъяснения все.
Это у мобов такое? От этого пекарня не сгорит случайно? Я бы в coroutine, а не в апдейт запихал, на крайняк.
Ну если у тебя там будет под две сотни мобов на одной сцене, то может и будет.
Сам догадался уже. Но вот возник более жоский вопрос. Всю ночь гуглил, не смог сделать нормально, рофл.
Как замутить передвижение персонажа в 2D игре с видом сверху, не используя rb?
Пробовал разные варианты через RigidBody2D, но все они очень сильно сказываются на производительности, хотя я мей би ошибку делаю, на всякий случай вот код с использованием rb, если его можно оптимизировать до нужного уровня, то и так сойдет:
using System.Collections;
using UnityEngine;
public class CharacterController2D : MonoBehaviour {
public float speed = 7f;
private Rigidbody2D rb;
void Start () {
rb = GetComponent<Rigidbody2D>();
}
void Update () {
float deltaX = Input.GetAxis("Horizontal");
float deltaY = Input.GetAxis("Vertical");
Vector2 movementXY = new Vector2 (deltaX, deltaY);
movementXY = Vector2.ClampMagnitude(movementXY, speed);
movementXY = speed;
movementXY = Time.deltaTime;
rb.MovePosition (rb.position + movementXY);
}
}
Сам догадался уже. Но вот возник более жоский вопрос. Всю ночь гуглил, не смог сделать нормально, рофл.
Как замутить передвижение персонажа в 2D игре с видом сверху, не используя rb?
Пробовал разные варианты через RigidBody2D, но все они очень сильно сказываются на производительности, хотя я мей би ошибку делаю, на всякий случай вот код с использованием rb, если его можно оптимизировать до нужного уровня, то и так сойдет:
using System.Collections;
using UnityEngine;
public class CharacterController2D : MonoBehaviour {
public float speed = 7f;
private Rigidbody2D rb;
void Start () {
rb = GetComponent<Rigidbody2D>();
}
void Update () {
float deltaX = Input.GetAxis("Horizontal");
float deltaY = Input.GetAxis("Vertical");
Vector2 movementXY = new Vector2 (deltaX, deltaY);
movementXY = Vector2.ClampMagnitude(movementXY, speed);
movementXY = speed;
movementXY = Time.deltaTime;
rb.MovePosition (rb.position + movementXY);
}
}
>\t
)))))
using System.Collections;
using UnityEngine;
public class CharacterController2D : MonoBehaviour {
public float speed = 7f;
private Rigidbody2D rb;
void Start () {
rb = GetComponent<Rigidbody2D>();
}
void Update () {
float deltaX = Input.GetAxis("Horizontal");
float deltaY = Input.GetAxis("Vertical");
Vector2 movementXY = new Vector2 (deltaX, deltaY);
movementXY = Vector2.ClampMagnitude(movementXY, speed);
movementXY = speed;
tmovementXY = Time.deltaTime;
rb.MovePosition (rb.position + movementXY);
}
}
>\t
)))))
using System.Collections;
using UnityEngine;
public class CharacterController2D : MonoBehaviour {
public float speed = 7f;
private Rigidbody2D rb;
void Start () {
rb = GetComponent<Rigidbody2D>();
}
void Update () {
float deltaX = Input.GetAxis("Horizontal");
float deltaY = Input.GetAxis("Vertical");
Vector2 movementXY = new Vector2 (deltaX, deltaY);
movementXY = Vector2.ClampMagnitude(movementXY, speed);
movementXY = speed;
tmovementXY = Time.deltaTime;
rb.MovePosition (rb.position + movementXY);
}
}
>Теперь понял, это примерно как мой второй вариант. Меня в этом варианте смущает сложность контроля за перемещением, ведь после начала движения уже никакое действие не контролирует процесс, прерывания и достижение результата это опосредовано делается в прекондишене занятия ковра
как ты делаешь то. у тебя чтоли каждый тик ИИ не пытается выполнить текущее действие? только выполняет готовый план? на каждом тике при попытке исполнить действие же можно в разные ифы лезть.
>И придётся пердолиться с другими действиями, которые могут инициализировать движение: надо будет где то хранить приоритет действия задавшего движение или что то в это роде.
у тебя же только один текущий экшон. если экшон вообще требует перемещения то он и рулит. если ему рулить ненадо то ИИ делает что-то глобальное.
>>27808
да так себе он. хороший бихейвор три редактор, но плохая навигация.
>>27853
в одно рыло это не выглядит реальным и за 3-4 месяца. как сделать то планируешь?
>>27891
укатывался. я то часто в тред заглядываю, но реагируютолько если показывают что-то интересное.
>Как ты с подобной реализацией навигации для действий реализуешь прохождение через двери требующие открывания?
ну это ты загнул. пока никак. в моем навмеше пока что поломана сериализация для зон которые бы ссылались на конкретные объекты, как починю можно было бы и такое сделать. чтобы была возможность иметь зоны, на которые ссылался бы компонент, который бы переключал их доступность.
но тут это можно разве что если "попасть куда-то" является самим действием. например было бы действие "попасть в склад номер пять", у него было бы прекондицией открытие двери, тогда кнопка открывающая дверь бы генерировала внешнее действие открывающее путь только на этот склад. но если делать хитрожопое что-то например "сломать стену чтобы схватить за задницу сзади", то тут мне придется сильно глубоко лезть в навигацию чтобы такое сделать.
вообще, вот интересное что-то пилишь. правда шейдеры лучше всетаки изучи хоть как-то. там столько мистической тайной хуйни что две недели можно их просто крутить туда-сюда чтобы хоть как-то разобраться.
я вот тоже что-то покажу из этой категории. делаю по человечески свой простенький генератор террейна, но чтобы у него был нодовый редактор который бы работал внутри маски биома.
интересно когда уже в юнити сделают сериализацию абстрактных коллекций. сериализовать ссылки на ресурсы юнити в нодах даже не знаю как.
скриншоты забыл
> Character Controller
> с Rigidbody
Ты либо крестик сними, либо трусы надень.
Что-то одно выбери, короче.
>как ты делаешь то
Я использую reGOAP с парой мелких допилов.
Планер пилит последовательность действий для достижения текущей приоритетной цели. Потом агент начинает выполнять начиная с самого первого. Каждый экшн выполняет своё процедурное тело до успешного завершения и перехода дальше по плану, либо до прерывания с инвалидацией всего плана и перепланированием.
>на каждом тике при попытке исполнить действие же можно в разные ифы лезть
И в каждом действии контролировать перемещение? Со временем охуеешь.
>ну это ты загнул
Сейчас это просто в теле действия, если на пути агента есть дверь, то он тормозит движение, открывает дверь и продолжает после. Делать отдельно действие понадобится только, если делать множество различных решений преодоления двери.
В общем подумаю ещё между выносом навигации и реактивным планером внутри действийвсё равно наверное буду пилить макропланер для сквадов
> Как замутить передвижение персонажа в 2D игре с видом сверху, не используя rb?
Через трансформ, ебать.
Через трансформ эффект хуёвый, если на препятствие пойти. Он каг бы не останавливается, а идёт туда и отбрасывается назад из-за коллайдера.
Спасибо, уберу контроллер.
Алсо, я тут думаю сделать дамаги и прочие взаимодействия через интерфейсы и GetComponent. Например, интерфейс IDamageable {void TakeDamage(int amount)}, IPickable и т.п. Это кажется более гибким, чем наследовать все классы, которые делают какое-то взаимодействие, от одного.
ОнТриггер/ОнЧегоНибудь()
{
var health = (Idamageable)GetComponent(typeof(IDamageable));
if(health != null)
health.TakeDamage(amount);
}
Норм способ, или раковая задумка, и существуют более правоверные способы?
> Спасибо, уберу контроллер.
Я бы убрал риджидбади, если тебе только и надо что ходить и взаимодействовать без особого физона, но то уже сам смотри.
> и существуют более правоверные способы?
Других способов нет. Либо ты делаешь общий родительский класс под все, у чего есть здоровье, либо интерфейс. О, точно, мне же надо как-то ломать всякую мебель и прочее говно. Пойду прикручу к своей йобе.
> Других способов нет. Либо ты делаешь общий родительский класс под все, у чего есть здоровье, либо интерфейс.
Ты сильно недооцениваешь местных повелителей костылей.
Ну хуй знает, что еще. Проверять тег геймобджекта, и в функции на атакующем персонаже в List<> хранить значение здоровья?
Правильно, но проще так: damagable = GetComponent<IDamagable>();
Rigidbody надо чтобы физика была в курсе что эти коллайдеры динамические.
Да, предыдущая 5-ая версия была собрана в 5-ом году от рождества Христова.
Да я помню твои посты лол. Помню охуевал от твоих скиллов.
Теперь вот тоже хочу сделать что-нибудь эдакое. Ну про уровень shader forge я конечно-же пошутил. Это просто так, великая цель для мотивации.
Апдейт. Как оказалось, в юнити уже есть свой фреймворк для создания графов. И именно на нем сделан и редактор анимаций. Если кому интересно, то интро можно найти тут http://unity3de.blogspot.ru/2015/08/reveal-unknown-graph-and-graphgui-class.html. Остальное в дизассеблированных исходниках. Там ничего особенно, но можно сократить время на несколько дней.
Теперь в принципе осталось-только придумать как сгенерировать шейдоры из графа спиздить из shader forge. Пока думаю о чем-то вроде темплейтов
Есть пустой gameObject, к которому прицеплен скрипт, вращающий этот самый gameObject с помощью gameObject.transform.Rotate().
У этого пустого объекта есть два child: сфера и text mesh.
Когда я вращаю родительский объект, то текст слегка убегает от сферы, примерно на пару градусов. Когда вращение останавливается, сфера снова догоняет текст.
Пробовал то же самое с кубом вместо текста, ведет себя точно так же.
Чому так?
> Когда я вращаю родительский объект
Как вращаешь? Ручками на сцене? Через скрипт?
Ты давай подробнее, по твоему посту хер что поймёшь.
А, да, пардон, только проснулся.
Всё равно тут надо знать в каких координатах текст и сфера находятся относительно пустого объекта, что там у тебя в ротейте и т.д.
Давай со скринами и/или видосом.
В общем я неправильно описал проблему.
На сфере с помощью Vectrocity нарисована разметка трехмерными линиями. И эта разметка отстает при вращении сферы, дочерние объекты не при чем.
Структура - главное меню, страница просмотра изображения, страница воспроизведения видео, etc.
Поясните, что они подразумевают под страницей?
Шарп хорошо знаю, но вот юнити пока не очень, UI пилил, но вот что за страницы, так и не понял.
> Поясните, что они подразумевают под страницей?
Ну это тебе лучше знать, хрустальный шар тут у всех давно сломался.
А вообще весь UI в юньке есть изначально.
Страница просмотра видео же, так у меня написано в задании, но вот что это за страница, и как она должна выглядить, я так и не понял.
Ну, видимо, весь канвас, либо его часть. Юнька вполне способна напрямую хавать и рендерить видео.
Т.е. это должен быть объект в пространстве, который будет воспроизводить видео?
Спасибо за помощь, анон.
>>28261
>Я использую reGOAP с парой мелких допилов.
а я кстати его не читал ещё. я свой гоап то с нуля написал. как там организовали хранение стейтов мира?
>И в каждом действии контролировать перемещение? Со временем охуеешь.
так не во всех. у меня например исполнение действий организовано с некоторой иерархией с ГОАП и контролером. у ГОАП в экшоне есть булл будет ли это действие контролировать перемещение, этот бул доступен через менеджер-прослойку контролеру, контролер ещё внутри свой небольшой менеджер стейтов имеет, какая анимация чего делает, чтобы знать когда анимация прерывается. например текущий экшон "поднять предмет", в действии описано "топи туда, если ты уже там то подбирай предмет", в итоге на каждом тике ИИ он топит куда сказали, а когда доходит то предмета идет в менеджер-прослойку и говорит что хочет поднять вот это. тогда уже контролер в своем менеджере анимаций переключает флаг что его активное действие это поднятие предмета и это действие и верхнюю и нижнюю половину тела для этого требует. а ГОАП тем временем через менеджер ждет когда это действие из активного либо провалится, либо завершится. когда анимация завершается в конце триггер что хопа действие завершено которое переключает статус в менеджере анимаций. а потом уже и ГОАП на следующем апдейте видит что флажок переключен на нужный, завершает через менеджер анимацию целиком ставя её на не активную и говорит что действие выполнено(или провалено). проверять кондиции вроде "есть ли предмет", кстати, было довольно плохой идеей, потому что он появляется в инвентаре в момент когда ИИ рукой его хватает, но ему ещё надо распрямится. отсюда и наличие менеджера анимаций, который все упрощает.
а действия вроде "перезарядка" никаких перемещений не требует, но занимает верхнюю половину тела. в итоге пока действие делается, менеджер следует своей активной задаче и управляет перемещением контролера. в итоге контролер и перезаряжается и бегает по укрытиям сразу, а в действии ГОАП описано только то что надо сделать. начать перезаряжатся, ждать когда завершится анимация в конце которой в случае успеха анимации отнять из инвентаря одну обойму.
на время выполнения действий отключаю обновление планирования, чтобы ИИ не подумал что "ооо да у меня же предмет нужный в руке надо бы его использовать" пока он ещё не распрямился после его поднятия, чтобы текущее активное действие было залочено. прерывание действий пока не сделал, но это будет не так и сложно.
пока что лучше не придумал как сделать подобную иерархию, вроде решает все проблемы.
>Сейчас это просто в теле действия, если на пути агента есть дверь, то он тормозит движение, открывает дверь и продолжает после. Делать отдельно действие понадобится только, если делать множество различных решений преодоления двери.
А я бы так не делал. а вдруг дверь будет требовать ключ? вообще технически можно глобальную навигацию сделать через ГОАП. вот у тебя есть набор комнат, некоторые комнаты требуют предмет. при перемещении из комнаты А в Б проверяем через ГОАП весь путь, если путь чист то строим путь через навмеш и идем. если надо ключ то проверяем путь черезе ГОАП уже до комнаты с ключем. один хуй поиск пути на навмеше слабо отличается от поиска пути по нодам ГОАП.
>>28774
Лол, надо же, меня помнят и читают.
>Как оказалось, в юнити уже есть свой фреймворк для создания графов.
вхоу. молодец что нашел. надо будет посмотреть. интересно не спрячут ли в один прекрасный день. интересно что туда положили.
>Теперь в принципе осталось-только придумать как сгенерировать шейдоры из графа
Я кстати читал пару имплементаций таких редакторов. он в итоге был чем-то вроде визуального текстового редактора. когда тыкал кнопку "получить шейдор" то оно там задавало целевым переменным имена, подставляло их на текстовые заготовки, соединяло все заготовки в выбранном порядке и хопа шейдор готов. создание такого выглядит каким-то особым сортом пердолинга, но выглядит достижимым.
>>28261
>Я использую reGOAP с парой мелких допилов.
а я кстати его не читал ещё. я свой гоап то с нуля написал. как там организовали хранение стейтов мира?
>И в каждом действии контролировать перемещение? Со временем охуеешь.
так не во всех. у меня например исполнение действий организовано с некоторой иерархией с ГОАП и контролером. у ГОАП в экшоне есть булл будет ли это действие контролировать перемещение, этот бул доступен через менеджер-прослойку контролеру, контролер ещё внутри свой небольшой менеджер стейтов имеет, какая анимация чего делает, чтобы знать когда анимация прерывается. например текущий экшон "поднять предмет", в действии описано "топи туда, если ты уже там то подбирай предмет", в итоге на каждом тике ИИ он топит куда сказали, а когда доходит то предмета идет в менеджер-прослойку и говорит что хочет поднять вот это. тогда уже контролер в своем менеджере анимаций переключает флаг что его активное действие это поднятие предмета и это действие и верхнюю и нижнюю половину тела для этого требует. а ГОАП тем временем через менеджер ждет когда это действие из активного либо провалится, либо завершится. когда анимация завершается в конце триггер что хопа действие завершено которое переключает статус в менеджере анимаций. а потом уже и ГОАП на следующем апдейте видит что флажок переключен на нужный, завершает через менеджер анимацию целиком ставя её на не активную и говорит что действие выполнено(или провалено). проверять кондиции вроде "есть ли предмет", кстати, было довольно плохой идеей, потому что он появляется в инвентаре в момент когда ИИ рукой его хватает, но ему ещё надо распрямится. отсюда и наличие менеджера анимаций, который все упрощает.
а действия вроде "перезарядка" никаких перемещений не требует, но занимает верхнюю половину тела. в итоге пока действие делается, менеджер следует своей активной задаче и управляет перемещением контролера. в итоге контролер и перезаряжается и бегает по укрытиям сразу, а в действии ГОАП описано только то что надо сделать. начать перезаряжатся, ждать когда завершится анимация в конце которой в случае успеха анимации отнять из инвентаря одну обойму.
на время выполнения действий отключаю обновление планирования, чтобы ИИ не подумал что "ооо да у меня же предмет нужный в руке надо бы его использовать" пока он ещё не распрямился после его поднятия, чтобы текущее активное действие было залочено. прерывание действий пока не сделал, но это будет не так и сложно.
пока что лучше не придумал как сделать подобную иерархию, вроде решает все проблемы.
>Сейчас это просто в теле действия, если на пути агента есть дверь, то он тормозит движение, открывает дверь и продолжает после. Делать отдельно действие понадобится только, если делать множество различных решений преодоления двери.
А я бы так не делал. а вдруг дверь будет требовать ключ? вообще технически можно глобальную навигацию сделать через ГОАП. вот у тебя есть набор комнат, некоторые комнаты требуют предмет. при перемещении из комнаты А в Б проверяем через ГОАП весь путь, если путь чист то строим путь через навмеш и идем. если надо ключ то проверяем путь черезе ГОАП уже до комнаты с ключем. один хуй поиск пути на навмеше слабо отличается от поиска пути по нодам ГОАП.
>>28774
Лол, надо же, меня помнят и читают.
>Как оказалось, в юнити уже есть свой фреймворк для создания графов.
вхоу. молодец что нашел. надо будет посмотреть. интересно не спрячут ли в один прекрасный день. интересно что туда положили.
>Теперь в принципе осталось-только придумать как сгенерировать шейдоры из графа
Я кстати читал пару имплементаций таких редакторов. он в итоге был чем-то вроде визуального текстового редактора. когда тыкал кнопку "получить шейдор" то оно там задавало целевым переменным имена, подставляло их на текстовые заготовки, соединяло все заготовки в выбранном порядке и хопа шейдор готов. создание такого выглядит каким-то особым сортом пердолинга, но выглядит достижимым.
> Т.е. это должен быть объект в пространстве, который будет воспроизводить видео?
Ну блин, я ТЗ полностью не видел, но "UI с воспроизведением видео" звучит так, что надо тупо рендерить видео.
Нууу, и что не ясно? Вот меню с кнопочками: "посмотреть картинку", "посмотреть видосик", "покрутить ползунки".
Как хуйнуть картинку (видосик делается почти так же) на панель — думаю, знаешь, раз на такую работу метишь. Про ползунки вообще молчу.
Не ясно было, что подразумевают под страницей. Как это делается, знаю. Спасибо, что пояснил.
>>28877 >>28879 >>28880
это классика, это знать надо
однажды подают мне значит такое вот же ТЗ
типа, шарики в хуюнити отрисовывай, мы тебе 20к заплатим, тыж спец по графену вроде
а кроме меня там в команде еще погромист и руководитель группы, и тот погромист то вообще нахуй студент.
ну делаю ТЗ, прихожу к погромисту, говорю: вот тебе кнопочки, чо там с прогой, давай на листенеры навешивай функции, а он, пацаны, достаёт значит свой нетбук и показывает скрипт на js под веб, типа, ЯЗДЕЛЯЛЬ.
пиздос, там дедлайны приближаются, я начинаю ему объяснять что в юнети значит component-entity-system, понимаю что он нихуя не понимает, сажусь писать сам
И ТУТ ХУЯК, ОКАЗЫВАЕТСЯ наша контора-заказчик ПРИНЦИПИАЛЬНО, блять, не использует продукты от майкрософт, их всех в детстве билл гейтс покусал похоже, причем сука не просто всюду линуксов понаставили, но даже У НИХ ПРИНЦИП ПРОТИВ СИ и его вариаций, ГОСПОДЬ ВСЕМОГУЩИЙ ЭТАЖИ ПРОДУКТ МАЙКРОСОФТ ТЫ ЩО ДЕЛАЕШ ОКАЯННЫЙ.
а в js я знаю примерно столько чтобы было достаточно div'ы на сайтике скрывать/показывать. var, блять, хуяр! что за нетипизированное говнище. кое-как заговнокодил всё это дерьмо, ну тут классическое У НАС ИЗМЕНИЛАСЬ КОНЦЕПЦИЯ (х2).
доебало пиздец короче. сейчас вообще реквесты потипу пикрелейтед идут.
до сих пор не заплатили.
самарец не человек
>var, блять, хуяр! что за нетипизированное говнище.
В книге читал, что в юнити запили типизацию под js, энивей, автор рекомендовал юзать шарп.
> запили типизацию под js
она в яваскрипте как тема в ТВГ. она есть и можно делать по теме, а можно и не по теме. приписывать var raspidor : GameObject по острому желанию можно.
> энивей, автор рекомендовал юзать шарп
а в монодевелопе js-ников вообще публично унизили, сломав им всплывающие подсказки для автонабора строк.
даа, это они там накрутили. почитал немного. так правда и не нашел пока как в контекстное меню что-то добавлять свое даже после того как в ILSpy расковырял. надо будет потом внимательно прочитать, я даже не знал что есть такая хуйня как EditorUtility.DisplayCustomMenu например. а то я свое контекстное меню уже навелосипедил.
>так правда и не нашел пока как в контекстное меню что-то добавлять свое
Никак. меню захардкожено в protected ShowContextMenu() в OnGraphGUI() в классе GraphGUI. Единственный вариант, это перегрузить OnGraphGUI() и копировать туда весь код из оригинала, кроме меню
Ну это явно не для публичного использования делалось
Монодевалоп и меня унижает. Регулярно крашится, ломается копи-паст, и еще кое-чего.
Специальная бесплатная редакция студии для кириллов поставляется прямо с юнити. Нет, хочу опенсорс какашку кушать. И это разработчики, блядь!
Хотя лично у меня крашится сам юнити во время дебага, студия живее всех живых.
Мда, охуительная история.
Вспомнил случай, когда парень откликнулся на вакансию юнитиёба, ему дали тестовое задание — сделать прототип тауэр дэфэнс на юнити.
Он сделал, выслал, а ему ответили, мол, всё хуйня, вы не сделали игру, вы поработали с движком, а уже движок сделал игру. Он отвечает "ну что просили, то и сделал, давайте скорректируем ТЗ и доработаем, если что-то не так", на что получил ответ "нам нужна игра на юнити, но сделанная самостоятельно, а не движком. а вы этого не сделали, вы сделали на юнити".
Можно погуглить, это вроде на юнити3д.ру было.
>как там организовали хранение стейтов мира?
Словарь<,>
>"поднять предмет", в действии описано "топи туда, если ты уже там то подбирай предмет", в итоге на каждом тике ИИ он топит куда сказали, а когда доходит то предмета идет в менеджер-прослойку и говорит что хочет поднять вот это
Не совсем уловил этот момент. У тебя действие поднятия остаётся активным, пока ты топишь? Завершается по инициализации движения и ставит в очередь действие поднятия?
В классическом ГОАП они выполняются чётко по порядку, следуя установленному плану. Ни одно действие особо не волнует что будут делать другие, оно просто даёт какой то результат и имеет пререквизиты.
У тебя же действия выполняются почти "параллельно":
пока одно не загружает какой то элемент контроллера, на нём могут выполняться другие. Это почти как два синхронизирующихся через состояние навигации планировщика. Выглядит очень круто, но с разрастанием могут появиться проблемы.
>а вдруг дверь будет требовать ключ?
Так я написал же, что отдельное действие необходимо если есть различные способы преодоления двери. Например, АИ может всё так же проходить через дверь, если у него есть ключ, и искать другие пути, если нет.
Если вариантов ещё больше, то стоит сделать отдельный стейт (DoorOpen, true), действия ведущие к нему, и строить навигацию как последовательность дверей и участков пути между ними.
>прерывание действий пока не сделал, но это будет не так и сложно.
Я при старте действия делаю динамический список стейтов мира - прерывателей с учётом стейта цели. Пока работает хорошо.
>Не совсем уловил этот момент. У тебя действие поднятия остаётся активным, пока ты топишь? Завершается по инициализации движения и ставит в очередь действие поднятия?
действие поднятия предмета остается активным пока ИИ топит к предмету. оно отвечает и за перемещение к предмету и за его поднятие. на мой взгляд мало смысла вообще разделять перемещение к предмету и поднятие предмета. действия которые стопроцентно будут идти одно за другим не должны разделятся. вообще я кстати пробовал разделять. у меня была концепция "кучка предметов", и на каждую кучку было процедурное действие "подбежать к кучке номер такой" и каждая кучка ещё действия возвращала связанные с тем какие предметы в ней и у каждого поднятия был рекваермент "быть у кучки такой-то". потом репу почесал и задумался нахуй такая конструкциям нужна.
>пока одно не загружает какой то элемент контроллера, на нём могут выполняться другие. Это почти как два синхронизирующихся через состояние навигации планировщика. Выглядит очень круто, но с разрастанием могут появиться проблемы.
да, вероятно могут. но вообще я пока слабо могу представить какие проблемы не могут быть решены через это. пока есть прослойка которая сообщает ГОАП о статусе действия и эта-же прослойка лимитирует паралельные действия за пределами ГОАП. может быть если буду делать возможность использования техники для ИИ что-то пойдет не так, или когда появятся действия не связанные с ГОАП требующие много времени(лазанье по лестнице например). но в любом случае все это выглядит решаемо.
по моему этот вариант куда лучше чем эта боль с попыткой совместить перемещение и действие. этак на каждый пердеж будет пара вариантов. вроде "перезарядка", "перезарядка на бегу", "перезарядка бегая за укрытие" и прочее. ГОАП конечно здорово, но забивать им гвозди тоже не стоит.
>на мой взгляд мало смысла вообще разделять перемещение к предмету и поднятие предмета
Главное преимущество в том, что можно сделать женерик действие перемещения и разгрузить остальные действия.
>по моему этот вариант куда лучше чем эта боль с попыткой совместить перемещение и действие. этак на каждый пердеж будет пара вариантов. вроде "перезарядка", "перезарядка на бегу", "перезарядка бегая за укрытие" и прочее.
Да, разбираться в этой куче добра со временем станет очень не весело.
Но я пожалуй откажусь от параллельного планирования: буду просто инициировать движение действием и тут же запускать реплан с учётом того что (isOnMove, true). И при завершении движения вызвать коллбек, прерывающий текущий план и пытающийся прервать действие.
Останется только подумать как лучше запилить перывание движения отдельными действиями. Наверное просто для всех действий, требующих остановки, добавлю процедурный прекондишн, сравнивающий приоритет цели, вызвавшей движение и приоритет прерывателя.
>Главное преимущество в том, что можно сделать женерик действие перемещения и разгрузить остальные действия.
да как-то оно не выглядит преймуществом. перемещение до нужной точки один хуй отдается на откуп прослойке между ГОАП и контролером, в имплементации действия движение в итоге задается парой строчек. там же получается в итоге куча вариаций "иди в точку 1", "иди в точку 2", "иди в точку дохуилион". в реГОАП написано что есть обратный поиск, так что разумеется количество вариантов почти похуй, но тут можно и напортачить с флагами в пререкваерментах действий требующих нахождение рядом с нужной позицией. какая-то излишняя комплексность для передачи одного булеана. впрочем работать будет, да.
>Останется только подумать как лучше запилить перывание движения отдельными действиями. Наверное просто для всех действий, требующих остановки, добавлю процедурный прекондишн, сравнивающий приоритет цели, вызвавшей движение и приоритет прерывателя.
я бы так стал делать разве что заранее известны все варианты перемещения ИИ и их немного. если он в начале просто бегает туда-сюда то это ещё выглядит разумным, но если ИИ начнет прыгать на джетпаке, скакать по стенам, делать сальто и прочее то это уже не кажется таким уж разумным вариантом. ещё хуже эта схема выглядит если ИИ может менять мобильность. например ногу оторвало роботу, лежит на земле, но стреляет. что, подчищать у него варианты действий чтоли?
Ммм... mesh-ы потерпели изменения, но я буду дорабатывать их. Ну там... интерьер добавлю и тд.
Хипстер-контора какая то. Принцип против микрософт и жабоскрипт везде.
ГОАП обычно подразумевает обратный поиск, поэтому необходимая точка берётся из следующего действия.
Ещё одно преимущество вынесения действия перемещения - возможность добавления различных вариантов перемещения. Например, АИ может идти/бежать/ползти, что будет делать тремя разными действиями со своими прекондишенами. В твоём варианте надо будет в каждом экшене, требующем перемещения делать ифы, выбирающие один из способов перемещения.
>например ногу оторвало роботу, лежит на земле, но стреляет. что, подчищать у него варианты действий чтоли?
Не пойму суть проблемы? То что он лежит на земле никак не должно мешать стрелять.
Прерывание движения может быть необходимо для выполнения некоторых действий, надо лишь проверять что приоритетнее, продолжить движение или выполнить это действие остановившись.
Например, за АИ-лесорубом гонится лесной нёх, планер берёт цель спасения, которую реализует укрытим в убежище, для чего необходимо оказаться в убежище -> инициируется перемещение, действие завершается. Планер в это время строит новый план, учитывая, что АИ перемещается и конечная цель обладет приоритетом Х.
Но во время бега у него повышается уровень жажды и становится доступной цель удовлетворения биопроблем с приоритетом У, удовлетворить которую он может выпив из фляги в инвентаре, остановившись на месте.
Действие питья требует прерывания активного движения, поэтому в его процедурном прекондишене мы сравнивает приоритеты Х и У, и либо выполняем текущий план, либо инвалидируем и продолжаем движение.
При этом вообще не важно идёт/бежит/летит/телепортируется лесоруб - навигацией занимается другой блок, от которого требуется только посылать коллбек о завершении движения и обрабатывать прерывание.
Робот из примера выше просто будет иметь стейт (CanMove, false), который будет учитываться планером.
>В твоём варианте надо будет в каждом экшене, требующем перемещения делать ифы, выбирающие один из способов перемещения.
зачем? метод перемещения диктуется глобально. то есть если мы крадемся то вообще всё перемещение будет украдкой. а если мы бегаем то все перемещение будет бегом. какие-то сложные варианты вроде "мы быстро подбегаем к медведю но остаток проходим тихо-тихо" легко описывается глобальным "стелс". где если мы не в радиусе обнаружения врагов то бежим, если в радиусе то ползем. какая вообще ситуация возможна когда ГОАП должен руководить методом перемещения?
>Не пойму суть проблемы? То что он лежит на земле никак не должно мешать стрелять.
>Робот из примера выше просто будет иметь стейт (CanMove, false), который будет учитываться планером.
ошибся. не действий. целей. часть целей перестает вообще быть валидными же. иметь много наборов целей под каждое состояние мобильности?
я уже начинаю представлять слабо твой вариант имплементации. начало движения это сразу успешное выполнение движения чтобы пока оно шло делалось сразу следующее действие? а как тогда будешь менять цель движения, если требуется поменять маршрут, но не действие? например действие "сесть в укрытие", но пока идешь до укрытия оно перестает быть валидным.
>метод перемещения диктуется глобально
Но планировщик должен решать как именно мы перемещаемся.
>часть целей перестает вообще быть валидными же
Да, и отметутся планером. У робота без ног останется цель заниматься патрулём, просто она никогда не активируется.
>начало движения это сразу успешное выполнение движения чтобы пока оно шло делалось сразу следующее действие?
Не следующее действие, а вообще другой план. Так что это будет ближе к провалу действия. Здесь нужно расширение терминологии.
>а как тогда будешь менять цель движения, если требуется поменять маршрут, но не действие?
Прокладкой маршрута занимается навмеш же. Если ты имел в виду другие действия, требующие перемещения, то для них нужна такая же проверка как для действий с остановкой: побеждает наивысший приоритет.
>например действие "сесть в укрытие", но пока идешь до укрытия оно перестает быть валидным.
Этот вариант я упустил. Для этого можно сделать цель трансформом, а не точкой и периодически менять точку назначения навмеш агента. Если трансформ вдруг стал нуллом(сенсор укрытий инвалидировал укрытие например) - остановка и реплан.
Если собрать всё вмнесте, то схема примерно такая:
- инициируем движение и отметаем этот план(но без занесения в блеклист, если мы занимаемся подобным)
- пока движение активно, выполняем менее приоритетные действия, не взаимодействующие с перемещением
- если в плане появляется новое действие требующее перемещения, сравниваем приоритеты целей и либо принимаем новый план с новым перемещением, либо отметаем его(желательно занося в блеклист на какое то время)
- при окончании движения прерываем текущий план, если его цель имеет меньший приоритет, чем цель движения, и пытаемся прервать действие. В случае прерывания после реплана мы по идее:3 вернёмся к плану, инициировавшему изначальное движение
Как много сложной математики вы использовали в разработке игр? Было ли что-то не из школьных векторов? Матрицы, теория графов? Пригождалось за знание кватернионов? Вообще, какие разделы математики приходится использовать, не считая те что в школе проходят?
Смотря что делаешь. Если какую-нибудь мобильную тыкалку а-ля "три в ряд", то там математики считай что нет. В шутанах от первого лица - тоже.
А начнёшь писать свой физон, например, вот там уже начинается.
Там вектора, градусы, косинусы-хуёсинусы, матрицы. Ничего особо сложного. Хотя при желании можно и в дебри залезть.
Матрицы, немного тригонометрии. О теории графов знаю только из детских книжек про минимальное количество цветов на карте и обход графа одним росчерком.
Но я кодил узкоспециализированные функции, где все это нужно и ИРЛ, в обычном коде, манипулирующем gameObject'ами, только векторная алгебра, которую надо представлять очень хорошо, иначе заебешься.
Что такое кватернионы в курсе (вчера погуглил), как конкретно они используются в юньке - хз, только в общих чертах знаю. Хотя хватает.
Да ничего.
Слушай, а если в твоём коде везде дабл заменить на флоат — всё к хуям сломается? Я просто в юньке дабл никогда не юзал.
>Например, за АИ-лесорубом гонится лесной нёх, планер берёт цель спасения
Вот тут-то и проблема. Планер не должен "брать" никаких целей. Планер должен спланировать последовательность действий, которая приводит к заданному конечному состоянию. Суть планера в том, что эта последовательность теоретически очень большая, и суть планера в переборе и нахождении наиболее оптимальной (короткого) цепочки действий.
А ГОАП это внебрачный сын простой utility-системы и каких-нибудь state machine. Планер ему там нахуй не всрался по большому счету. Только лишний балласт
Дабл для точности. Не должно сломаться, наверное, просто решил с запасом взять, у меня там расстояния в солнечной системе в метрах фигурируют.
>Планер не должен "брать" никаких целей.
Схуяли? Цель - желаемое состояние мира, планер подбирает последовательность действий, которые переведут текущее состояние мира в целевое.
Планер должен брать самую приоритетную цель.
ФСМ вообще далеко, потому что для каждого действия нет чётко определённых переходов.
Может ты что то путаешь?
Хуй знает о чем вы спорите, но с точки зрения здорового программирования выбором цели и проложением маршрута должны заниматься две разные сущности.
Проложением маршрута будет заниматься навмеш. Да в любом другом случае слабо представляю как это можно с чем то совмещать
Нейрон в нейросети это просто функция, принимающая значение в зависимости от вектора аргументов.
Вся нейросеть это пирамида, где ты последовательно преобразуешь овер 9000 значений в одно единственное, которое дает тебе некоторую информацию.
>Но планировщик должен решать как именно мы перемещаемся.
но зачем? вообще ты как-то решаешь планированием больше задач чем следует. у тебя как будто отсутствует концепция глобальных стейтов ИИ. можно же сделать изначально несколько глобальных стейтов например по уровню встревоженности. "спокойный / встревоженный / набрасывается" например. где стейты имели бы разные наборы экшонов, меняли паттерн перемещения, являлись модификатором для трешхолда некоторых целей. а планирование нужно только для построения комплексных планов из последовательности самих действий, чтобы ИИ не залип на чем-то элементарном.
>Этот вариант я упустил. Для этого можно сделать цель трансформом, а не точкой и периодически менять точку назначения навмеш агента. Если трансформ вдруг стал нуллом(сенсор укрытий инвалидировал укрытие например) - остановка и реплан.
описывать точку пути трансформом выглядит настолько кривой идеей насколько это возможно. это будет ещё и охуевшее структурирование уровня в добавок. а что если точка пути не является трансформом но её все равно надо сменить?
>Если собрать всё вмнесте, то схема примерно такая:
лол ну ты и придумал. иметь два набора планов, один из которых для движения, а другой для действий во время движения. мне кажется с такими идеями ты достигнешь лимитов этой схемы гораздо быстрей чем я своей. синхронизация этого выглядит ещё большей еботней чем то что я придумал. а что если во время движения появилось действие с долгой имплементацией из разряда неотменяемых и очень важных а конец пути уже недалеко? или осталось то-же самое действие, но нужно поменять паттерн перемещения во время действия? например ИИ обматывается бинтиком прячась в кустах, волк его покусал. а тут хопа его волк нашел, действие поменялось с "обматываться бинтиком в укрытии" на "обматываться бинтиком убегая". прерывать обматывание бинтиком и начинать снова чтоли? или "обматыватся бинтиком" это отдельно, "сидеть в укрытии / бежать в другое укрытие" это другой набор действий?
>Не следующее действие, а вообще другой план. Так что это будет ближе к провалу действия. Здесь нужно расширение терминологии.
какая-то хуевая схема если требует расширение терминологии на самом деле.
вообще нахуй ты такую конструкцию то лепишь? могущество ГОАП то в том что у него трешхолд целей есть и только одна цель является актуальной, само планирование важно, но сравнительно второстепенно. взвешивать валидность целей легко в рамках ситуации и важно именно это. а у тебя уже пошло какое-то планирование двух целей разом, охуеть можно. как-то сильно не хватает того что объединяло бы всю эту конструкцию и упрощало. как по мне так проще иметь несколько раздельных довольно простых конструкций, которые бы объединялись общими ограничениями и соединялись одной целью.
так хоть знать будешь что если ИИ нападает то он как-то охуительно напрыгнет на пути к цели, а планирователь позаботится о том чтобы стрелы были и лук был в руках и выстрелит когда увидит. а если отпиздили то он убегает а планирователь делает все чтобы выжить по дорожке.
можно же совмещать несколько типов ИИ в одном сразу. стейтмашина для глобальных статусов которая всему голова, FSM для стратегических решений, GOAP для планирования цепочки действий и более тактических решений. так шанс того что хоть что-то из этого разрастется до критической массы и нахуй рухнет задавив под собой весь проект гораздо ниже, чем пока они по отдельности работают на одни и те-же цели. а ты через GOAP решаешь уже такую хуйню которую проще решить другими методами.
>>29323
написал навмеш, терию графов только копнул снаружи, матрицы тоже. больше всего пригодилась линейная алгебра из школьной программы, за время написания неплохо так вспомнил её. дольше ебешся с чтением о каких-то хитрых алгоритмах, или имплементацией их, чем всей этой магией цыфр.
надо тоже что-то клевое и нечитабельное показать!
>Но планировщик должен решать как именно мы перемещаемся.
но зачем? вообще ты как-то решаешь планированием больше задач чем следует. у тебя как будто отсутствует концепция глобальных стейтов ИИ. можно же сделать изначально несколько глобальных стейтов например по уровню встревоженности. "спокойный / встревоженный / набрасывается" например. где стейты имели бы разные наборы экшонов, меняли паттерн перемещения, являлись модификатором для трешхолда некоторых целей. а планирование нужно только для построения комплексных планов из последовательности самих действий, чтобы ИИ не залип на чем-то элементарном.
>Этот вариант я упустил. Для этого можно сделать цель трансформом, а не точкой и периодически менять точку назначения навмеш агента. Если трансформ вдруг стал нуллом(сенсор укрытий инвалидировал укрытие например) - остановка и реплан.
описывать точку пути трансформом выглядит настолько кривой идеей насколько это возможно. это будет ещё и охуевшее структурирование уровня в добавок. а что если точка пути не является трансформом но её все равно надо сменить?
>Если собрать всё вмнесте, то схема примерно такая:
лол ну ты и придумал. иметь два набора планов, один из которых для движения, а другой для действий во время движения. мне кажется с такими идеями ты достигнешь лимитов этой схемы гораздо быстрей чем я своей. синхронизация этого выглядит ещё большей еботней чем то что я придумал. а что если во время движения появилось действие с долгой имплементацией из разряда неотменяемых и очень важных а конец пути уже недалеко? или осталось то-же самое действие, но нужно поменять паттерн перемещения во время действия? например ИИ обматывается бинтиком прячась в кустах, волк его покусал. а тут хопа его волк нашел, действие поменялось с "обматываться бинтиком в укрытии" на "обматываться бинтиком убегая". прерывать обматывание бинтиком и начинать снова чтоли? или "обматыватся бинтиком" это отдельно, "сидеть в укрытии / бежать в другое укрытие" это другой набор действий?
>Не следующее действие, а вообще другой план. Так что это будет ближе к провалу действия. Здесь нужно расширение терминологии.
какая-то хуевая схема если требует расширение терминологии на самом деле.
вообще нахуй ты такую конструкцию то лепишь? могущество ГОАП то в том что у него трешхолд целей есть и только одна цель является актуальной, само планирование важно, но сравнительно второстепенно. взвешивать валидность целей легко в рамках ситуации и важно именно это. а у тебя уже пошло какое-то планирование двух целей разом, охуеть можно. как-то сильно не хватает того что объединяло бы всю эту конструкцию и упрощало. как по мне так проще иметь несколько раздельных довольно простых конструкций, которые бы объединялись общими ограничениями и соединялись одной целью.
так хоть знать будешь что если ИИ нападает то он как-то охуительно напрыгнет на пути к цели, а планирователь позаботится о том чтобы стрелы были и лук был в руках и выстрелит когда увидит. а если отпиздили то он убегает а планирователь делает все чтобы выжить по дорожке.
можно же совмещать несколько типов ИИ в одном сразу. стейтмашина для глобальных статусов которая всему голова, FSM для стратегических решений, GOAP для планирования цепочки действий и более тактических решений. так шанс того что хоть что-то из этого разрастется до критической массы и нахуй рухнет задавив под собой весь проект гораздо ниже, чем пока они по отдельности работают на одни и те-же цели. а ты через GOAP решаешь уже такую хуйню которую проще решить другими методами.
>>29323
написал навмеш, терию графов только копнул снаружи, матрицы тоже. больше всего пригодилась линейная алгебра из школьной программы, за время написания неплохо так вспомнил её. дольше ебешся с чтением о каких-то хитрых алгоритмах, или имплементацией их, чем всей этой магией цыфр.
надо тоже что-то клевое и нечитабельное показать!
>но зачем? вообще ты как-то решаешь планированием больше задач чем следует
Потому что тип передвижения зависит от действия? Если агент хочет подкрасться - он будет красться, если он сваливает - он бежит. Зачем для этого менять какие то глобальные стейты?
>описывать точку пути трансформом выглядит настолько кривой идеей насколько это возможно
Не точку пути, а пункт назначения. Иначе как ты например будешь гнаться за движущейся целью?
>иметь два набора планов, один из которых для движения
Почему два плана? Просто у некоторых действий будет в пререквизитах (OnMove,false)
>что если во время движения появилось действие с долгой имплементацией из разряда неотменяемых и очень важных а конец
Очевидно агент остановится и завершит действие на месте.
>нужно поменять паттерн перемещения во время действия?
Если понадобилось сменить паттерн движения, значит произошло что то достаточное для реплана.
>с "обматываться бинтиком в укрытии" на "обматываться бинтиком убегая"
А как это решит твоя схема?
>а у тебя уже пошло какое-то планирование двух целей разом
целей может быть сколько угодно, приоритетная одна.
>как по мне так проще иметь несколько раздельных довольно простых конструкций, которые бы объединялись общими ограничениями и соединялись одной целью.
То есть это _простой и понятный_ вариант.
>если ИИ нападает то он как-то охуительно напрыгнет на пути к цели
Ну ёбана, у него будет действие наскока с какими то пререквизитами. В чём проблема то?
>ты через GOAP решаешь уже такую хуйню которую проще решить другими методами
А надо решать что то уровня подбора стрел и лука для стрельбы? Тут уж точно ГОАП не всрался, это можно жесткими стейтами в фсм сделать. Суть ГОАП именно гибком подстраивании под ситуацию. У тебя какие то behavior trees а сбоку костылём планировщик из двух с половиной действий
>но зачем? вообще ты как-то решаешь планированием больше задач чем следует
Потому что тип передвижения зависит от действия? Если агент хочет подкрасться - он будет красться, если он сваливает - он бежит. Зачем для этого менять какие то глобальные стейты?
>описывать точку пути трансформом выглядит настолько кривой идеей насколько это возможно
Не точку пути, а пункт назначения. Иначе как ты например будешь гнаться за движущейся целью?
>иметь два набора планов, один из которых для движения
Почему два плана? Просто у некоторых действий будет в пререквизитах (OnMove,false)
>что если во время движения появилось действие с долгой имплементацией из разряда неотменяемых и очень важных а конец
Очевидно агент остановится и завершит действие на месте.
>нужно поменять паттерн перемещения во время действия?
Если понадобилось сменить паттерн движения, значит произошло что то достаточное для реплана.
>с "обматываться бинтиком в укрытии" на "обматываться бинтиком убегая"
А как это решит твоя схема?
>а у тебя уже пошло какое-то планирование двух целей разом
целей может быть сколько угодно, приоритетная одна.
>как по мне так проще иметь несколько раздельных довольно простых конструкций, которые бы объединялись общими ограничениями и соединялись одной целью.
То есть это _простой и понятный_ вариант.
>если ИИ нападает то он как-то охуительно напрыгнет на пути к цели
Ну ёбана, у него будет действие наскока с какими то пререквизитами. В чём проблема то?
>ты через GOAP решаешь уже такую хуйню которую проще решить другими методами
А надо решать что то уровня подбора стрел и лука для стрельбы? Тут уж точно ГОАП не всрался, это можно жесткими стейтами в фсм сделать. Суть ГОАП именно гибком подстраивании под ситуацию. У тебя какие то behavior trees а сбоку костылём планировщик из двух с половиной действий
>Потому что тип передвижения зависит от действия? Если агент хочет подкрасться - он будет красться, если он сваливает - он бежит. Зачем для этого менять какие то глобальные стейты?
чтобы не плодить сущьности, разумеется. комбинации действий должны быть пересечениями статусов, а не описываться каждый по отдельности. если ИИ атакует и его заметили, то он уже просто не будет подкрадыватся. он не будет, а тебе описывать.
если что-то можно описать простым методом то именно так это и надо делать.
>Не точку пути, а пункт назначения. Иначе как ты например будешь гнаться за движущейся целью?
да не суть важно даже. я к тому что не все целевые места перемещения могут быть привязаны к объектам глобально.
>А как это решит твоя схема?
если бинтование занимает только руки то ИИ встанет и начнет убегать бинтуя себя. перемещению ничего не мешает, а за перемещением следит другая хуйня.
>Ну ёбана, у него будет действие наскока с какими то пререквизитами. В чём проблема то?
да зачем действие наскока? вот бегает например киборг, прыгает через стены, летает через камни, в полете кидает гранаты, стреляет, таскает павших товарищей, иногда подбегает кнопки жмет. навигация из А в Б у него происходить должна сама собой, навигация подстраиваться под положение противников и свой статус, действия под собственную позицию, одни действия должны переходить в другие не волнами а постоянно. и только редкие задачи должны говорить ему где надо быть чтобы их выполнить. паузы между действиями вообще быть не должно.
>А надо решать что то уровня подбора стрел и лука для стрельбы?
йеп. или более сложные комбинации. например ИИ хочет корзинку кокосов, кокосы есть только у продавца, надо денег, идет в лес и собирает ягоды, или на реку ловить рыбу, или палкой червей копает, меняет лут на кокосы. или если ничего не может то бьет палкой продавца и отбирает кокосы если очень надо. это - планирование. описывать детали в нем не нужно. детали можно отдать на откуп другим более специализированным штукам.
>Тут уж точно ГОАП не всрался, это можно жесткими стейтами в фсм сделать.
в динамичном мире нельзя. плюс ГОАП помимо очевидных же в том что пулл действий можно менять на ходу. выпал предмет - появились действия связанные с ним, например. это в ФСМ делать по человечески нельзя.
ну и другой плюс ГОАП в том что пулл целей может шариться между членами сквада, разумеется, чтобы была иерархия.
гибкость ГОАП то в первую очередь в том что эти листы можно редактировать.
>У тебя какие то behavior trees а сбоку костылём планировщик из двух с половиной действий
ну так. планирование там где вообще должно быть планирование в какой-то форме. для манипуляций с инвентарем просто заебись, групповые действия тоже просто заебись, глобальная навигация заебись. везде где требуется планирование в динамичной ситуации заебись. а вот для тонких манипуляций требующих параллельности совсем не заебись.
ты вот решил костылем решить, я решил что проще сделать метод синхронизации и указать кто тут клитором коммандует. мне вот очень интересно посмотреть что у тебя выйдет, у меня то вон рабочий прототип же есть уже. может ты там что-то ещё лучше придумаешь.
>Потому что тип передвижения зависит от действия? Если агент хочет подкрасться - он будет красться, если он сваливает - он бежит. Зачем для этого менять какие то глобальные стейты?
чтобы не плодить сущьности, разумеется. комбинации действий должны быть пересечениями статусов, а не описываться каждый по отдельности. если ИИ атакует и его заметили, то он уже просто не будет подкрадыватся. он не будет, а тебе описывать.
если что-то можно описать простым методом то именно так это и надо делать.
>Не точку пути, а пункт назначения. Иначе как ты например будешь гнаться за движущейся целью?
да не суть важно даже. я к тому что не все целевые места перемещения могут быть привязаны к объектам глобально.
>А как это решит твоя схема?
если бинтование занимает только руки то ИИ встанет и начнет убегать бинтуя себя. перемещению ничего не мешает, а за перемещением следит другая хуйня.
>Ну ёбана, у него будет действие наскока с какими то пререквизитами. В чём проблема то?
да зачем действие наскока? вот бегает например киборг, прыгает через стены, летает через камни, в полете кидает гранаты, стреляет, таскает павших товарищей, иногда подбегает кнопки жмет. навигация из А в Б у него происходить должна сама собой, навигация подстраиваться под положение противников и свой статус, действия под собственную позицию, одни действия должны переходить в другие не волнами а постоянно. и только редкие задачи должны говорить ему где надо быть чтобы их выполнить. паузы между действиями вообще быть не должно.
>А надо решать что то уровня подбора стрел и лука для стрельбы?
йеп. или более сложные комбинации. например ИИ хочет корзинку кокосов, кокосы есть только у продавца, надо денег, идет в лес и собирает ягоды, или на реку ловить рыбу, или палкой червей копает, меняет лут на кокосы. или если ничего не может то бьет палкой продавца и отбирает кокосы если очень надо. это - планирование. описывать детали в нем не нужно. детали можно отдать на откуп другим более специализированным штукам.
>Тут уж точно ГОАП не всрался, это можно жесткими стейтами в фсм сделать.
в динамичном мире нельзя. плюс ГОАП помимо очевидных же в том что пулл действий можно менять на ходу. выпал предмет - появились действия связанные с ним, например. это в ФСМ делать по человечески нельзя.
ну и другой плюс ГОАП в том что пулл целей может шариться между членами сквада, разумеется, чтобы была иерархия.
гибкость ГОАП то в первую очередь в том что эти листы можно редактировать.
>У тебя какие то behavior trees а сбоку костылём планировщик из двух с половиной действий
ну так. планирование там где вообще должно быть планирование в какой-то форме. для манипуляций с инвентарем просто заебись, групповые действия тоже просто заебись, глобальная навигация заебись. везде где требуется планирование в динамичной ситуации заебись. а вот для тонких манипуляций требующих параллельности совсем не заебись.
ты вот решил костылем решить, я решил что проще сделать метод синхронизации и указать кто тут клитором коммандует. мне вот очень интересно посмотреть что у тебя выйдет, у меня то вон рабочий прототип же есть уже. может ты там что-то ещё лучше придумаешь.
>а тебе описывать
Что описывать то?
Чем вообще вынесение стейтов отдельно - не пложение сущностей по сравнению с держанием этого в стейтах мира?
>если бинтование занимает только руки то ИИ встанет и начнет убегать бинтуя себя
То есть это не два набора планов, один для движения, а второй для действий?
>да зачем действие наскока?
То есть он не выполняет какое то действие, а просто наскакивает на ифах?
>ну и другой плюс ГОАП в том что пулл целей может шариться между членами сквада
Мне всё больше кажется, что ты постепенно изобретаешь hierarchical task network
>ты вот решил костылем решить
>я решил что проще сделать метод синхронизации и указать кто тут клитором коммандует
Прямое и явное решение.
>мне вот очень интересно посмотреть что у тебя выйдет
Ладно, попробую то, на чём остановился. Разговор всё равно зашёл в тупик.
>Чем вообще вынесение стейтов отдельно - не пложение сущностей по сравнению с держанием этого в стейтах мира?
нет конечно, они же глобальные для ИИ, доступные всем его компонентам. цели ГОАП ориентируются на стейты, навигация ориентируется на стейты, все на них ориентируется. но планирование уже следует цели у ГОАП. в плане поведения ИИ можно очень много писать его глобальным состоянием. пытается он стелс, или набигает, или убигает, или спокойный или ещё какой. проще задавать общие паттерны поведения же и потом ими пользоваться везде так как они будут стопроцентно и довольно легко менять оценку состояния.
>То есть это не два набора планов, один для движения, а второй для действий?
движение от противника это прямая реакция при присутствии противника который о тебе знает и низком здоровье. тут никакого планирования не требуется делать. а вот бинтование более сложная реакция на низкое здоровье, она требует прекондиции. поэтому бинтуемся через планирование, убегаем по обстоятельствам. пока бинтование не мешает убеганию - сьебываем.
>То есть он не выполняет какое то действие, а просто наскакивает на ифах?
йеп. ну тоесть можно же и посложней конечно чем ифы сделать логику, чтобы ИИ там смотрел откуда выгодней набигать, выставлял рейтинги оружий как модификаторы оценки для ГОАП основываясь на окружении, например. главное что эта логика существует самостоятельно и её можно в любой момент поменять без особых страданий.
вообще, вот человек когда в игры играет он как думает? надо набижать, надо убижать, надо обойти, надо скрытся. думает над путями согласно плану, подстраивает снаряжение под обстановку. если есть друганы то уже кооперация с друганами задает общий статус и планирует снаряжение и дальнейший паттерн поведения. так-же надо примерно выстраивать мышление и для ИИ. память конечно через гоап мы нормально не сделаем, но такая ветвистость логики дает ощутимую универсальность за счет того что обстановку проще проанализировать слоями.
>Ладно, попробую то, на чём остановился. Разговор всё равно зашёл в тупик.
показать не забудь. в этом разделе все обсуждение ИИ загибается по каким-то нелепым причинам. видать давно люди не играли в игры вроде FEAR, или сталкера
>Чем вообще вынесение стейтов отдельно - не пложение сущностей по сравнению с держанием этого в стейтах мира?
нет конечно, они же глобальные для ИИ, доступные всем его компонентам. цели ГОАП ориентируются на стейты, навигация ориентируется на стейты, все на них ориентируется. но планирование уже следует цели у ГОАП. в плане поведения ИИ можно очень много писать его глобальным состоянием. пытается он стелс, или набигает, или убигает, или спокойный или ещё какой. проще задавать общие паттерны поведения же и потом ими пользоваться везде так как они будут стопроцентно и довольно легко менять оценку состояния.
>То есть это не два набора планов, один для движения, а второй для действий?
движение от противника это прямая реакция при присутствии противника который о тебе знает и низком здоровье. тут никакого планирования не требуется делать. а вот бинтование более сложная реакция на низкое здоровье, она требует прекондиции. поэтому бинтуемся через планирование, убегаем по обстоятельствам. пока бинтование не мешает убеганию - сьебываем.
>То есть он не выполняет какое то действие, а просто наскакивает на ифах?
йеп. ну тоесть можно же и посложней конечно чем ифы сделать логику, чтобы ИИ там смотрел откуда выгодней набигать, выставлял рейтинги оружий как модификаторы оценки для ГОАП основываясь на окружении, например. главное что эта логика существует самостоятельно и её можно в любой момент поменять без особых страданий.
вообще, вот человек когда в игры играет он как думает? надо набижать, надо убижать, надо обойти, надо скрытся. думает над путями согласно плану, подстраивает снаряжение под обстановку. если есть друганы то уже кооперация с друганами задает общий статус и планирует снаряжение и дальнейший паттерн поведения. так-же надо примерно выстраивать мышление и для ИИ. память конечно через гоап мы нормально не сделаем, но такая ветвистость логики дает ощутимую универсальность за счет того что обстановку проще проанализировать слоями.
>Ладно, попробую то, на чём остановился. Разговор всё равно зашёл в тупик.
показать не забудь. в этом разделе все обсуждение ИИ загибается по каким-то нелепым причинам. видать давно люди не играли в игры вроде FEAR, или сталкера
Ну я попробовал через ЛейтАпдейт. Все-равно, если идти в стену. то персонаж по кд пытается в неё зайти и выталкивается.
>пытается он стелс, или набигает, или убигает, или спокойный или ещё какой
>а тебе описывать
Ну всё же расскажи что лишнего и неудобного описывать планом в подобной ситуации. Мне правда интересно, может я упускаю что то очевидное.
Давай возьмём пример: у нас есть скрытный пидор, который может красться(что обещает ему пребывание невидимым для врага), а может бежать, может атаковать врага открыто, а может бить сникатакой, требующей пребывания невидимым. Удар сникатакой имеет более низкую стоимость, значит будет в приоритете. Цель - бить врага.
Чего лишнего описывается в этом случае по сравнению с вариантом с заведением глобальных стейтов стелс/хуелс, разблокирующих каждый по два действия?
если смотреть в рамках вопроса то ничего. удар обычный, удар из стелса с пререкваерментом - в этой схеме ничего лишнего, не говоря о том что такие вещи как удар в мили должны так-же имплементить особые сорта перемещения до цели. если выйти перед десантником то у него так-же удар прикладом будет в приоритете, он подбежит и ебанет.
если смотреть в рамках всего обсуждения то в случае наличия глобальных статусов можно например менять стоимость у таких действий как "использовать лук", или "использовать кинжал", вместо чего-то громкого. так-же если стелс активен то персонаж например меняет приоритетность у других зон карты и выбирает пути через высокую траву чтобы попасть куда надо, залезает под лесенки более охотно, старается уйти из конуса обзора при навигации. чтобы ГОАП сказал "иди сюда" и ИИ пополз в стелсе туда обходя все заметные места. например за спину жертвы. ну и в конце концов сет анимаций поменять чтобы ИИ ходил горбатым и башкой нервно мотал. можно много придумать как подобный статус могли бы имплементить другие элементы ИИ.
>>29782
храни копию. торговать памятью всегда эффективней, если её ещё много в запасе. но вообще лучше скажи че там делаешь, все кроется в деталях как всегда же.
Спасибо, дружище. Как-то уже пытался, но решил начать снова. Запилить простенькую деформацию террейна а-ля СПИНТАЙЕРС под ведро.
Ну значит ты наговнокодил. У меня на голых коллайдерах с коллизиями всё нормально было.
а, а я кажись тебя помню. кстати а чего ты вертексы собрался редактировать то? может шейдор ебанешь чтобы вот примерно как в бэтмане?
вообще где-то у меня был клевый ютубер который что-то похожее на коленке за часик слепил. https://www.youtube.com/watch?v=l_2uGpjBMl4 может интересно будет
> мне просто прикольным кажется, когда в редакторе переменные на русском написаны
Продолжай, у тебя всё получится.
> рофл
Настримятся своими дотами, а потом рофлят и ебут друг друга в жопы.
Рашид, завязывай кодить.
Ну я просто не шарю совсем. Так нельзя делать? Я думал, что так не делают от того, что это поуебански выглядит.
Да кто порвался-то? Я ж и говорю, пускай развлекается, всё получится.
> Так нельзя делать?
Если ты кодишь чисто для себя чисто руку набить — называй как хочешь, хоть хуйпизда. Но лучше сразу приучаться к стандартам оформления, чтоб потом не переучиваться.
https://www.youtube.com/watch?v=wrHmbiv41h0
>>29808
Понял, принял.
Я сейчас наткнулся на статейку, где говорится, что transform.position/transform.rotation сильно снижают производительность, если использовать это на объектах с rigidbody. Враги у меня имеют rb, но перемещаются и поворачиваются с помощью transform. Еще я замечал, что если удалить их и использовать rb для движения, то лагов не будет.
Я в правильном направлении думаю? Мне надо переделать движение врагов для повышения производительности?
> transform.position/transform.rotation сильно снижают производительность, если использовать это на объектах с rigidbody
Ага, прям пекарня горит.
Хуйнёй не занимайся.
Так я не понимаю, с чем тогда связаны лаги при использовании rb? Типо, я так гуглил, большинство считает, что это охуенная штука, врядли бы так считали, если бы это так сильно убивало производительность.
Вот статейка, кстати:
https://habrahabr.ru/post/248391/
Статейка от 15-го года? Окей.
>если смотреть в рамках всего обсуждения то в случае наличия глобальных статусов можно например менять стоимость у таких действий как "использовать лук", или "использовать кинжал", вместо чего-то громкого. так-же если стелс активен то персонаж например меняет приоритетность у других зон карты и выбирает пути через высокую траву чтобы попасть куда надо, залезает под лесенки более охотно, старается уйти из конуса обзора при навигации. чтобы ГОАП сказал "иди сюда" и ИИ пополз в стелсе туда обходя все заметные места
Но это всё может быть сделано просто в действии скрытного перемещения. Весь глобальный стейт стелса заменяет ворлдстейт (StayHidden,true). Но если ты захочешь сделать так чтобы этот же скрытный пидр мог бить сник атакой вне стелса, например, ослеплённых противников, то прийдётся лепить ещё один иф для нахождения вне стелса.
Мне просто кажется, что тебе ГОАП вообще не нужен: ты используешь глобальные стейты, а действия распределяешь _просто ифами_, называя работой ГОАП формирование пула действий.
Рили попробуй HTN, мне кажется это то, что ты пробуешь изобрести.
> А вот если мне нужно еще и источники света расставить по карте? Я же не могу ставить их наугад и каждый раз смотреть нормальная ли яркость света, нормальный ли радикс освещения, нормальный ли цвет. Как тут быть?
Чего блять? Ставишь свет и крутишь как надо.
Что ты несёшь? Ты вкладку Scene вообще видел?
>таких редакторов полно.
Ну так и в чем проблема? Берешь любой из множества доступных редакторов и пользуешься.
Навмеш хорошо оптимизирован, на больших открытых пространстван даже эффективнее Астара с тайлами.
Нууу, можно через GetComponent проверять наличие какого-либо компонента, например.
А вообще не заморачивайся, если у тебя это несколько раз используется, то никто от этого не помрёт.
В игре или в редакторе?
Если второе, то enum показывается в редакторе в виде этого самого выпадающего списка.
Ну как всегда после вопроса на дваче я нахожу нужную страницу. Разобрался уже.
А можешь посоветовать места, куда можно вкатиться новичку? Или, в целом, это не особо нужно и хватит гугла?
Я быдло, в ангельский не могу.
> в ангельский не могу
Будет сложновато. Не сложнее чем на другие движки, но без английского реально хуево. Я полгода назад вкатился в геймдев, и уже пришлось прочитать одну книгу на английском, сейчас начал еще одну. Плюс самый охуенный инструмент на начале - это ответы на форумах Юнити, а они в основном на английском, да и гуглить надо правильно на английском.
> да и гуглить надо правильно на английском
Удваиваю этого благородного дона.
Как затык придёт — на русском хуй чё найдёшь.
1) Dialogue System For Unity - говно для даунов-аутистов, до сих пор удивляюсь откуда у него такие хорошие оценки в сторе
2) NodeCanvas - годнота. Всё сделано по человечески. Плюс помимо диалогов можно еще делать АИ и прочие крутые штуки.
По крайней мере, это первое впечатление. Глубоко не зарывался.
>NodeCanvas
Отсутствие безбладной демки едва ли облегчит выбор.
Надоть видосики глянуть тьюторриалные
в действии должно быть описано только само исключительно само действие. ты погромировал чтоли мало в своей жизни, шишки не набил с размазыванием логики? не доверял слишком много функциям которые вызываются хуй пойми когда и где? если я захочу чтобы скрытый пидор мог бить сник атакой вне стелса то либо надо задать альтернативные условия для действия, либо скопипастить эти 3.5 строчки описывающие действие с новыми условиями где если враг ослеплен то можно его ебануть хорошо.
вообще ты как-то странно структурируешь ИИ. ты понимаешь в какую мусорку превратится ГОАП если там будет описано просто всё? и оно будет размазано по действиям? это ебануться можно редактировать все это.
>а действия распределяешь _просто ифами_
>Мне просто кажется, что тебе ГОАП вообще не нужен
да по моему это ты не совсем понимаешь нахуй этот ГОАП нужен и пытаешься возложить на него больше чем надо.
я же уже показывал скриншотик, где у ИИ винтовка разряженная в инвентаре, рядом лежит ещё одна и отдельно патроны к ней и надо выстрелить из винтовки. это по твоему как ифами ебануть то? а варианты где взять патроны, или винтовку, могут множится и множится.
внутри простых действий требующих навигацию разумеется проще пользоваться ифами.
нахуй вообще описывать перемещение в действии ГОАП? ты ещё там ебани всю логику перемещения, чтобы оно там следило когда бегать, когда прыгать, чтобы лезло в аниматор, позицию там проверяло. чтобы открыл а перед тобой стена текста тыщи на полторы строк в которой какая-то не читаемая мешанина. а когда отдаешь все это на откуп глобальному менеджеру и контролеру и уже можешь это читать и даже наследоваться от него и менять имплементацию деталей то все что остается делать в ГОАП это описать в действии перемещения одну сраную строчку. а нахуй оно надо то? лучше уж под врага завести экшон "ебануть врага номер такой" где в имплементации "если далеко то подбеги" и ссылка на врага чтобы можно было сказать менеджеру "беги хи-и-итро".
>Рили попробуй HTN
он не пользуется A* же. как таким в динамичном мире пользоватся? я понимаю георию графов достаточно хорошо чтобы понимать пользу от поиска пути на нем, чем ГОАП и является.
>>29842
что у тебя за проблемы такие? нахуй ты в трансформ вообще лезешь если у тебя RB? если у тебя RB то манипуляции уже делай все через него. у тебя же специальные AddForce, AddTorque и прочие есть которые гарантируют тебе что все будет через физон.
>>29798
лол ну ты тогда не первый в этом случае. а в шейдеры смоги. полезно же. например в бэтмане клево сделали, у них там везде есть поверхности под которыми ортогональная камера которая рендерит только глубину на максимальную дистанцию там где поверхность заканчивается. все что попадает в эту камеру рисует на ней. а нарисованное появляется на поверхности как карта всех этих вмятин. если бы не мобилки то можно было бы ещё ебануть всякую симуляцию в компьют шейдорах например что типа ветер дует и вмятины деформируются со временем.
>>29870 (Del)
да через навмеш делай навигацию даже с тайтловой картой если у тебя никакой логики не завязано на этих тайтлах. если делаешь пошаговую стратегию то да, тайтлы нужны, а так то нахуй оно надо
>>29918 (Del)
ебани свой редактор прямо в юнити. займет пару вечеров, а от страданий избавит на все время разработки проекта.
>>29970 (Del)
почитай про ссылочные типы и про валуе типы, а потом подумай о том что строка это массив с буквами. тогда поймешь о чем речь тут идет. вообще можно и через теги проверять, просто не создавай каждый раз строку просто чтобы сравнить с ней, а пользуйся ссылкой на эту строку. тебе же инструменты дали заебись, пользуйся но с умом.
в действии должно быть описано только само исключительно само действие. ты погромировал чтоли мало в своей жизни, шишки не набил с размазыванием логики? не доверял слишком много функциям которые вызываются хуй пойми когда и где? если я захочу чтобы скрытый пидор мог бить сник атакой вне стелса то либо надо задать альтернативные условия для действия, либо скопипастить эти 3.5 строчки описывающие действие с новыми условиями где если враг ослеплен то можно его ебануть хорошо.
вообще ты как-то странно структурируешь ИИ. ты понимаешь в какую мусорку превратится ГОАП если там будет описано просто всё? и оно будет размазано по действиям? это ебануться можно редактировать все это.
>а действия распределяешь _просто ифами_
>Мне просто кажется, что тебе ГОАП вообще не нужен
да по моему это ты не совсем понимаешь нахуй этот ГОАП нужен и пытаешься возложить на него больше чем надо.
я же уже показывал скриншотик, где у ИИ винтовка разряженная в инвентаре, рядом лежит ещё одна и отдельно патроны к ней и надо выстрелить из винтовки. это по твоему как ифами ебануть то? а варианты где взять патроны, или винтовку, могут множится и множится.
внутри простых действий требующих навигацию разумеется проще пользоваться ифами.
нахуй вообще описывать перемещение в действии ГОАП? ты ещё там ебани всю логику перемещения, чтобы оно там следило когда бегать, когда прыгать, чтобы лезло в аниматор, позицию там проверяло. чтобы открыл а перед тобой стена текста тыщи на полторы строк в которой какая-то не читаемая мешанина. а когда отдаешь все это на откуп глобальному менеджеру и контролеру и уже можешь это читать и даже наследоваться от него и менять имплементацию деталей то все что остается делать в ГОАП это описать в действии перемещения одну сраную строчку. а нахуй оно надо то? лучше уж под врага завести экшон "ебануть врага номер такой" где в имплементации "если далеко то подбеги" и ссылка на врага чтобы можно было сказать менеджеру "беги хи-и-итро".
>Рили попробуй HTN
он не пользуется A* же. как таким в динамичном мире пользоватся? я понимаю георию графов достаточно хорошо чтобы понимать пользу от поиска пути на нем, чем ГОАП и является.
>>29842
что у тебя за проблемы такие? нахуй ты в трансформ вообще лезешь если у тебя RB? если у тебя RB то манипуляции уже делай все через него. у тебя же специальные AddForce, AddTorque и прочие есть которые гарантируют тебе что все будет через физон.
>>29798
лол ну ты тогда не первый в этом случае. а в шейдеры смоги. полезно же. например в бэтмане клево сделали, у них там везде есть поверхности под которыми ортогональная камера которая рендерит только глубину на максимальную дистанцию там где поверхность заканчивается. все что попадает в эту камеру рисует на ней. а нарисованное появляется на поверхности как карта всех этих вмятин. если бы не мобилки то можно было бы ещё ебануть всякую симуляцию в компьют шейдорах например что типа ветер дует и вмятины деформируются со временем.
>>29870 (Del)
да через навмеш делай навигацию даже с тайтловой картой если у тебя никакой логики не завязано на этих тайтлах. если делаешь пошаговую стратегию то да, тайтлы нужны, а так то нахуй оно надо
>>29918 (Del)
ебани свой редактор прямо в юнити. займет пару вечеров, а от страданий избавит на все время разработки проекта.
>>29970 (Del)
почитай про ссылочные типы и про валуе типы, а потом подумай о том что строка это массив с буквами. тогда поймешь о чем речь тут идет. вообще можно и через теги проверять, просто не создавай каждый раз строку просто чтобы сравнить с ней, а пользуйся ссылкой на эту строку. тебе же инструменты дали заебись, пользуйся но с умом.
Ну да, у канваса трудно сделать первую ступеньку, но потом намного легче. На ютьюбе есть ролики от народа, они помогают.
А у Диалог Менеджер слишком переусложнен. Я так понимаю он сделан для тех кто вообще не хочет залезать в спрайты, так что там много всяких финтов странных, которые хуй просечешь. И документация хуевая, я за целый день так и не понял как напрямую из скрипта вызывать диалог, например. У НодКанваса это сразу же показывается. Алсо, может знающие пояснят, нахуя они впилили туда Lua?
meh
я и точки не пишу иногда. вот так общаешься в интернете два десятка лет, пишешь стены текста. а со временем техника печатания оптимизируется сама собой чтобы требовать меньше и меньше усилий. в итоге перестаешь давить на шифт, ставить точки, пользуешься грамматикой только там где это может вызвать недопонимание
Ну ты же лукавишь, запятые сами себя не прожмут.
Но а вообще, повторюсь, я без всякого этсамого.
запятые то нужны, без них страдает построение предложения и передача смысла. этим нельзя жертвовать на форумах. к тому же запятые ставятся нажимая правый шифт, а не левый. там если два пальца рядом то они сами нажимают это комбинацию. сложней ставить вопросительный знак, в русской расскладке он ну пиздец как неудобно расположен, чаще переключаюсь на английскую расскладку чтобы его поставить.
левый шифт я вообще предпочитаю не нажимать, разве что когда восклицательный знак ставлю то жму его, или кавычки в русской раскладке
вообще это большая тема и не в рамках обсуждения юнити она
Перекатываюсь к вам с мертвого флэша: там пилил на каждое окошко два класса - лейаут (верстку) и контроллер, при этом контроллер прокидывал абсолютно одинаковым кнопкам в лейауте определенные коллбэки (функции), что мол надо сделать по клику, а как там сама кнопка (стандартная в рамках игры, сделанная тупо из имеджа, со своей логикой отображения и тп) подслушивала все эвенты и решала когда пора коллбэк дернуть, его не ебало.
В юньке вместо леайута по сути получается мой префаб окна. Но в шарпике же как я понял методы контроллера в виде коллбэков не покидаешь нормально в кнопки? Или я не прав? Вроде есть какие то "делегаты", но чет они слегка замудрено выглядят. Юнитискрипт не предлагать.
А для каждого окна пилить десяток классов кнопок (Button1Script, Button2Script, CloseButtonScript, ...) просто чтобы на клике по ним делать что-то по типу парент.гетКомпонент<контроллерОкошка>().методКоторыйДолжнаДернутьКнопка1() (и т.п), мне кажется неудобной хуетой. Вижу конечно частичное решение замутить некоторую "базовую" кнопку из имейджа и конкретные десять в окнах наследовать от нее, но это ж как то неудобно.
Как в итоге грамотно замутить подобную систему? Шоб повесить на префаб окошка скрипт контроллера и он десятку абсолютно идентичных с точки зрения кода кнопочек - прокинул свои методы, которые кнопочки будут послушно дергать? Другими словами, хочу повесить на 10 кнопок один и тот же скрипт (БазарюКнопка.cs), но чтобы он делал разные действия, которым его научит батя (контроллер окошка) уже где надо. Все ради того, чтобы в самой юньке один раз собранное окно ващщщще не шатать, а в случае если нужно будет что-то поправить, спокойно фиксить код. Или я довнич и это велосипед и лучше так не делать?
> Но в шарпике же как я понял методы контроллера в виде коллбэков не покидаешь нормально в кнопки?
неа, не прав. делегаты так-же отлично и через код присваиваются. ты бы API почитал. https://docs.unity3d.com/ScriptReference/UI.Button-onClick.html просто у юнити есть ещё этот редактор делегатов. как иначе делать менюшки например с выбором разрешения? это же охуеть можно.
делегаты это методы которые работают как значение. чтобы ты например мог куда-то сказать "вот тебе функция, ебани её когда сделаешь свое говно".
>>30071
Чет я сумбурно расписал, попробую проще:
Как запилить на C# такой скрипт (один на всю игру) для Image-а, чтобы он делал Image-ы (любые) универсальной кнопкой? (Как слушать события мышиные - понимаю). Чтобы кнопка не сама определяла, что она должна делать по клику, а кто-то извне ей сказал типа button.onClick = function "такая то".
> Как запилить на C# такой скрипт (один на всю игру) для Image-а, чтобы он делал Image-ы (любые) универсальной кнопкой?
Добро пожаловать в мир классов и наследования.
О, спасибо, анон, чет я ебался в глаза и не увидел что у уи уже есть Button, думал надо замутить Image и слушать клик самому (хотя наверное баттон делает то же самое).
Т.е. получается я делаю контрллер, вешаю его на окошко, заворачиваю его метод в делегат, делаю геткомпонент<ебанаяКнопка>() и ей его в поле сохраняю? а в TaskOnClick уже дергаю?
> Т.е. получается я делаю контрллер, вешаю его на окошко, заворачиваю его метод в делегат, делаю геткомпонент<ебанаяКнопка>() и ей его в поле сохраняю? а в TaskOnClick уже дергаю?
Усложняешь. В юнити в UI уже листнеры висят, вешай на всё что хочешь, если у тебя на войде публичный модификатор.
А если у меня будет скриптик MySuperAwesomeButton который там внутри кнопки слушает эвенты всякие и по разному ее анимирует (скажем скейлит при наведении, затемняет при клике, и тп), а я потом на те же самые эвенты понавешаю еще листенеров где-нибудь снаружи в контроллере, это не будет тормозно? Сужу все по тому же старому болезненному флэшу, где каждый ебаный эвент каждому своему листенеру при триггере порождал аллокацию и было выгоднее не 20 эвент листенеров регистрировать, а замутить 1 листенер который бы уже 20 методов разных дергал, или вообще коллбэками все обвязывать. Хотя наверное я дед инвалид и нормальные люди в юньке замутили хорошо...
да я же уже ответил на твой вопрос и ссылку дал. вот понимаешь? есть функция. а хуяк можно функцию передать как значение. это - делегат. вот есть у тебя кнопка та ты такой мояКнопка.onClick.AddListener(МояФункция); и тогда хопа кнопка будет делать твою функцию когда довиш на неё.
кстати ты это, осторожней с делегатами сделанными из кода. особенно осторожней с теми делегатами которые присваиваются в цыклах, где в качестве инпута есть енумератор.
>>30078
там в меню кстати ещё и не весь функционал мог увидеть. самое охуительное когда тыкаешь у выбранного геймобжекта AddComponent в меню инспектора и лезешь во вкладку Layout.
баттон то в целом делает то-же самое и делает это приятно. вообще если тебя интересует имплементация то эти хуи делали этот UI опенсорсным, можешь почитать. https://bitbucket.org/Unity-Technologies/ui
>>30081
лол ты чего страдаешь то так. тут же методы вроде OnDeselect, OnMove, OnPointerDown, OnPointerEnter, OnPointerExit, OnPointerUp, OnSelect и прочее прочее у тебя публичные, ты API почитай. некоторый функционал и так уже есть вроде изменения цвета при наведении курсора. наследуйся от кнопки, оверрайдни эти функции которые для этого и сделаны, сделай там любую сраную хуйню вплоть до того что при наведении на элемент интерфейса приступ эпилепсии мог случится. можно ещё встроеным редактором анимаий воспользоваться с кривыми чтобы окошко там приятно размеры меняло или ещё че.
вообще на https://www.assetstore.unity3d.com/en/#!/content/25468 вот тебе официальные экзамплы, посмотри что там и как оно сделано
>в действии должно быть описано только само исключительно само действие
Ты там засыпаешь уже? Навигацией занимается не действие, а навмеш и настройка над ним. Действие лишь даёт команду идти и задаёт образ передвижения. Все эти весёлые и занимательные стейты с поиском кустов будут только в навигаторе с синхронизацией через одно вхождение в ворлдстейт, без необходимости подстраивать всё.
>ты погромировал чтоли мало в своей жизни, шишки не набил
>это ебануться можно редактировать все это
>не доверял слишком много функциям которые вызываются хуй пойми когда и где?
>в какую мусорку превратится ГОАП
>скопипастить эти 3.5 строчки описывающие действие с новыми условиями
Бля не дави плиз((( Рассказываешь о чистоте действий и сразу копируешь строчки кода с новыми условиями и делаешь два похожих действия для стелса и его отсутствия. Интуитивно редактируемо.
>нахуй вообще описывать перемещение в действии ГОАП?
>ты погромировал чтоли мало в своей жизни
Про ООП не слышал? Действие не реализует движение, оно описывает его характер.
>он не пользуется A* же
Там прямой поиск по графу. H - это hierarchical
>я понимаю георию графов достаточно хорошо чтобы понимать пользу от поиска пути на нем
>чем ГОАП и является
Ты кстати и не рассказал какие планы ты строишь и пути ищешь. Вот был пример с обоймой и внтовкой, но почему это не сделать ифами?
>в действии должно быть описано только само исключительно само действие
Ты там засыпаешь уже? Навигацией занимается не действие, а навмеш и настройка над ним. Действие лишь даёт команду идти и задаёт образ передвижения. Все эти весёлые и занимательные стейты с поиском кустов будут только в навигаторе с синхронизацией через одно вхождение в ворлдстейт, без необходимости подстраивать всё.
>ты погромировал чтоли мало в своей жизни, шишки не набил
>это ебануться можно редактировать все это
>не доверял слишком много функциям которые вызываются хуй пойми когда и где?
>в какую мусорку превратится ГОАП
>скопипастить эти 3.5 строчки описывающие действие с новыми условиями
Бля не дави плиз((( Рассказываешь о чистоте действий и сразу копируешь строчки кода с новыми условиями и делаешь два похожих действия для стелса и его отсутствия. Интуитивно редактируемо.
>нахуй вообще описывать перемещение в действии ГОАП?
>ты погромировал чтоли мало в своей жизни
Про ООП не слышал? Действие не реализует движение, оно описывает его характер.
>он не пользуется A* же
Там прямой поиск по графу. H - это hierarchical
>я понимаю георию графов достаточно хорошо чтобы понимать пользу от поиска пути на нем
>чем ГОАП и является
Ты кстати и не рассказал какие планы ты строишь и пути ищешь. Вот был пример с обоймой и внтовкой, но почему это не сделать ифами?
>Навигацией занимается не действие, а навмеш и настройка над ним. Действие лишь даёт команду идти и задаёт образ передвижения. Все эти весёлые и занимательные стейты с поиском кустов будут только в навигаторе с синхронизацией через одно вхождение в ворлдстейт, без необходимости подстраивать всё.
чего план то такой хитрый? вот стейт ИИ сменился внутри гоапа, он стал у нас спрятанным, появилась возможность применять действия. но актуальный паттерн передвижения сменится только после следующего действия? тоесть типа стоит ИИ посреди поля в idle, понимает что он спрятался, видит враг идет и надо ебануть бы его и только тогда он приседает и ползет чтоли?
>Бля не дави плиз((( Рассказываешь о чистоте действий и сразу копируешь строчки кода с новыми условиями и делаешь два похожих действия для стелса и его отсутствия. Интуитивно редактируемо.
если занимают они 3.5 строчки, различаются одной кондицией пререкваермента то чего мудрить. назвал по другому. теперь у нас не StealthAttack, а SneakAttack, положил рядом. может ещё чего потом напишу. например StealthAttack чтобы делать надо сзади подбежать, а SneakAttack можно и не сзади. пока это два разных действия которые требуют хуй да нихуя описания то.
>Про ООП не слышал? Действие не реализует движение, оно описывает его характер.
как характер то описывать придумал?
>Там прямой поиск по графу. H - это hierarchical
там иерархический поиск по графу, сверху вниз. если бы делал РТС например где я всегда знал бы изначальную возможную последовательность действий и примерное их количество то это было бы адекватно. но не у меня.
>Ты кстати и не рассказал какие планы ты строишь и пути ищешь. Вот был пример с обоймой и внтовкой, но почему это не сделать ифами?
потому что винтовки может и не быть вообще, патрон может и не быть вообще, или чтобы их получить надо взять их, а чтобы взять надо залезть, а чтобы залезть надо ключ. разумеется некоторые действия скорей всего будут в конце, а некоторые скорей всего в начале, но учитывая все варианты цепочка может быть весьма длинной. как такое ифами то ебануть? а что если ебошить может не только винтовка, есть пистолет, но нет патрон к нему, но есть патроны к винтовке?
>Навигацией занимается не действие, а навмеш и настройка над ним. Действие лишь даёт команду идти и задаёт образ передвижения. Все эти весёлые и занимательные стейты с поиском кустов будут только в навигаторе с синхронизацией через одно вхождение в ворлдстейт, без необходимости подстраивать всё.
чего план то такой хитрый? вот стейт ИИ сменился внутри гоапа, он стал у нас спрятанным, появилась возможность применять действия. но актуальный паттерн передвижения сменится только после следующего действия? тоесть типа стоит ИИ посреди поля в idle, понимает что он спрятался, видит враг идет и надо ебануть бы его и только тогда он приседает и ползет чтоли?
>Бля не дави плиз((( Рассказываешь о чистоте действий и сразу копируешь строчки кода с новыми условиями и делаешь два похожих действия для стелса и его отсутствия. Интуитивно редактируемо.
если занимают они 3.5 строчки, различаются одной кондицией пререкваермента то чего мудрить. назвал по другому. теперь у нас не StealthAttack, а SneakAttack, положил рядом. может ещё чего потом напишу. например StealthAttack чтобы делать надо сзади подбежать, а SneakAttack можно и не сзади. пока это два разных действия которые требуют хуй да нихуя описания то.
>Про ООП не слышал? Действие не реализует движение, оно описывает его характер.
как характер то описывать придумал?
>Там прямой поиск по графу. H - это hierarchical
там иерархический поиск по графу, сверху вниз. если бы делал РТС например где я всегда знал бы изначальную возможную последовательность действий и примерное их количество то это было бы адекватно. но не у меня.
>Ты кстати и не рассказал какие планы ты строишь и пути ищешь. Вот был пример с обоймой и внтовкой, но почему это не сделать ифами?
потому что винтовки может и не быть вообще, патрон может и не быть вообще, или чтобы их получить надо взять их, а чтобы взять надо залезть, а чтобы залезть надо ключ. разумеется некоторые действия скорей всего будут в конце, а некоторые скорей всего в начале, но учитывая все варианты цепочка может быть весьма длинной. как такое ифами то ебануть? а что если ебошить может не только винтовка, есть пистолет, но нет патрон к нему, но есть патроны к винтовке?
Например :
if {прошло 2секунды после actiona}
...
Time.time если быть точнее
>тоесть типа стоит ИИ посреди поля в idle, понимает что он спрятался, видит враг идет и надо ебануть бы его и только тогда он приседает и ползет чтоли?
Ты тралишь? Идл он будет с стелсе путём действия "сидеть в стелсе".
>ну вот лишнее действие! засрано всё
Но точно так же при переключении глобальных стейтов у тебя тоже действие идл на ифах будет обрабатываться иначе - спихивание кучи всего в одно место, от чего ты меня недавно предостерегал.
>если занимают они 3.5 строчки
А если больше, то уже что то ещё придумывать? А потом ещё что то новое?
>как характер то описывать придумал?
Передавать навигатору экземпляр класса NavigationContext очевидно же.
>а что если ебошить может не только винтовка, есть пистолет, но нет патрон к нему, но есть патроны к винтовке?
Ну то сеть мы лишнего в ГОАП не пихаем, но наличие всех видов оружия и патронов к ним мы там всёже храним?
>но учитывая все варианты цепочка может быть весьма длинной
Но весь однойзначной, не считаешь?
Что мешает сделать по ифу на видимость патронов, винтовки? Подбирание - действие с перемещением уже на ифах реализовано.
Угаманись блять угаманись пока я тебя не пристрелил.
GOAP это был неудачный эксперимент по использованию планировщиков для ИИ игор. Все признали, что это неудачно и никто сейчас его не использует.
Пилильщик блин, ты б сначала самые элементарные азы почитал.
Ctrl+Shift+B - Player settings - Resolution and Presentation
/gd/
К тому, что ничего проще и лучше behavior tree нету
http://www.gdcvault.com/play/1023055/AI-Behavior-Editing-and-Debugging
Лол. Я уже полгода изучаю юнити, но про это окно узнал впервые. Уже делаю нормальные пиксели, как боженька завещал.
Кстати, зачем нужна галочка "Pixel Snap" на шейдерах? Что именно он снепит?
behaviour tree намного проще на самом деле
меньше boilerplate-кода
ты охуеешь делать стейт машины, если у тебя много состояний
>Ты тралишь? Идл он будет с стелсе путём действия "сидеть в стелсе".
а что гарантировать то будет смену статуса? или что будет гарантировать то что стелс не вскроется потому что ИИ неожиданно захочет грибов собрать?
>Но точно так же при переключении глобальных стейтов у тебя тоже действие идл на ифах будет обрабатываться иначе - спихивание кучи всего в одно место, от чего ты меня недавно предостерегал.
ты же понимаешь что глобальные статусы будут активироватся не зависимо от текущего действия? вообще с чего бы в моем варианте обрабатыватся в одном месте то? я наоборот все разделяю. логика получения статуса отдельно, имплементация статуса отдельно, планирование отдельно, ничего друг другу не мешает.
>А если больше, то уже что то ещё придумывать? А потом ещё что то новое?
ну а хули? множить классы ничего не мешает пока они компактные.
>Ну то сеть мы лишнего в ГОАП не пихаем, но наличие всех видов оружия и патронов к ним мы там всёже храним?
ну а как ещё то? вообще каждый предмет должен хранить список экшонов связанных с ним, чтобы само наличие их давало варианты. использование плюса динамичного листа экшонов, хули.
>Что мешает сделать по ифу на видимость патронов, винтовки?
то что вкладки с ифами будут правей чем граница монитора?
>>30130
да что ты. вон на вскидку в третем фолаче ГОАП, в DeusEx:HR тоже ГОАП.
>>30141 (Del)
https://unity3d.com/ru/learn/tutorials/topics/animation/avatar-masks
>а что гарантировать то будет смену статуса?
Какую смену статуса? Он будет выполнять то, что требует приоритетная цель. Он будет сидеть в стелсе потому что это необходимо для текущей цели и действий, которые к ней ведут.
>или что будет гарантировать то что стелс не вскроется потому что ИИ неожиданно захочет грибов собрать?
Это уже совсем другое действие ведущее к другой цели. Но банально собирание грибов имеет как прекондишн отсутствие врагов.
>я наоборот все разделяю
Ты читал про что речь? Действие идл будет иметь несколько вариантов выполнения в зависимости от стейта. Или же будет несколько действий идл, зависимых от стейта? В чём тогда смысл отбора контроля за ним у планировщика?
>множить классы
>вот 3 строчки копирую, а потом ещё что
>множить классы
>ну а как ещё то?
Завести глобальный стейт для текущего оружия же
>>30263
>behaviour tree намного проще на самом деле
Редактировать деревья гораздо сложнее.
>ты охуеешь делать стейт машины, если у тебя много состояний
>стейт машины
>СТРИПС
>Какую смену статуса? Он будет выполнять то, что требует приоритетная цель. Он будет сидеть в стелсе потому что это необходимо для текущей цели и действий, которые к ней ведут.
смену паттерна действий. чтобы сел в стелс и сидел там и это не прерывалось ничем пока стелс активен.
>Это уже совсем другое действие ведущее к другой цели. Но банально собирание грибов имеет как прекондишн отсутствие врагов.
тоесть у тебя будет отдельно собирание грибов чтоли? не будет дженерик действия "собрать предмет"? а что если надо оружие поднять в бою?
>Ты читал про что речь? Действие идл будет иметь несколько вариантов выполнения в зависимости от стейта. Или же будет несколько действий идл, зависимых от стейта? В чём тогда смысл отбора контроля за ним у планировщика?
слыш, мне вот интересно. а у тебя будет 3-5 вариантов под каждое действие чтоли? типа, идл в стелсе, идл нервный, идл хромой, идл выпивший и прочее? или вот если у тебя статус хранится как флажок в ГОАП, то как ты будешь менять модификаторы трешхолда у гоалов которые изначально бы зависели от статуса персонажа? когда например если персонаж счастлив то он мороженое хочет покупать, а когда грустно ему то он виски выпить в баре хочет.
>Завести глобальный стейт для текущего оружия же
а типы патронов как различать, м?
>не прерывалось ничем пока стелс активен.
Написано же следование приоритетной цели, если текущий план валиден, то ничто не прервёт стелс.
>не будет дженерик действия "собрать предмет"? а что если надо оружие поднять в бою?
Дженерик собирание грибов с динамическими прекондишенами. У нас же обратный поиск, планер будет знать контекст подбирания предмета.
>типа, идл в стелсе, идл нервный, идл хромой, идл выпивший и прочее?
Да. Часть действий можно конечно свернуть в одно, если это не влияет на планирование.
>или вот если у тебя статус хранится как флажок в ГОАП, то как ты будешь менять модификаторы трешхолда у гоалов которые изначально бы зависели от статуса персонажа?
Процедурно извне.
>когда например если персонаж счастлив то он мороженое хочет покупать, а когда грустно ему то он виски выпить в баре хочет
Некорректное сравнение со стелсом. Грустным или радостным персонаж становится извне, что может менять приоритеты целей. Но в стелс АИ должен уходить сам, добивая своей цели по уничтожению противника.
Сделал простенький дисплейчик - картинка и текст, прилепил на него скрипт (MyYobaDisplay), где на Start считываю компоненты дисплейчика в переменные и есть метод SetData(data:MyYobaData), в котором компонентам из переменных задаю параметры из этой самой даты (тексту стрингу, картинке цвет). Сделал "окно" в которое накидал с десяток таких дисплейчиков. Сделал контроллер окошка, в нем на Start ищу все MyYobaDisplay-и, сохраняю их к себе и генерю для них MyYobaData-ы, и сразу им прокидываю. Но поскольку Start бати (контроллера) логично дергается раньше чем Start чилдов (дисплеев), то в момент когда батей делаю SetData им, у них внутри еще нет ссылочки на их компоненты и они не могут нормально покраситься исходя из прокинутой датки.
Внимание вопрос: как "батей" грамотно подождать инициализации всех чилдов? Делать костыль с флагом на первом апдейте? А не будут ли тогда на долю секунды видны пустые белые хуйни с дефолтным текстом у MyYobaDisplay-ев? В юньке наверняка есть более грамотный метод шобы сделать пиздато... Может эвент какой подождать надо и на нем уже датку прокидывать? Как тру пацаны делают?
upd:
Сделал очевидное решение - у дисплея храню датку внутри, и перерисовываю его на Start исходя из датки. Но все равно сцуко медленно, запустив сцену кнопочкой Play в юньке, сначала вижу почти полсекунды дефолтный белый дисплей и только потом он окрашивается в нужный цвет. Как-то можно запилить чтобы он сразу выглядел как надо?
И вообще почему так, это GetComponent такой медленный или другие причины (дебаг билд?)?
Анти-паттерн.
>Как грамотней реализовать? Создать один скрипт, который хранит пиздюков: удаляет/добавляет в список, а остальные башни лезут к нему за инфой?
Да.
>Как сделать так, чтобы этот срипт запускался вперёд скриптов башен, чтоб инфа была актуальна?
Awake? Ну или в редакторе можешь поменять очередность выполнения скриптов. Но через Awake, думаю, все решится.
Ну и если хочешь ссылаться башнями на эту логику, то вызываешь в этой логике ивент по удалению/добавлению пиздюка, типа OnPizdukiListChanged. Ну и в классе башни подписываешься на этот ивент. Через ObservableCollection можно ебануть, например.
Алсо, всякие там "Find" и "GetComponent" без крайней надобности не используй, ну или когда не важны фпсы, например(загрузка сцены там, еще чего-нибудь). Конкретно здесь они, например, нахуй не нужны. Да и вообще, я бы сказал, нужны крайне редко или не нужны вовсе - нужно лишь сделать нормальную архитектуру.
Я, например, делаю игру один и могу сказать, что вообще не похуй. Захочешь сделать какой-то скилл, например, или предмет там - тебя трахнет твой собственный код, а точнее ты сам себя трахнешь. И будешь сидеть и голову ломать, как в своей же понаписанной архитектуре что-нибудь добавить. Или будешь переписывать и в итоге придешь к тому, что надо было сделать изначально.
С нормальным же кодом, архитектурой, решение новых задач становится легким, приятным и лаконичным. Твой код сам тебе подсказывает решение и даже может делать за тебя всю работу.
>Написано же следование приоритетной цели, если текущий план валиден, то ничто не прервёт стелс.
я то про сохранение стелса на протяжении нескольких планов.
>Дженерик собирание грибов с динамическими прекондишенами. У нас же обратный поиск, планер будет знать контекст подбирания предмета.
а тебе непонятно чтоли что прекондиции зависят от контекста? например грибы собрать чтобы сожрать, или собрать грибы чтобы сделать из них яд, или в конце концов собрать грибы кинуть их во врага. ты контекст чтобы собрался в гоап совать? обратный поиск то это всего лишь нахождение пути с конца, а не с начала, когда ты от цели идешь к началу собирая в статус мира не эффекты, а рекваерменты. контекст ты по прежнему сунуть только в эффекты и рекваерменты действия можешь. представить то можешь какая у тебя мешанина из флагов будет? или что, ты собрался сделать полный пиздец но ещё хранить флаги о контексте в вариантах действия с самим предметом? типа, вот гриб лежит, ядовитый, у него два действия "поднять чтобы кинуть во врага" и "поднять чтобы сделать яд"? и они стопроцентно ничем не будут отличатся до конца жизни проекта кроме как одним флагом?
>Да. Часть действий можно конечно свернуть в одно, если это не влияет на планирование.
как бы я тебе уже давно говорю. разные варианты одного и того-же действия вообще не влияют на планирование. они у тебя влияют ололо на паттерн передвижения только почему-то. даже при отсутствии передвижения.
>Процедурно извне.
>Некорректное сравнение со стелсом. Грустным или радостным персонаж становится извне, что может менять приоритеты целей.
что ещё за "извне"? это вопрос того где хранить переменные с модификаторами чтоли? типа у ИИ есть ещё какой-то внешний советчик который говорит ему его статус?
>Но в стелс АИ должен уходить сам, добивая своей цели по уничтожению противника.
как-бы стелс это такой-же модификатор трешхолдов для целей же. ИИ хопа в стелсе и сразу у целей связанных с стелсом меняются приоритеты.
>>30341
>Сделал простенький дисплейчик - картинка и текст, прилепил на него скрипт
если у тебя такая вложенная иерархия то не имплементируй Start/Awake/OnEnable у его чайлдов, а просто заведи метод у них "DoShit(ParrentClass)" и вызывай его из верхнего класса передавая в параметры самого себя. ну или ещё лучше - паредавай не инстанс класса, а интерфейс.
>>30397
на самом деле поиск через FindGameObjectsWithTag мало чем отличается от того что ты сам будешь список говна составлять, юнити же не ходит по всей сцене когда ты это вызываешь, оно тебе просто список говна возвращает. хотя применимо это разве что для тагов. на мой вкус у тебя всего одна проблема - нахождение ближайшей цели. тут уже манипуляции в духе дистанции без квадратного корня врядли спасут. может quadtree ебанешь чтобы весь список не перебирать хотя-бы?
>>30410
все что существует в одном экземпляре, или то что регулярно чем-то из этого списка используется.
да, идея хорошая, но НЕ следует пользоватся этой переменной всегда-всегда. например вот надо сказать камере "следуй за игроком" и камера полетела взяв ссылку на игрока и схватила его трансформ. или вот менеджер интерфейса чтобы хочет показать сколько у игрока ХП, лезет в глобальную переменную и смотрит сколько там у него ХП и показывает. а если у тебя там в игре снаряд разорвался, то разумеется лезть в такую глобальную хуйню не следует.
>Написано же следование приоритетной цели, если текущий план валиден, то ничто не прервёт стелс.
я то про сохранение стелса на протяжении нескольких планов.
>Дженерик собирание грибов с динамическими прекондишенами. У нас же обратный поиск, планер будет знать контекст подбирания предмета.
а тебе непонятно чтоли что прекондиции зависят от контекста? например грибы собрать чтобы сожрать, или собрать грибы чтобы сделать из них яд, или в конце концов собрать грибы кинуть их во врага. ты контекст чтобы собрался в гоап совать? обратный поиск то это всего лишь нахождение пути с конца, а не с начала, когда ты от цели идешь к началу собирая в статус мира не эффекты, а рекваерменты. контекст ты по прежнему сунуть только в эффекты и рекваерменты действия можешь. представить то можешь какая у тебя мешанина из флагов будет? или что, ты собрался сделать полный пиздец но ещё хранить флаги о контексте в вариантах действия с самим предметом? типа, вот гриб лежит, ядовитый, у него два действия "поднять чтобы кинуть во врага" и "поднять чтобы сделать яд"? и они стопроцентно ничем не будут отличатся до конца жизни проекта кроме как одним флагом?
>Да. Часть действий можно конечно свернуть в одно, если это не влияет на планирование.
как бы я тебе уже давно говорю. разные варианты одного и того-же действия вообще не влияют на планирование. они у тебя влияют ололо на паттерн передвижения только почему-то. даже при отсутствии передвижения.
>Процедурно извне.
>Некорректное сравнение со стелсом. Грустным или радостным персонаж становится извне, что может менять приоритеты целей.
что ещё за "извне"? это вопрос того где хранить переменные с модификаторами чтоли? типа у ИИ есть ещё какой-то внешний советчик который говорит ему его статус?
>Но в стелс АИ должен уходить сам, добивая своей цели по уничтожению противника.
как-бы стелс это такой-же модификатор трешхолдов для целей же. ИИ хопа в стелсе и сразу у целей связанных с стелсом меняются приоритеты.
>>30341
>Сделал простенький дисплейчик - картинка и текст, прилепил на него скрипт
если у тебя такая вложенная иерархия то не имплементируй Start/Awake/OnEnable у его чайлдов, а просто заведи метод у них "DoShit(ParrentClass)" и вызывай его из верхнего класса передавая в параметры самого себя. ну или ещё лучше - паредавай не инстанс класса, а интерфейс.
>>30397
на самом деле поиск через FindGameObjectsWithTag мало чем отличается от того что ты сам будешь список говна составлять, юнити же не ходит по всей сцене когда ты это вызываешь, оно тебе просто список говна возвращает. хотя применимо это разве что для тагов. на мой вкус у тебя всего одна проблема - нахождение ближайшей цели. тут уже манипуляции в духе дистанции без квадратного корня врядли спасут. может quadtree ебанешь чтобы весь список не перебирать хотя-бы?
>>30410
все что существует в одном экземпляре, или то что регулярно чем-то из этого списка используется.
да, идея хорошая, но НЕ следует пользоватся этой переменной всегда-всегда. например вот надо сказать камере "следуй за игроком" и камера полетела взяв ссылку на игрока и схватила его трансформ. или вот менеджер интерфейса чтобы хочет показать сколько у игрока ХП, лезет в глобальную переменную и смотрит сколько там у него ХП и показывает. а если у тебя там в игре снаряд разорвался, то разумеется лезть в такую глобальную хуйню не следует.
И получается, всё что касается использования ядер и так далее - можно вообще не заморачиваться, ибо никаких настроек в юньке по этому поводу толком нет, а что можно - само разобьётся по нужным ядрам?
Вот допустим есть у меня префаб prefab_manager, он имеет ссылки на все префабы. Так же есть ГО game_manager, которые имеет ссылку на префаб (не ГО!) префаб_менеджера. Когда гейм_менеджер хочет инстанциировать камеру, он делает типа Instantiate(prefab_manager.camera_prefab);
И вот чего я здесь решительно не понимаю, так это почему не выдаёт ошибку о том, что кагбэ экземпляра префаб_менеджера не существует! А ведь camera_prefab это не статическое поле! То есть без создания экземпляра префаб_менеджера мы не должны иметь доступа к полям, ибо их вообще нет нигде, они никому не принадлежат. Но пример абзацем выше работает. Почему?!
Окей. Вот еще пример. Есть в сцене ГО, в скрипте которого написано public SomePrefab sp; и потом в редакторе назначаем ссылку на этот sp - перетаскиваем SomePrefab в инспектор того ГО, который в сцене.
Так как SomePrefab является ссылочным типом, а нигде в коде я не делаю new или присваивание, но при этом экземляр типа SomePrefab доступен, как и все его поля (не статичные!), то получается только один вариант? Юнити имеет ГО этого SomePrefab и мы работаем с ним.
И что, если у меня в качестве этого SomePrefab будет огромный уровень или еще что-то такое с "тяжелыми" компонентами и так далее? Получается, юнити создаёт как минимум по одному экземпляру каждого префаба? Что жрёт оперативку и тд и тп....
Где я не прав? Буду рад любой информации.
йеп. потоки в юнити только для какой-то своей хуйни, а что-то этакое оно сделает само.
ну а профиты разумеется есть когда ты делаешь какую-то хуйню которой в главном треде быть не должно
>>30626
префабы это хитрая сериализация юнити того чего нет в сцене. которые можно передавать по ссылке, например. префаб это не класс, это уже сразу обьект на который можно ссылаться. все ссылки что ссылаются на один префаб - ссылаются на один префаб.
кстати эти ссылки переживают сериализацию юнити, при повторной загрузке они по прежнему будут ссылатся на один и тот-же объект.
у юнити кстати ещё и специальная хуйня существует ScriptableObject которая специально для хранения данных, а не геймобжектов которая так-же сериализуется.
хотя имеет свои минусы.
>а также ваши доходы ограничены 100 000 долларов в год
Не понял, как это регулируется? Вот встрою я в свое говноподелие трусики на героиню за донат, и кто будет следить за объемом доходов?
Мимо ньюфаг
Чёт я глянул на шейдоры - трудна.
Ну, допустим, я буду использовать сорт оф дисплейсмент и во время игры рисовать по текстуре. А с нормалями чё делать? Никакого волшебного рекалкулейт нет. В интернетах какие-то грандиозные алгоритмы.
>>30635
Вообще, кстати, юнити далеко не всегда создает инстансы обьектов, если тебе интересно. если хочешь то воспользуйся https://docs.unity3d.com/ScriptReference/ISerializationCallbackReceiver.html чтобы узнать когда там че происходит.
впрочем префабы с охуительными массивами в компонентах действительно могут обосрать все.
>>30670
rконечно трудно, там кругом всякие тайные слова.
https://docs.unity3d.com/ScriptReference/Mesh.RecalculateNormals.html это чтоли хочешь
а, это. а хуй его знает, можно самому считать нормали конечно. но вообще как насчет того что иметь две текстуры? одну для дисплейсмента другую для нормалей. можно же на местах куда давят не только глубину брать, но и нормаль того что камера видит и поворачивать её наоборот.
Где это почитать можно? Не совсем понимаю, как это всё с глубиной и камерой. Я предполагал просто рисовать чёрным по серой текстуре.
даже не знаю откуда начать и чего тебе такого дать. почитай про render texture наверно для начала, камера может рендерить туда, а ты берешь оттуда.
а во. https://docs.unity3d.com/Manual/SL-CameraDepthTexture.html отдельная страничка даже есть
Но я никак не могу вдуплить. Зачем нам какая-то там сериализация, типа сохранять данные обьекта как последовательность байтов, если мы можем не записывать всё подряд а написать просто пару цифр, подразумевая что первая, например, это LVL, вторая это HP и так далее. Это же быстрее, меньше писанины в файлах, и никаких заморочек с атрибутами и возни с капризами юнити аля "ЭТО Я ХОЧУ СЕРИАЛИЗОВАТЬ, ТО Я НЕ ХОЧУ, БУДУ СБРАСЫВАТЬ" etc
Типа последовательность байтов быстрее считывается, чем просто несколько циферок, несмотря на то что в первом случае размер файла будет гораздо больше?
Или может это как раз для "удобства"? Типа написал чето в стиле "ну-ка, юнька, сериализуй-ка мне объект враг_3182", и типа можно не заморачиваться, какие там переменные хуеменные, позиция, вращение, кадр анимации, итд?
>написать просто пару цифр, подразумевая что первая, например, это LVL, вторая это HP и так далее
писать свою сериализацию то не затрахаешься на каждый тип данных?
Сериализация она разная бывает.
Я десериализую игровые объекты из json-файлов, например. Добавлять новые быстро, удобно, и не требует пересборки проекта. Это первое.
Второе - без сериализации ты не запилишь сейвы.
>мы можем не записывать всё подряд а написать просто пару цифр, подразумевая что первая, например, это LVL, вторая это HP и так далее
Избирательная сериализация, это тоже сериализация. Если ты хочешь делать это сам, то ради бога. Однако изначальный смысл использования Юнити это отсутствие необходимости изобретать собственные велосипеды и тратить на это время. Поэтому оно так и преподносится, дескать всё для тебя заранее запрограммировали, надо только вызвать пару методов.
хуево сделали только. юнити нонстоп сериализует всё подряд, они так и не сделали сериализацию абстрактных переменных. ещё эти манипуляции с hideFlags. гондоны.
Использую [SerializeField] на все поля, которые хочу задавать через редактор, но не хочу делать public. Можно ли так вообще делать? Чем это может быть чревато?
да ничем. сериализует и ладно.
совершена первая в истории человечества конпеляция. ну почти.
в общем, я столкнулся с теоретической проблемой. так-как граф один, а функций как минимум ДВЕ (vertex и fragment), то теоретически ведь может получиться так, что будет такой конфликт зависимостей, когда один node использует значение другого, который вычисляется уже после него или вообще в другой функции. Как-то так.
Блять, да ну его нахуй. Ещё эти обрывчатые сведения по самым тёмным углам интернета собирать. Лучше вертексы двигать.
Когда выходит Юнити 2017?
В 2017
В общем я решил сделать по дереву для каждой функции шейдера отдельно.
Непонимаю, почему во всех редакторах все сведено к одному дереву. Это сильно ограничивает программируемость шейдеров
По сути, все что можно напрограммировать в вертексном шейдоре во всех нодовых редакторах - это всего-лишь добавить смешение вершине. И все.
Как я понимаю: беру трансформу с коллайдером, цепляю rigidbody, без rigidbody двигать коллайдеры табу, ибо они static(или нет?). Далее, если тело кинематическое, я двигаю его через Rigidbody.Moverotation и Moveposition. Или через transform.position/rotation?? Есть разница? Одни пишут что через трансформу - нельзя, другие - что нужно, третьи советуют гонять трансформу вообще без rigidbody.
И еще, с чем все-таки сочетается CharacterController, с кинематическим телом??? Без rigidbody? В примерах вроде кинематика стоит.
Если не кинематическое, вроде все понятно, AddForce/AddTorque...
С аддфорсом у тебя получается реалистичная физика, с инерцией и прочее, или ты трением все это гасишь?
Нашел кстати вот исследование по коллайдерам:
https://forum.unity3d.com/threads/moving-static-colliders-performance.474772/
Говорят начиная с Юнити 5 можно двигать статику(коллайдер без ригидбоди), и это даже быстрее, чем кинематика. Кажется, документация пиздит.
Черт, кинематика проходит сквозь стены. Как же ее тогда использовать? Неужели есть два стула - реалистичная физика или CharacterController? Или самому писать детектор коллизий...
Похоже зря я выебал себе мозги, можно юзать обычное ригидбоди, и двигать его MovePosition. Слишком серьезно подошел к документации, мать ее за ногу.
Еще такой момент, видел в видосе в FixedUpdate домножали вектор передвижения на Time.FixedDeltaTime. Но ведь фикс апдейт и так фиксированный, по идее это сработает просто как константа?
Ну да, либо как ты говоришь, либо через MovePosition. Кстати глянул, в туториале они двигают через MovePosition в FixedUpdate, домноженный на time.deltaTime(чтобы обеспечить независимость от степа FixedUpdate, который оказывается можно менять). Такие дела.
Проснись, ты программируешь!
клева, да.
а я эти дни потратил на вдумчивое чтение того говна что сунули в это dll. репу почесал и подумал что что-то мне эта хуйня не нравится. в итоге занимался тем что скурчивал сидение и колеса от этого велосипеда и приделывал к своему.
пока приделывал, кстати, обнаружил что есть такая хуйня как GenericMenu которое вот для контекстных меню сделали специально. сразу все стало по человечески.
у меня есть схожая проблема. нельзя чтобы на графе были замкнутые круги. поэтому я при добавлении соединений между нодами сначала проверяю не закольцованы ли они.
а у тебя же все в итоге будет между двумя значениями. инпутом и аутпутом для функции шейдора. проверяй не отличается ли инпут и аутпут в обе стороны.
>>31316
ещё вертексное освещение же делать можно и вабще
>>31052
да вроде нормально! рендерить только глубину и нормали то уж мобилки смогут.
>>31147
а ты все равно пытайся! вот у меня только с третьего наскока мотивации хватило. там везде какие-то тайные знания, да. зато какое могущество! смари какую хуйню можно делать в вычислительных шейдорах! здорово же
>>32542
в документации кстати написано что дельтатайм имеет разный результат в апдейте и фиксед апдейте. сам не проверял.
Посоны, а есть тут какие-нибудь КОМАНДЫ? Чтобы сидели в своих сычевальнях и вместе делали что-то. Есть такие? А можно к вам?
> в вычислительных
Я и простые-то осилить не могу. А в чём соль вычислительных - даже не понял. В том, что они могут вернуть какую-то информацию процессору? И с мобилками не понял. Будто они плохо дружат.
Пытаюсь выстрелить из калаша процедурно созданным шаром--
он летит прямо как надо,но как только я через instantiate стреляю префабом пули -- она летит в точку 0,0,0 или хз еще куда,при том что код тот же самый,ниче не меняется,префаб пули никакого кода не исполняет,повернут как надо,все 10 раз перепроверил
тогда садись и крути это говно днями.
>>33473
вернуть информацию могут в общем-то и обычные если похитрить. но в целом да, это вот написание программы для выполнения на видеокарте. если надо сделать какие-то вычисления с плавающей запятой тяжелые то на видеокарте то они за мгновения делаются. там же добрые несколько терафлопсов прохлаждаются. а круты то они много чем. например тем что внутри нескольких потоков можно синхронизировать память. например смотри на картинки.
вот где точки зеленые рисует их обычный шейдор, потом в этот буффер лезет вычислительный шейдор, двигает их там и они очень очень быстро крутятся вокруг выбранной мной точки. и их там я поставил чтоли лол десять миллионов. а фпс так и не просело. очень понравилось крутить эту тучу точек.
или например там где цыферки это какраз синхронизация памяти. группы потоков в общую память суют свой индекс, а он потом суммируется в первом у группы потоке.
или там где треугольник в квадратике - это прототип того что происходит с кубом без дна и верха. что-то более практичное. желтые линии это границы этих кубиков, шейдор выдает минимальную и максимальную высоту у нужной мне фигуры конкретно в этом месте.
вот какую-то тяжелую симуляцию с этой магией делать вообще заебись.
ну а про мобилки - мобилки чтото могут. наверно то что я предложил с тайной камерой они тоже смогут. я не знаю, я не проверял.
>>33492
да ты код нам дай, мы же не провидцы
Впечатляющая штука. А может ты ещё и литературы по ним подкинешь? Или видосиков на трубе хватит? Ну и, собственно, куда их цеплять? Обычный в материал втыкается, а этот куда?
по ним информации довольно много можно найти на самом деле, она больше собрана в кучу. вон на хабре например приятная статья была https://habrahabr.ru/post/248755/ правда про то какие индексы каким тредам присваиваются нигде нормально не рассказывают и там тоже есть свои тайные слова которые можно в код добавлять.
цеплять их никуда не надо, надо создать через Create>Shader>Compute Shader, потом сослатся на него, сунуть в него данные, взять кернел и сказать ему чтобы он делал все. а потом забрать то что он сделал. или не забирать а заставить другой шейдор залезть туда и нарисовать.
с мобилками правда оно не особо дружит, если тебе это важно. но хоть с синтаксисом ознакомишься, может после этого и в обычные шейдоры проникнешь.
>у меня есть схожая проблема. нельзя чтобы на графе были замкнутые круги.
лел, тоже об это подумал. Я так понимаю, что такие закольцованые ноды - это ошибка. Как это во всяких Shader Forge сделано, интересно.
А как-ты вычисляешь значения в своих нодах?
иерархично снизу вверх. в прошлом прототипе у меня были ноды-ассеты, где в качестве инпута были собственно всякие ассеты. какие-то ноды рисовали траву, какие-то деревья, какие-то текстурки на земле, какие-то геймобжекты расставляли всякие вроде грибочков под деревьями. ноды-ассеты смотрели: "у нас есть такие слоты, граф, давай мне инпут из этих слотов". граф лез в ноды которые присоединены в этот слот и просил аутпут уже у них, а если ещё и этим нодам нужен какой-то инпут то так и следовал по цепочке до самого верха. ну и все это разумеется громко ругалось в консоль если я пытался применить граф с нодами где не заполнены слоты с обязательным инпутом.
но как такую схему перевести в текст у меня довольно мутные идеи. у меня то промежуточное говно хранится в самих нодах и вычисляется в них-же, а у тебя то идет работа с конкретными переменными. я бы наверно сделал передачу переменных на манер этой мешанины из спагетти-редактора UE.
а в шейдор фордже не знаю. я им не пользовался. наверно примерно так-же. проверяют и кнопка "сделать шейдор" не включается пока граф не валиден. наверно тоже проверяют всю цепочку чтобы левые ноды смотрели только в сторону инпута, а правые только в сторону аутпута.
хотя кстати хуй даже знает как поступать с всем этим многообразием типов. всякие там float float2 float3 float4 float4x4 и так далее то. для каждого типа свои специфичные ноды чтоли писать?
кстати чуть не забыл. http://on-demand.gputechconf.com/gtc/2010/presentations/S12312-DirectCompute-Pre-Conference-Tutorial.pdf обязательно прочти. на тему оптимизации. там пошагово на пальцах обьясняют как можно сделать очень быстрым что-то такое элементарное как суммирование всех элементов массива.
>но как такую схему перевести в текст у меня довольно мутные идеи
у меня пока наоборот, при компиляции все ноды добавляются в список снизу-вверх, а потом выполняются сверху вниз. идея в том, что каждая node это что-то вроде сниппета кода.
я имел ввиду обновление нод при изменении параметров. всякие текстурки там в риалтайме.
а, предпросмотр промежуточных результатов. а если честно хуй его знает. не выглядит как то что следует делать шейдорами. может сделать в нодах имплементацию на шарпе специально для предпросмотра результатов?
А то смотрю, количество юнити-лохов всё растёт и растёт, похоже на них можно неплохо зарбатывать, но слабо представляю, что пользуется спросом. Шейдеры? Расширение функционала самого движка? Гуи? Наборы "сделай игру жанра Х"?
Чтобы в сторе поделие продавалось, мало сделать что-то нужное всё то, что юнети не предаставляет из карёпки (AI, диалоги и т.д.), но нужно и понятно преподать: тьюториалы на ютюбе, практичные примерчики. По статистике у таких и больше покупают.
так дело не в коде,код работает когда создаю шар
а когда создаю префаб он не работает
я думаю это баг движка
я за так отдаю свое. в топ пэйд долгое время висит А*. вообще я сомневаюсь что можно продать что-то из разряда того что юнити напильником дорабатывает и надо всем. конкурентов много, сделать лучше чем они сложно. продавать красивые модельки и анимации скорей всего лучший вариант.
>>33739
это ожидаемо и я говорил
>>33741
думаю это твой баг, а не баг движка. поэтому давай показывай все, а мы подумаем кто виноват и как это исправить.
кстати о багах юнити. покажу один старый но забавный. до сих пор никаких идей как же это вышло. воспроизвести не смог. обычный вид сцены, слегка необычный вид сцены, вид сцены когда я камерой покрутил
>УЕЧ
>вконтакте
>AIMP
>спизженные substance painter, photoshop и maya
>васянская тема
Эталонный набор говноеда
Ну тогда что-то типа такого.
void Start () {
Quaternion origRotation = transform.rotation;
}
void LateUpdate () {
transform.rotation = origRotation;
}
А, не, объявлять в старте не надо, там только определять.
Короче, ты понял.
Quaternion origRotation;
void Start () {
origRotation = transform.rotation;
}
void LateUpdate () {
transform.rotation = origRotation;
}
Может есть какие конфочки?
Чтоб там можно было смотреть дейли прогресс всяких упоротых и задовать и отвечать на глупые вопросы?
А то хочу влезть в юньку, ничего не знаю, и хочу поддерживаемый проект, чтобы хватило сил докончить
О, заебись, заработало. Спасибо.
Блять. Пиздец какой-то. Нихуя не понимаю.
>что у тебя за проблемы такие? нахуй ты в трансформ вообще лезешь если у тебя RB? если у тебя RB то манипуляции уже делай все через него. у тебя же специальные AddForce, AddTorque и прочие есть которые гарантируют тебе что все будет через физон.
У меня проблема в том, что если я мучу передвижение через физон, то игра резко становится очень требовательной, я хз почему так. Ну мей би это как-то с мобами связано, т.к. если я их удаляю, то всё ок становится.
Кстати, а вот касательно мобов вопрос. Им же по сути вообще rigidbody не нужен, только при смерти, по логике?
currentPosition = Vector3.Lerp( currentPosition, targetPosition, Time.deltaTime * m_Model.InterpolateLerpSpeed );
Это я чего-то недопонимаю, или у них детская ошибка в лерпе? Оно же неравномерно двигаться будет. Надо видно свой скрипт писать. Если есть фотонщики, каково ваше мнение?
Сделай им обоим общего родителя, который двигается, и вращай только того чайлда, которого нужно.
Потыкался. Нашёл файлы без расширения, открыл. Весь текст в 50+ файлах примерно такого вида. Втупую заменил одну фразу на русский перевод - игра кмк просто не стала загружать этот файл, т.е. запустилась, но на сцену с заменённой фразой не перешла. Вернул обратно - нормально. Поменял кодировку файла (они изначально в ansi) - игра крашнулась.
Я пытался попробовать даже откровенную хуйню.
Посоветуйте, как более эффективно вкатиться в эти ваши скрипты? Я неделю пытаюсь разные фишечки реализовывать, просто, чтобы научиться скриптить.
Не смотря на то, что я никогда в жизни не занимался программированием, мне вроде всё кажется интуитивно понятным. Но проблема в том, что если я хочу хоть что-то реализовать, то мне надо сидеть и часами гуглить свою вещь. Почему часами? Да потому что я не знаю английский. Пробовал почитать книгу "Юнити в действии", но как и везде, там описаны какие-то частные вещи и, если, я, например, хочу сделать продвинутый ИИ или что-то в этом роде, то уже зная и представляя, как это будет работать, я просто гуглю сами команды языка. Собственно, есть ли кто-нибудь, кто как я вкатывался с нуля и, в итоге, нормально так умеет? И что можете посоветовать для более качественного развития?
А то я к книгам по разработке отношусь предвзято.
Можно организовать другую конфу. И редкостных мудаков кикать. Просто я хз, есть ли вообще желающие. Т.к. может и тут хватает общения?
Запилить дискорд сервер то просто
> Есть смысл читать книгу из шапки, если я имею опыт в проганье, но не имею в использовании игровых движков?
Читай внимательнее, блин.
> Если ты уже умеешь использовать язык
> Крайне рекомендуется купить/скачать книгу Unity in action
Перевожу: книга как раз для тех, кто умеет кодить, не не знает движок.
Так что ответ на твой вопрос: да.
Научитесь же вы читать уже
*но не знает движок
Реквестирую какой-нибудь материал про юнити и кодировки, потому что чую проблему в них. Как юнити работает с кодировками?
> length =5;
> vertPerSide = 10;
> float step = length / vertPerSide;
> print(step);
> 0
Я, наверное, с ума схожу, да?
float a = 5;
float b = 10;
void Start () {
float c = a / b;
print (c);
}
Выдаёт 0,5. Ищи где ты наговнокодил.
Блять, да у меня ж инты делились. Вот оно что. C (float) перед делением всё нормально.
Да какого же хрена он читает скрипты только на ansi? В utf вылетает, у меня идей нет.
Еще нашел вариант - эмитить из цилиндрического меша в разные стороны, вроде как живенько, но частиц получается дофига. Как сделали бы батьки?(инбифо пошли в магазин и купили ассет за 300$)
лучше английский выучи чтобы хоть что-то на базовом уровне понятно было, хоть в процессе поиска доучишь. это анальное страдание будет у тебя без этого
>>34073
если погромировать умеешь то документацию лучше начни читать, а не книжки. решай проблемы по мере их поступления. но для начала что нибудь простое ебани чтобы освоится
>>34082
это так не работает
>>34119
https://www.assetstore.unity3d.com/en/#!/content/5141
вон старый экзампл почитай. если бы я хотел сделать какое-то там вращение то я бы наверно сделал процедурненько цепочку рэйкастов чтобы лучик пускать, потом вокруг него ещё повращал бы сколько-то линий красиво через лайн рендерреры вычисляя их позицию относительно основной линии, ебанул бы партиклов красивей с обоих концов.
> Пробовал почитать книгу "Юнити в действии"
Нахуя ты читаешь книгу, которая рассчитана на тех, кто уже знает язык, при этом сам язык ты не знаешь?
Погуглил сейчас про это. Насколько я понимаю нужно разделить мой спрайт на части с одинаковым цветом. И на каждую часть применять renderer.color = new Color(blabla); в Start(), при этом сделать public цвет, который можно выбирать в инспекторе. Всё правильно?
Эта сука почему-то пропускает крайние ключи (последний или первый). НЕзависимо от того, как работает ключ - включение геймобжекта / спрайтрендера / кадры спрайтшита.
Не улавливаю где проёб.
> Ну и кому из вас верить?
Обоим. Книга для тех, кто язык уже знает. И английский учить тоже надо.
>>34478
верь мне во всем. вообще нахуй тебе какие-то книги читать? погромировать то на каком языке умеешь уже? в юнити конечно есть какие-то особенные фичи касаемые взаимодействия компонентов и вот много уже за тебя сделали. первое может быть не очевидным, второе вот только с гуглом и найти можно.
>>35270
умножать то не нужно, но полезно.
>>35504
сейчас я дам тебе что-то очень интересное. обязательно прочитай.
http://beta.unity3d.com/download/472613c02cf7/builtin_shaders-2017.1.0f3.zip
2 объекта. 1 ближе, 2 дальше. Если 1 объект встанет на одну линию со вторым, то для второго (hit.transform.tag == "Object" && hit.distance < minDist) выполняется.
>погромировать то на каком языке умеешь уже
Работаю жс-ёбом не вебмакака, с шарпом имел теплые дружеские отношения.
>в юнити конечно есть какие-то особенные фичи касаемые взаимодействия компонентов
Например?
>сейчас я дам тебе что-то очень интересное
т.е. таки нужно вживлять свой код в готовые шейдеры? Оке, спасибо.
а, кстати, вот стоит ещё сказать особенное. почитай про то как юнити обманывает систему с удалением обьектов. если сделать Destroy(object) то объект то удалится. но как по твоему что станет с ссылками на этот объект у тех у кого она уже есть? или ещё лучше - как на это будут реагировать коллекции вроде хэшсета?
почитай про сериализацию в юнити, тоже интересное чтиво. можно вон теоретически создать инстанс абстрактного класса.
про корутины как заменитель тредов и даже такой базовой хуйни как апдейт почитай.
Если собрался костыли немного писать то почитай про Event.current и control id.
у юнити то много всякой удивительной хуйни творится которая в целом в большинстве своем довольно могущественная но в ней могут творится удивительные вещи.
Мне нравится твой редактор. Он лучше дефолтного.
Я тоже пытался сделать свой, но не осилил прокрутку. Да и вообще что-то приуныл от осознания того, что придется слишком много времени потратить на изучение всратого юнитивского гуи.
Рядом с кнопкой "сделать пиздато"
Итак, прошла первая неделя. За это время было сделано ничего.
В общем, у меня появилась некая теория как это все сделать. Я хочу сделать что-то вроде простого ShaderDOM, из которого затем генерировать код шейдора.
Так-же у меня появилась идея как можно не разделять граф на 2 шейдора. Для этого нужно один и тот-же граф конпелировать в 2 прохода: суть в том, что во время вертексного прохода, все связанные с вертексным шейдером ноды запишут какой нужно код, а во время пиксельного - соответственно запишут пиксельный код. Правда я не уверен насчет того, что это все будет работать.
В общем, я пока решил сделать просто демку генерации surface-шейдера из графа. Без preview и прочих мокрописек.
Так как я ТРУЪ-indei читай "нищеброд" то использовать проприетарные дорогие обфускаторы не могу. И тут я подумал, а что если практически весь код, ну скажем кроме гейм-менеджера, перенести в ДЛЛ на с++?
1. Не потеряю ли таким образом кросс-платформенность?
2. Я слабо представляю, как это делается и какой обьём работы предстоит. Достаточно ли будет написать типа враппера какого-то, ну регистрация функций, да и всё? Насколько вообще ебанутая идея?
3. И как думаете, на производительность сильно повлияет?
Анус себе зашифруй, пес.
Косинус угла между векторами равен скалярному произведению векторов, поделенному на произведение модулей векторов.
В принципе можно ручками посчитать. Простейшие вещи, в школе такое проходят.
Ты, дружище, видимо совсем не в теме. Необязательно, конечно, матан и сопромат знать для инди-геймдева, но какие-то школьные основы не помешало бы.
Можно и так:
Vector3.Angle (a, b);
Ну продолжил бы. Типа "Например, между точкой А и точкой Б 2 метра, соответственно у них котангенс 2 должен выйти."
я бы дал свой да он на самом деле тоже так себе. просто приспособил под свои нужды и не имплементил всякую хуйню вроде множественного выбора нод. и реализовал соединение не через перетягивание а просто через нажатие двух кнопок в гуи. и не писал эту ерудну с пропертями у нод, ололо. даже не знаю нахуй это сделали.
у юнити то на самом деле этот лэйаут гуи довольно клевый, советую ознакомится.
прокрутка у меня буквально заимплеменчена как
if(Event.current.type == EventType.MouseDrag && graphExtents.Contains(mousePosition)) {
scrollPosition -= Event.current.delta;
needRepaint = true;
}
>>36300
а я кстати таки сорт оф сделал для некоторых важных нод. можно нажать пкм и сказать чтобы оно показало. например если нажать на превью ноды "Biome bool". правда пришел к выводу что это надо делать отдельно для каждого слота, или чтобы там был предпросмотр с закладками чтобы каждый отдельный аутпут слот мог показать что он там другим передает.
>>36375
уверен ли ты что ты хочешь именно радиус? ведь он 90 должен быть.
Хотел бы найти такого же новичка для создания чего-то вроде команды, ибо в одного пилить очень трудоемко. Если говорить кратко, то хочу сделать нечто вроде гибрида This is the Police + Космические рейнджеры 2. Если вдруг заинтересовало, то предлагаю скооперироваться и разрабатывать её вместе - если получится реализовать задуманное, то все доходы 50/50.
Мой скайп - the_twixxie
Вот видео, если я хуёво(плохо) объяснил проблему:
https://www.youtube.com/watch?v=uLAvxn4-3zE
Понял, в чем дело.
Лучше проведи сам анализ, создавай, компиль проекты, дизассемблируй и шарься в исходниках. Большинство, думаю, принимает уровень защиты как данность или юзает дорохие продукты чтобы спать спокойно. Ведь если ты что-то делаешь на продажу, то и деньги должны быть на защиту твоей жепы, а если бесплатно будешь распространять, то переосмысли нужно ли тебе это вообще, и стоит ли работа затрачиваемых ресурсов.
Если новичок, не лучше ли фармить опыт на проектах уровнем пониже кр2? Не думаю, что стоит бросаться в этот омут, пожалей время хотя бы.
>Из КР2 я хочу взять только систему квестов
Ты только учти что их квесторедактор и квестоплеер писал весьма годный кодер. А сами квесты писали несколько человек около года, и это были не рандом школьники с улицы.
Предлагаю тебе опробовать свои силы, возьми любой известный квесто-движок и напиши пару для пробы. И людям покажи. Вангую гавнище получится несусветное.
Неужели этому нельзя обучиться за N-ое количество времени?
Ну квесторедактор и квестоплеер я хотел в одном своём проекте использовать, который пока у меня в в стадии замороженного бекенда. Где-то была статья даже как у них все реализовано.
левый чел
Ну, насколько я понял по видео, этот код просто парсится roslyn'ом, и потом из syntax tree генерируется шейдерный код. Никакого дебагинга там нет конечно, просто метод стабы.
Просто не понимаю в чем смысл делать какую-то сложную йоба-абстракцию над чем-то очень простым. Вместо того, чтобы потратить немного времени на изучение HLSL, ты потратишь в итоге намного больше времени на изучение архитектуры и особенностей этой НЕХ. И если зная HLSL, ты омжешь писать шейдоры для любого движка, то твои знания этой приблуды генерирующей шейдеры будут ограничены конкретно этой приблудой.
2D арена. Пытаюсь реализовать выстрел в направлении курсора. Всё вроде бы работает, но есть проблема с получением координат курсора. При использовании Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f)); снаряды летят в нужном направлении только когда игрок в начальных координатах (0,0,0). Чем дальше игрок перемещается тем сильнее отклонение.
Я понимаю что нужно использовать координаты курсора относительно игрока, но не могу разобраться как это сделать. Ткните носом, куда копать, что гуглить?
Спасибо.
Что не так? Нужно как-то по особому оформлять?
так ты рэйкаст из камеры ебани чтобы мировые координаты узнать. https://docs.unity3d.com/Manual/CameraRays.html
а хотя ты и вопрос через жопу задал. код прочитал. ты же понимаешь что если взять координаты А и Б, вычесть из Б координату А, то ты получишь направление от А к Б? и тебе нужно похоже именно направление? ты бы вычел из положения курсора позицию игрока. чтобы они стали локальными для позиции игрока и были относительно позиции игрока.
>>36651
в 2д тоже работает, хули.
Снаряды через 2 секунды "исчезали". Debug.Log(shootDirection) показывал -10 по Z. Добавил +10 перестали пропадать.
очевидно потому что у тебя камера находится на -10 по оси z. вообще нахуй ты ScreenToWorldPoint пользуешся? оно же валидно только для ортографической камеры. ещё и начнешь видеть некоторое дерьмо если попытаешься её наклонить немного.
алсо что за хуйня. там же в 2д спрайтах можно менять порядок отрисовки независимо от оси z. или у тебя там что-то особенное?
Пасаны, при сериализации юнитиивента не сохраняются параметры. Задаю ивент в кастомном инспекторе через проперти филд. В чем может быть проблема?
для обьектов в проекте EditorUtility.SetDirty
для обьектов в сцене там щяс подругому надо заставлять их сериализоватся. Dirty только для хуйни в проекте. там теперь новая хуйня для этого https://docs.unity3d.com/ScriptReference/Undo.RecordObject.html инструкция выглядит загадочной
Нихера не помогает, может что-то ещё надо изменить?
Пробовал так, но рэйкаст просто не воспринимает кнопки, как gameobject, просто ничего не происходит
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo))
{
if (hitInfo.transform.tag != "Button")
{
SceneManager.LoadScene(1);
}
}
}
if (Input.GetMouseButtonDown (0) && !EventSystem.current.IsPointerOverGameObject ())
{
SceneManager.LoadScene(1);
}
Ага, ага, ты прям выручил, спасибо парень)
Спроси у менеджера сцен текущую сцену, придурок.
Всё вроде норм, но на деле, когда нажимаешь на паузу, то в 70% случаях кнопка меняется два раза(пауза -> плэй -> пауза) и соответственно игра продолжает "играть".
Помогите, не могу понять почему такая херня творится, если что могу код скинуть.
А можно отправить как-то POST без данных, или вообще например DELETE?
Ты б сначала написал как паузу реализовал. Знаешь ли, хрустальный шар давно у всех сломался.
что у тебя за кнопка такая которую ты рэйкастом жмешь ололо
небось тригериш нажатие кнопки по нажатию и отпусканию кнопки мыши, или ещё что-то более глупое
foreach (Touch touch in Input.touches)
{
Ray ray = Camera.main.ScreenPointToRay(touch.position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
...
if (hit.transform.gameObject == PlayPause)
{
if (!isPaused)
{
Time.timeScale = 0;
isPaused = true;
spritePP.sprite = BTNPlay;
}
else
{
Time.timeScale = 1;
isPaused = false;
spritePP.sprite = BTNPause;
}
}
}
}
foreach (Touch touch in Input.touches)
{
Ray ray = Camera.main.ScreenPointToRay(touch.position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
...
if (hit.transform.gameObject == PlayPause)
{
if (!isPaused)
{
Time.timeScale = 0;
isPaused = true;
spritePP.sprite = BTNPlay;
}
else
{
Time.timeScale = 1;
isPaused = false;
spritePP.sprite = BTNPause;
}
}
}
}
Зачем ты так усложняешь? Лови событие по OnClick, нахуя ты рэйкастишь на гуй?
А не мне?
>>37985
может просто кнопку на гуи жать будешь? но вообще если ты там хуйней решил пострадать и чтото делать кликом на актуальный обьект то вообще-то есть https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseDown.html
Я читал про него и даже почти запилил на нем одну анимацию,но вопрос наверное и вправду тупой
А вот если у меня планируется пауза в игре с замедлением времени,мне нужно только таймскел уменьшать или свою переменную завести глобальную
и к ней скорость движения и всех анимаций привязать?А то если таймскел уменьшить все рывками двигается
Под стендалон нет, а это целевая платформа.
Теперь при нажатии на надписи, которые присутствуют в GUI сцена не загружается, как фиксить?
Ну, например, надписям тег "Yoba". И потом пиши вот так:
if (Input.GetMouseButtonDown (0) && (!EventSystem.current.IsPointerOverGameObject () || EventSystem.current.currentSelectedGameObject.CompareTag("Yoba")))
{
SceneManager.LoadScene(1);
}
Знаю способ только увеличивать размер шрифта и уменьшать размеры объекта - но это говно какое-то. Есть ли нормальные способы? А то выглядит всё размыто.
В треде обоссут и дадут 3 разных совета. К тому же вопросы действительно нубские и не достойны внимания Кармаков
Вряд ли найдёшь одно такое хорошее место. Я даже на оф сайте по вопросам юнити не дождался ни одного ответа. Так что приходится всё вместе юзать. \gd\, answers.unity, stackoverflow и всё прочее что в гугле найдёшь. Так больше шансов, что ответят. А найти одного спеца, который будет с тобой возиться - маловероятно.
есть конференция мудаков, но к ним лучше не ходи. вопросы лучше тут задавай, больше шансов что дадут ответ и больше людей включится в обсуждение, если вопрос интересный. к тому-же задавая вопрос тут и получив ответ возможно другой хуй прочтет его и узнает что-то новое.
ну а то что тебя обоссут так это само собой разумеющееся, зато ответят на твои ответы. вообще ты лучше давай учись вопросы задавать правильно.
Проблема в том, что метод вызывается только при первом клике.
Идти читать дальше про делегаты?
https://pastebin.com/rCbTbUbG
https://pastebin.com/RruL88eT
Похоже, что у тебя код линейно выполняется. А если попробовать вызывать на каком-нибудь onmousedown (или ином, что триггерит fire1)?
ОП, а уже кто-нибудь говорил, что в шапку можно добавить Hearthstone? Он же тоже на юнити. На момент классика и наксрамасса, по крайней мере. Думаю, что и сейчас - потроха вроде не поменялись.
Ты понимаешь значение слова "пустой"? Удалял я свет, нет там нихера, только камера.
>>А если попробовать вызывать на каком-нибудь onmousedown (или ином, что триггерит fire1)?
Тоже самое. Дело не в делегате. В упор не могу понять почему простой if в Update() не работает.
чего ты вообще в делегаты то полез? не лезь в делегаты без надобности. для такой хуйни лучше пользуйся префабами.
помню у меня где-то был экзампл для мудака одного, тебе тоже дам. https://www.dropbox.com/s/fiz18gxi03tjy8e/2ch example.unitypackage?dl=0
скачай, Assets/Import Package/Custom Package и укажи на файлик.
А почему бы и нет? Смысл делегат вроде как понятен + к моей задаче подходит. Ты погоди, я ещё синглтон GameManager сделаю и под событийное программирование всё переделаю.
За префаб спасибо, на его основе реализую сам выстрел.
>>38175
Пиздец, ебучая аномалияили нет?. По какой-то причине код в Update() вызывался только один раз. Ребутнул юнити всё стало как раньше.
причина простая - в твоем случае префаб имеет ссылки на ресурсы и их проще категоризировать по папкам. тыж представь какая срань выйдет если ты такой с делегатами "вот тут у меня самалет, он стреляет этим, этим, ещё этим, а вот ссылка на партиклы и ещё и ещё и материалы не забудем" и внутри ещё делегаты ебошишь чтобы оно эти ресурсы пихало куда надо, собирало делегаты в кучу. проще ебануть папку "вот тут красивый выстрел", там префаб, компонент, все это собрано было красиво, чтобы осталось только перетащить куда надо. ещё и можно разных версий поделать, вот тут префаб с таким компонентом, а рядом другой похожий, но ещё красненьким мигает.
Но... я использую делегаты всего лишь для определения типа стрельбы. Какое оружие возьмешь, такой метод и будет вызываться. И каждый метод создает копию префаба "своего" выстрела.
Почему именно так? Стараюсь оставлять минимум логики и расчетов в Update().
но зачем ты вообще выстрел в делегат то суешь если ты ещё и инстанс создаешь? если хочешь присваивать к переменной то пользуйся ООП. чтобы у тебя метод "ебошить" был универсальным и ты переключал ссылку на активное ебошило, где и вызывался бы этот метод. а лол не сначала выбирал активное ебошило, а потом ещё зачем-то метод в нем хватал
Переопределение метода как в твоем префабе? Метод Shoot() переопределяется в каждом типе выстрела и делает что-то своё. Это я понимаю.
>>переключал ссылку на активное ебошило
Т.е. реализовать выбор оружия. Вот это я пока не понимаю как сделать НЕ делегатами.
>>чтобы у тебя метод "ебошить" был универсальным и ты переключал ссылку на активное ебошило, где и вызывался бы этот метод. а лол не сначала выбирал активное ебошило, а потом ещё зачем-то метод в нем хватал
Я правильно понимаю что твой вариант: 1) Выстрелить (ебошить) 2) Выбрать оружие (переключить ссылку) ?
Чем он лучше моего варианта: 1) Выбрать оружие (switch в Start() ) 2) Выстрелить (вызвать метод запускающий снаряд)
например есть класс
abstract class Weapon{
public abstract Shoot();
}
у него есть два наследника Pistol : Weapon и Rifle : Weapon. Они оба имплементят метод Shoot. допустим у тебя есть каждого из них инстанс (а может и не один), но активный слот у тебя только один. ты пытаешься зачем-то хватать делегат. но зачем хватать делегат, если ты знаешь что все пистолеты и ружья у тебя имплементят метод Shoot? проще иметь переменную Weapon currentWeapon, а потом в апдейте проверять.
if(currentWeapon != null && Input.GetMouseButtonDown(0)){
currentWeapon.Shoot();
}
и чтобы менять текущее оружие ты соответственно меняешь ссылку у переменной currentWeapon.
ты пользуешься ссылкой на иснтанс класса, зная что он наследуется от того класса который может стрелять.
делегат просто лишний шаг в данном случае. мало того что ты сводишь все к одному методу, а значит вся ебучая логика стрельбы будет собрана в нем, так ты ещё и пользуешься только одним сраным методом. а у оружия может же быть что-то другое полезное. например ссылка на иконку, или количество оставшихся патрон в магазине которое ты можешь потом совать в ГУИ пользуясь ссылкой на инстанс текущего оружия.
а что если ты например выбросишь оружие, но забудешь обнулить делегат? при попытке стрелять будет стрелять оружие брошенное на землю чтоли лол. нахуй такое говно
>>и чтобы менять текущее оружие ты соответственно меняешь ссылку у переменной currentWeapon.
Сслыку на префаб я полагаю? Вот тут у меня и был ступор - я упорно думал что выстрел это обязательно метод, отсюда нагуглил делегаты. Теперь я слегка прозрел, спасибо.
У меня простая 2D арена. И мой вариант кажется лучшепока я не наткнусь на кучу подводных камней :).
https://pastebin.com/562FwaAK
https://pastebin.com/pGKQ8KpL
да не обязательно префаб. ссылку на компонент в префабе который стреляет. который является инстансом типа который стреляет. стрельба то разумеется метод. просто метод может не иметь описания в себе и перекладывать описание его на наследующиеся от него классы. а ты страдаешь какой-то хуйней с этими делегатами.
лучше бы сел и прочитал сначала что-то отсюда https://unity3d.com/ru/learn/resources/downloads
в частности посмотрел бы это https://unity3d.com/ru/learn/tutorials/projects/space-shooter-tutorial наиболее близкое к твоему говну. там тебе видео и экзампл.
Здаров, в общем маза такая. Хотим запилить онлайн версию оч крутой настолки Machi koro//
Что приветствуется?
1. Наличие пряморуких погромистов
2. Ваш опыт в геймдеве, ахутиельные идеи откуда можно взять финансирование ну и просто деловые предложения.
Одним словом, есть крутая идея, можно заработать. Можно выпустить не онлайн а полноценную версию, но об этом позже. Главное сейчас найти программистов, маркетологов и прочее гавно. Отписываемся, не стесняемся. Запилим конфу в телеге и будем решать как быть.
Если вы сможете финансово поддержать проект, чтож тем лучше.
У меня есть опыт в индустрии игор, так что для Вас он не есть обязательный критерий. Главное - желание заработать и что бы вы могли в какой-то игровой движок нормальный типа uniti.
telegram @alo1x
RaycastHit2D hit = Physics2D.Raycast (transform.position, Player.transform.position - transform.position);
RaycastHit2D hit2 = Physics2D.Raycast (transform.position, transform.right);
ang = Vector2.Angle (hit.normal, hit2.normal);
Если враг смотрит вверх, вниз, вправо, влево, то всё нормально работает. Но если враг поворачивается не на 90 градусов, то угол высчитывается так, будто бы поворот врага округляется. (0 градусов -- враг смотрит вправо. Если он повернут на 63 градуса, то угол будет считаться так, будто он повернут на 90)
В чем проблема? Во мне.
чего лол. нахуй ты нормали попаданий от рэйкаста сравниваешь? что за охуительный план? просто взять угол между transform.forward и Player.transform.position - transform.position нет?
Ты прав, страдаю хуйней. Спасибо ещё раз.
YourObject.GetComponent<Animator>().enabled = false;
Ну или какой есть фри ассет для этого
да не то что бы у методов хранения графа было уж так много вариантов. чё делаешь то?
Дейтсим для порнотреда рядом. Последние пару дней вникаю в юнити, почитывая фоном unity in action и придумывая систему отношений между жГГ и неписями. Вот на графах хочу сделать связи между неписями, чтобы сделав хорошо одному, мы повысили свою репутацию у близких ему людей.
Можете посоветовать что почитать для реализации всяких gameManager и EventAgregator?
не если намерян вручную редактировать граф то советую сделать что-то вроде такого:
public class Graph {
List<Node> nodes;
List<Edge> edges;
Dictionary<int, Slot> slotByID;
}
public class Node {
List<Slot> slots;
}
public class Slot {
int id;
}
public class Edge {
int idFrom, idTo;
}
граф хранит ноды и соединения между ними, а так-же перед десериализацией составляет словарик слотов нод. ноды хранят доступные слоты. все элементы графа ссылаются на граф и делают манипуляции через него.
можно будет оверлоадить и ноды, чтобы хранить в них игровые эвенты, или обязательный конец/начало диалога. можно оверлоадить слоты чтобы хранить в них пункты диалога и возможно как-то ограничивать тип суваемых туда эджей. и там-же можно хранить требования для появления этого пункта диалога.
если собрался хранить игровые данные хоть в чем-то из этого то советую наследоваться от ScriptableObject.
данные о соединении в слотах не храни.
не если намерян вручную редактировать граф то советую сделать что-то вроде такого:
public class Graph {
List<Node> nodes;
List<Edge> edges;
Dictionary<int, Slot> slotByID;
}
public class Node {
List<Slot> slots;
}
public class Slot {
int id;
}
public class Edge {
int idFrom, idTo;
}
граф хранит ноды и соединения между ними, а так-же перед десериализацией составляет словарик слотов нод. ноды хранят доступные слоты. все элементы графа ссылаются на граф и делают манипуляции через него.
можно будет оверлоадить и ноды, чтобы хранить в них игровые эвенты, или обязательный конец/начало диалога. можно оверлоадить слоты чтобы хранить в них пункты диалога и возможно как-то ограничивать тип суваемых туда эджей. и там-же можно хранить требования для появления этого пункта диалога.
если собрался хранить игровые данные хоть в чем-то из этого то советую наследоваться от ScriptableObject.
данные о соединении в слотах не храни.
И как загрузить строки из .txt в массив? Хотел юзать textAsset, но он null выдает.
охуеть ревью кода. вот до чего людей доводит групповое погромирование. ну ты главное давай, а там разберемся
ничего он нулл не выдает. TextAsset отлично содержимое читает. не понял как пользоваться чтоли?
>я знал, что не делаю откровенное гавно
Обычно люди, которые думают, что делают не-говно, делают такую фиерическую хуету, что окружающие разбивают лица фейспалмом. И при этом с умным видом учат других работать.
Так что прими как факт то, что твой код всегда не очень, и живи с этим, читая книги и размышляя, что можно улучшить/переделать.
получаю доступ к коду билда из стороннего приложения, потрошу Assembly-CSharp
Пробовал следующие варианты и они не прокатывают:
UnityEngine.MyClass
MySolution=имя проекта.Assembly-CSharp.MyClass
MySolution.MyClass
Assembly=CSharp.MyClass
И всякое разно...Ниче не работает. Пробовал сувать MyClass и Type.GetType(MyClass).ToString() в Debug.Log - не выдаёт ничего особенного.
ЧЯДНТ?
А, всё. Дело было не в namespace'ах. Это я криворукий. Полный путь так и выглядит "MyClass", вот и всё.
А текстовые? Не люблю я видиотуториалы. Хотя можно ещё скилл инглиша подтянуть и обмазаться годнотой.
>>38395
обычно люди не думают, а просто делают.
>>38417
это самописное говно и оно ближе к этим нодовым редакторам шейдоров.
>>38418
на самом деле я почти не пользуюсь тем что там есть и в итоге сделал свое, взяв оттуда пару вещей.
>>38463
да лучше уж смотри на английском тогда, если хоть пару слов связать можешь. языки то быстро подтягиваются от практического применения.
>>38472
крючки лол. вообще навскидку не вижу в чем дело. но их кстати можно менять если ткнуть на квадратик в рект трансформе. там опции меняются если жать Alt, Shift, Alt+Shift. что-то из этого перемещает их.
Что на скрине происходит? Ты это будешь в ассет стор выкладывать, или для себя пилишь?
на скрине происходит всякое. это же простенький генератор террейна.
слева делается инстанс хранилки с Vector2, которая сохраняет их в гриде чтобы была возможность быстро проверять нет ли поблизости ещё Vector2 при добавлении, потом туда делается 250 попыток добавить пойнт при минимальном расстоянии в 20 юнитов. потом по полученым пойнтам генерируется диаграмма вороного. потом эта диаграмма вороного структурируется удобно чтобы разделить её на землю, воду, считается высота вертексов пропорционально дистанции до ближайшей границы "воды". потом это все растеризуется в карту высот, карты биом, карту наклонности. что-то из этого размывается. а потом с этими картами происходят всякие интересные манипуляции в своих отдельных нодах. они там плюсуются, перемножаются и прочее. а на концы к ним можно прицепить накладываемые текстурки, или чтобы там были деревья, или травка, или геймобжекты.
пишу пока для себя. потом поделаю имплементацию триангуляции делоне с divide and conquer алгоритмом, может выложу на ассетстор потом за смешную цену, или бесплатно.
хотя там и так уже похожие вещи есть. например MapMagic. но проще уж хуйню под свои нужды ебануть, чем за это 75 долларов отдать.
например простенький паттерн и его результат. в процесе я слишком наклоненный террейн сделал горой, нагенерировал пойнтов, оставил их только там где зеленое будет. сделал шум, обрезал его, травки сунул. потом вот не понравилось, помножил травку на 2, снова сунул, травки стало больше.
>>38503
чего лол. сжатие ты сам настраиваешь как тебе там надо. больше занимает всякая музыка и озвучка. вон HuniePop сраные 300 мегабайт занимает, например.
к тому-же нет ничего плохого в играх которые занимают 2-5 гб.
Я давно мечтаю запилить РТС. Освоил выделение юнитов рамкой, перемещение их с помощью NavMesh, автоатаку, директ атаку, перемещение "на муве" и всякие хелсбары. И тут я понял, что 3D-графику рисовать не потяну. Посему решил переместиться в 2D и сделать что то в стиле warcraft II. Но вот беда, NavMesh работает в осях XZ, а 2D режим юнити в XY. Как быть? Как реализовать навигацию в 2D?
https://docs.unity3d.com/ScriptReference/AI.NavMeshBuilder.BuildNavMeshData.html
почитай внимательно. новый навмеш в юнити такой охуенный что его можно крутить.
>>38507
а да. чуть не забыл.
https://github.com/Unity-Technologies/NavMeshComponents на, возьми отсюда компоненты и экзамплы
Я не смог разобраться, извини. Можешь на примере объяснить как мне сделать 2D-проект с использованием навмеша? Если сможешь, то со скриншотами.
ну? чего же ты такой гейдевелопер хуевый? тебе ссылку дали ниже, открой экзампл 3_free_orientation и посмотри.
Задача стоит создать объект с помощью Instantiate. Как создать его с поворотом, т.е. как использовать кватерион?
Спасибо, это именно то что мне было нужно.
В инспекторе префаб shoot и объект shootSpawn перенес.
хз, почему так не работает, но я реализовывал это так:
shoot = Instantiate (shoot, shootSpawn.transform.position, shootSpawn.transform.rotation);
Если кнопка сделана через обычный UI, то
using UnityEngine.EventSystems;
...
if (Input.GetMouseButtonDown (0) && !EventSystem.current.IsPointerOverGameObject ())
{
//хуйпизда
}
Спасибо, это то что нужно.
И сразу непонимание - нахрена мне этой маской прятать объекты в окне Scene ?
Есть ли где-то галочка какая-нибудь, чтобы можно было оставить их видимыми в окне Scene (или включать когда нужно) ?
И почему тогда не сделали возможность применять маску к 3Д мешам? Без этого оно теряет половину смысла.
И ещё вопрос. Instatiate'ом делаю копии префаба (стрельба). Запутался в координатах. Какие именно мне нужны что бы снаряд летел в направлении курсора? В данном исполнении снаряды летят куда нужно только в начальной позиции.
> Подскажите по поводу камеры - перспективная или ортографическая?
Если нужна перспективная, то перспективная. Если нужна орто, то орто. Для 2D обычно используется орто.
> что бы снаряд летел в направлении курсора
float speed = 2f; // или сколько тебе надо
...
Vector3 pos = Input.mousePosition;
pos.z = 10f; // или не 10, короче подставляешь своё значение по z
transform.position = Vector3.Lerp (transform.position, Camera.main.ScreenToWorldPoint (pos), speed * Time.deltaTime);
Тогда
transform.position = Vector3.MoveTowards(transform.position, Camera.main.ScreenToWorldPoint (pos), speed * Time.deltaTime);
Смотря как ему надо.
А, скрин не посмотрел. Тогда точно MoveTowards
> В данном исполнении снаряды летят куда нужно только в начальной позиции
Ёптваюмать, может это потому что ты Input.mousePosition получаешь в старте, а не в апдейте? Откуда твой старт знает что ты мышку сместил?
>>В апдейте закомиченно именно то что ты предлагаешь. Снаряды перемещаются вместо со мной.
Пизжу, снаряды просто перемещаются в точку куда кликнул.
> снаряды будут смещаться с движением мыши
Снаряды будут лететь туда, где мышка. Тебе разве не это надо?
> снаряды просто перемещаются в точку куда кликнул
Где у тебя в коде хоть слово про "кликнул"?
Ну так разве это не
> что бы снаряд летел в направлении курсора
?
Изъясняйся нормально что тебе нужно.
В PlayerController
//Префаб снаряда
public GameObject shoot;
//Объект откуда стреляю
public Transform shootSpawn;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Instantiate(shoot, shootSpawn.position, shootSpawn.rotation);
}
}
Обычная стрельба кусками говна. Игрок жмет клик, куда мышка направленна туда и летит снаряд. Без воздействий на снаряд во время полета.
Ну так и что конкретно у тебя не работает, если
> В данном исполнении снаряды летят куда нужно только в начальной позиции
?
Ааа, в смысле дальше не летят. Так бы сразу и сказал.
Сделал проектик на компе дома. Закоммитил сначала все кроме билда и папки Library с какими-то как я понял метаданными. Запушил на гитхабчик. Запулился с ноута - открыл проект - он немного покоцался: в сцене в навешанных на элементы скриптах пропали все прикрепленные из редактора ссылочки на префабы, компоненты и т.п. (см. пикрил, вместо этих штук везде было Missing). Потом почему-то создался дублирующий файл .csproj (проектик студии) и стал использоваться он (Был старый Project.csproj, добавился новый Project-CSharp.csproj). А когда я открыл C#-файлик какого то скрипта из юнитиредактора даблкликом и запустилась вижуалстудия, она не подсвечивала синтаксис и писала "Проект был выгружен.", причем райтклик по решению и нажатие "перезагрузить проект" не помогало.
Я решил "черт, все идет по пизде, надо коммитить либрари тоже". Все пофиксил на ноуте, закоммитил еще и папку либрари, кроме всяких тяжелых дллок и т.п. По сути оставил только стандартный гитигнор всяких промежуточных файлов вижуалки и все. Запушил.
Запуллился дома с компа. Открываю проект. Так эта сука говорит "нет, извини, у тебя в мета-данных какая-то хуйня, пожалуй перестрою ка я библиотеку". И опять отрывает все ссылочки от скриптов.
ЧТО ЕЙ НАДО ТО ХОССССПАДИ?!?!?!
Что такое коллаборейт и как его юзать? К гиту уже давно привык, т.к. не первый год прогаю, проблем с ним никогда не испытывал, пока не решил повкатываться в юньку...
Window - Services - Collaborate
Все изменения заливаются в облако (контроль версий присутствует), с другого компа/ноута изменения сливаешь и работаешь дальше. Так же можно использовать в команде.
Всё делается в два клика.
Метафайлы (*.meta) коммитил?
Можно ещё так (вешать на снаряд):
public float speed = 10f;
void Start () {
Vector3 pos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
pos.z = transform.position.z;
transform.LookAt (pos);
}
void Update () {
transform.Translate (Vector3.forward speed Time.deltaTime);
}
Кстати возник вопрос. Как можно отрисовать только часть спрайта?
Допустим для открывающейся вверх двери. Пока уменьшаю scale но выглядит ущербно.
У меня спрайты. Сделал вот так:
mousePosition = Input.mousePosition;
mousePositionRay = Camera.main.ScreenToWorldPoint(mousePosition);
rb.AddForce((mousePositionRay - transform.position) * speed, ForceMode2D.Force);
Причём чем дальше больше расстояние игрок - место клика, тем больше сила. Тащем-то баг превратился в фичу. Можно создавать препятствия перед ебальником или показывать скилушечку кликая как можно дальше от корабля ( сила увеличивается).
Только у меня вопрос. Если дверь должна открываться, то почему её просто не передвинуть, вместо того, чтобы сжимать?
1920x1080, 0:08
нужен был хостинг шебма
Запилил на юнити игру. Покритикуйте.
Sel.
play.google.com/store/apps/details?id=com.LonelyGod.sel
Все просто: уничтожайте квадратики одного цвета, получайте очки.
Испытайте вашу скорость реакции в трех режимах игры: аркада, 13 ходов и 49 секунд. В аркадном режиме уничтожая квадратики вы получаете очки и дополнительное время. В режимах на время и на ходы - заработайте как можно больше очков за 49 секунд или за 13 ходов.
Довен, во время дебага можно навести мышку на переменную и будет показано ее значение.
Можно поставить ивент на конец анимации, хендлить его и вызывать дестрой
Ты б у спрайтов по краям хотя бы в пару пикселей альфа-обводку делал, чтоб они в кашу не сливались. Примерно так.
>Может кто делать ревью кода, чтобы я знал, что не делаю откровенное гавно?
>И как загрузить строки из .txt в массив? Хотел юзать textAsset, но он null выдает.
На Codacy или аналог загрузи
Подскажите, при навыках в рисовании, и нулевом навыке в программинге, смогу я запилить в юнити простенький "камерный" платформер с такой же простой 8-битной графикой. Что то вроде:
https://www.youtube.com/watch?v=x57Gn0beSs8
это лишь пример, игру другую буду пилить но схожую по сложности и типу.
Не умея программировать, смогу ли я обойтись туториалами и возможно какими-то готовыми скриптами, и не потратив 1000+ часов на создания? Рисовать буду сам, скил есть. Не могу выбрать движок.
Все на таком же базовом уровне.
> смогу ли я обойтись туториалами и возможно какими-то готовыми скриптами
Если IQ больше чем длина члена, то сможешь.
можете хуев на почту покидать заодно, че уж там
Сможешь. Написание простых скриптов в юнити, это оооочень далеко от страшного слова "программирование". Тебе по сути надо будет только писать штуки вроде "если Столкновение(Игрок, Враг) то Игрок.Сдох()"
Можно, конечно, заюзать конструкторы, где кодить вообще не надо, но там свободы будет меньше, больше запутанности, так что самую-самую базу надо уметь делать, элементарно там, что такое классы, переменные, циклы, условия.
> готовыми скриптами
Лучше не надо. Лучше потрать на пару вечеров больше, но зато напишешь сам и будешь знать что у тебя где и почему, если что-то поменять захочешь.
> Жопой читаешь?
Видимо да.
> твою пекарню могут угнать
Очень вряд ли, у меня и хардварный и софтварный фаервол, и оба настроены очень параноидально.
Если подозрительная хуета начнётся — накачу.
void OnMouseDown () {
// хуёмоё
}
Соответственно, при клике по объекту что-то происходит.
Есть у меня другой скрипт, в котором прописано
obj.GetComponent<Yoba> ().enabled = false;
Скрипт срабатывает, в инспекторе на объекте obj скрипт Yoba становится неактивным (галочка на компоненте исчезает). Но всё равно при клике на obj скрипт срабатывает, хотя в инспекторе чётко видно что скрипт неактивен.
Это что за говно? Я, конечно, переделал под флажок в скрипте и всё работает, но хуйня всё равно странная.
А, ещё лучше. Можно даже безо всяких вторых скриптов, тупо в инспекторе с объекта снять галочку с условного скрипта Yoba, но он всё равно будет срабатывать.
Античат какая проблема?
Далее в Update пихаю енто
if (IsActiveRightRotate)
{
cube.transform.rotation = new Quaternion(0, -30, 0, 5);
}
else if (IsActiveLeftRotate)
{
cube.transform.Rotate(new Vector3(0, 30, 0));
}
но куб просто прекращает анимацию и зависает на своем прежнем месте.
Что не так?
Забыл сказать, что пробовал по разному реализовать поворот. И через Rotate, и через свойство rotation
что за странная схема присвоения ротации то такая? может просто в апдейте будешь делать ротацию на дельта-ротацию перемножая текущую ротацию на дельту?
вообще на самом то деле ничего удивительного что у тебя что-то там встает. в первом варианте ты зачем-то напрямую выставляешь ротацию, во втором тоже. тебе надо менять ротацию же.
например вот так:
[Range(0f,1f)]
public float speed = 0.9f;
Quaternion targetRotation;
void Start () {
targetRotation = transform.rotation;
}
void Update () {
targetRotation *= Quaternion.Euler(Input.GetAxis("Vertical"), Input.GetAxis("Horizontal"), 0);
transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, speed);
}
Столкнулся со следующей проблемой.
Имеются блоки 1х1, стоящие в ряд строго друг за другом и на одной высоте. На блоки навешен Box Collider 2D.
Есть круг с фиксированным Rotation, с RigidBody 2D, Circle Collider 2D и скриптом, в апдейте задающий фиксированную скорость по координате X.
Результат: Круг перемещается по блоком, но слегка отскакивает так, будто натыкается на выпирающие элементы.
Аноны, как мне разрешить сию проблему? Как заставить круг не отскакивать?
Я бы посоветовал просто сделать 1 коллайдер на все блоки. Но я надеюсь, здесь найдётся кто-нибудь умней меня.
Проблема в том, что блоки генерятся на ходу.
Но этот вариант я рассматриваю как решение, если лучше не найдется. Все таки не хочется мучаться с длиною блока и переделывать генератор целиком.
Я сам не так давно юнити использую, но там похоже есть трабла с координатами. В общем они, как я понял, округляются и если кодом их изменять, в одном случае могут получатся разные значения в.
Да я сам когда камеру вращал на 180 градусов, увидел, что у неё после нескольких оборотов в положении последняя цифра после запятой начала изменяться.
Округляй сам. Например,
static Vector2 round (Vector2 v) {
return new Vector2 (Mathf.RoundToInt (v.x), Mathf.RoundToInt (v.y));
}
и потом просто в коде его вызываешь
Посоны, есть объект со способностью наносить урон, при коллизии с объектом. Как назвать интерфейс с
float Damage {get;}
void OnCollisionEnter2D(Collision2D collision)
?
Damageable
Ну окей, но я не использую никаких вычислений. Я просто инстантинирую блоки с заданной заранее для всех координатой Y. Даже если округление кривое, то оно должно быть одинаково кривым для всех, нет?
Команду мне не собрать, а денег есть на небольшие задания по говнокодингу и сборке карты
поставить систему диалогов с памятью у NPC
там же, понятно, привязка по ивентам
цель - получить от NPC инфу и/или ништяки за любовь и/или ништяки, нужные им.
AI + dialogues
японел, что это не просто говнокодинг и задача не тривиальна ни разу
Начал делать кароче не гугл кардбоард херню на юнити.
Создал проект, сделал всё по мануалу етц.
Билжу - билдится. Отдаю человекам со смартфонами - при запуске приложения их отправляет в маркет за апликейшеном от гугла (это ожидалось), но никто не может его поставить - "ваше устройство не поддерживается". При этом у них есть акселерометры и гироскопы етц, т.к. другие приложения из маркета (не на юнити например) вполне работают, такая картина наблюдается на нескольких версиях ведра. На некоторых приложение запускается но камера не двигается, и все также отправляет в маркет за неставящимся приложением.
Кароче нит про тип инб4 соси
Так говорю все запускается у них, у кого то даже картинка есть. Но всех отправляет в маркет за приложением Google Cardboard - и у всех оно не ставится, хотя спеки нормальные и другие приложения VR работают.
Есть правда еще проблема что у меня лично на руках нет телефона с андроидом выше 4.4 (а ниже не деплоится кардборд)
я про это и спрашивал:
>запускать пробовал?
как можно что-то девелопить, не имея возможности отдебажить самому! Любой говнокод соберется, если нет косяков по синтаксу.
Короче, уговори одолжить тебе тюлюфон
Эх, я спрашивал за графы на прошлой неделе, но так ничего и не сделал. Тоже диалоговую систему буду через графы пилить.
Может накидаете что-ли как делать собственные окна и элементы в гуи редактора?
Я это ты, только у меня 2дэ и я без денег
окна и элементы то легко, https://docs.unity3d.com/ScriptReference/EditorWindow.html а дальше все как в старом ГУИ. разве что ещё есть EditorGUI и EditorGUILayout для всякого специфичного говна. ещё Handles есть которым всякие интересные вещи можно на гуи рисовать. но самое интересное говно случится то как всегда когда захочется что-то хорошего сделать. вообще ты вот вопросы лучше задавай по конкретным проблемам. тема то большая.
так и не дождавшись советов, покапался на фрилансер.ком, где зареган года с 2008-го работодателем.
5 бачей в час для фрилансера из мухосранска хотя город известный это как?
Ты лучше сначала скажи как ты будешь отслеживать сколько часов у него реально ушло на скрипт.
Я перечитал на в месяц. получилось для мухосрани очень не плохо (600+). Он сделал пока 3-4 проекта, где каждый 100-150 бачей и сдавал через неделю. Это мне подходит.
Моя проблема даже не особо в прогании. Сам подпилю как-нибудь. GTGD на ютубе, например, все хорошо объясняет.
Мне надо сделать красиво из имеющихся ассетов на мне защитный шлем от какашек, можете кидать
Ну, не хочу я творить левел! Пусть кто-то накидает, а я там погуляю, оценю.
Сделал бы твою хуйню, но ты просто очередной грязный делец, который хочет нажиться на добропорядочных хикках, так что рака яиц тебе желаю
А ты не проверял просто. Там такое же говно происходит. Я по teamfortress2 знаю, что в соурсе можно удариться в стену, если она состоит из нескольких блоков и ты летишь вверх вплотную к ней.
Т.е. ты делаешь рокетджамп, летишь вверх у высокой такой стены, собираешься пустить в стену ещё 1 ракету и полететь дальше, но тут происходит внезапный пиздец. Ты резко останавливаешься и начинаешь падать.
https://www.upwork.com/ab/applicants/899376062433861632/job-details
enabled отвечает только за выполнение метода Update твоего скрипта все остальное продолжает работать, сделай флаг в своей йобе и чекай его.
По своему игровому опыту я бы сказал, что почти все движки одинаковые. Похоже эта проблема просто обязана существовать, иначе ей на смену просто придут другие.
Можешь json-ы юзать, а можешь вообще скриптабл обжекты юзать и не выебываться.
https://docs.unity3d.com/Manual/JSONSerialization.html
https://docs.unity3d.com/ScriptReference/ScriptableObject.html
У меня есть такая шляпа. Могу пояснить как делать за нихуя или переделать под твои нужды (не за нихуя).
> enabled отвечает только за выполнение метода Update твоего скрипта все остальное продолжает работать
Вон оно как. Спасибо.
У меня есть платформ(пикча 1) с пивотом на гране, для того, чтобы при изменении rotation, объект поворачивался как надо.
Так вот, как мне сделать, чтобы когда куб на него падает, то платформа поварачивалась вслед, как на второй пикче.
да я так и сделал, но там плюс ещё кривая формула конвертации прочего говна чтобы правильно сдвигать рект в нужную сторону. но этот метод выглядит переусложненным.
>>39101
кстати скриптабл обжекты я бы в этом случае особо не советовал. в сбилженом проекте их особо не посоздаешь и поменяешь. они все-же для организации проекта.
>>39141
что за странный вопрос. как сделать то хочешь? физоном? анимацией?
ууу бестолоч. гуглить не может уже. на. https://unity3d.com/ru/learn/tutorials/topics/physics/physics-joints
Ух, ща посмотрим
Ну посмотрел я видосы, поставил на пивот платформы Hinge Joint, все параметры пересмотрел, всё перепробывал, всё равно, когда куб падает на платформу, она чуть-чуть дрогнет и всё.
Помоги, криворукому рукожопу
От того что перестал. Это как зависимость, когда пилишь игру на юнити, твои труды сразу вознаграждаются тем, что твое поделие совершенствуется, и ты сразу на экране можешь видеть как твой персонаж стал лучше выглядеть, или как враги стали умнее, или как появился УИ, и удовольствие и от того что решил какую-то непростую задачу, и от того что твое детище совершенствуется и это чувство прогресса и того что ты не проебываешь время зря в кое-то веки просто охуенно. Короче, я подсел.
Через пару годиков это пройдет
На spine нет торрента
Он у тебя должен быть розовым? Выглядит так, будто у тебя ссылки на материал похерились или на щейдер или ошибка в шейдерее.
Да, для начала хотя бы розовым. Материалы пробовал назначать новые, шейдеры удалял, не помогло. Попробую пересоздать.
public AudioClip sound;
void OnMouseDown()
{
StartCoroutine(RotateBTN());
AudioSource.PlayClipAtPoint(sound, transform.position);
transform.localScale += new Vector3(0.05f, 0.05f);
}
void OnMouseUp()
{
transform.localScale -= new Vector3(0.05f, 0.05f);
}
private IEnumerator RotateBTN()
{
transform.Rotate(0, 0, 2);
yield return new WaitForEndOfFrame();
StartCoroutine(RotateBTN());
}
Корутина выполняется один раз(Когда нажимаешь на кнопку, то она поварачивается на (0, 0, 2) и всё, хотя должна крутиться), в чём проблема?
public AudioClip sound;
void OnMouseDown()
{
StartCoroutine(RotateBTN());
AudioSource.PlayClipAtPoint(sound, transform.position);
transform.localScale += new Vector3(0.05f, 0.05f);
}
void OnMouseUp()
{
transform.localScale -= new Vector3(0.05f, 0.05f);
}
private IEnumerator RotateBTN()
{
transform.Rotate(0, 0, 2);
yield return new WaitForEndOfFrame();
StartCoroutine(RotateBTN());
}
Корутина выполняется один раз(Когда нажимаешь на кнопку, то она поварачивается на (0, 0, 2) и всё, хотя должна крутиться), в чём проблема?
Хуй знает, братишка, у меня всё крутится.
Как это правильно делается? Можно создать для каждой анимации саб-стейт машину, и переключать анимации в зависимости от установленной float переменной. Но выглядит как-то не очень здорово. Плюс придется повторять много работы для каждого айтема. Если эквипа много, то получится неподдерживаемое развесистое дерево.
Может менять анимации в ран-тайм(как это делать)? Или юзать разные контроллеры/разные слои?
Я это делал так: каждому оружию добавлял string с именем булевой переменной, которая в аниматоре отвечала за переход, и потом её передавал в контроллер, а тот уже в аниматор.
Я сомневаюсь что это был рациональный способ, но у меня было три с половиной вида оружия и всё работало.
tg:krasnovmv
Ну и почему ты такой ленивы хуй, что не можешь загуглить "addexplosionforce 2d", где по первой же ссылке всё чёрным по белому написано?
Даже помогу тебе, вдруг у тебя в гугле пожизненный бан.
https://forum.unity3d.com/threads/need-rigidbody2d-addexplosionforce.212173/
А чем тебе способ по ссылке не нормальный?
Ну ладно, можешь по уловному "взрыву" высчитывать расстояния от центра "взрыва" до объектов, которые надо откинуть, отнимать значение от заведомого большого константного вектора и передавать это самое значение в Rigidbody2D.AddForce каждого объекта.
*условному
>>А чем тебе способ по ссылке не нормальный?
Есть готовый метод и не нужно придумывать велосипед?
Прям готовый из коробки для 2д — кажется нет. Я как раз велосипедил с вычислением векторов расстояния. Но то было относительно давно, я с 2д давненько не работаю. Но тот же гугл говорит, что тут без педалей не обойтись.
Покури ещё Collider.ClosestPointOnBounds, но не уверен что оно в 2д работает.
бамп
UnityWebRequest не умеет принимать больше одной куки на андроиде. Одна остается, а остальные просто отбрасываются. Они там охуели такие баги делать?
Поцоны хелп,не могу взять сферой обьекты принадлежащие к слою obstacles(хочу зоны видимости запилить)
Запилил слой,навесил на стенку(пик 2)
нихуя не находит
float viewAngle=180f;
float viewRadius=20f;
visibleTargets.Clear();
obstacleMask=9;
Collider[] targetsInViewRadius=Physics.OverlapSphere(transform.position,viewRadius,obstacleMask);
Debug.Log(targetsInViewRadius.Length);
targetsInViewRadius.Length выдает 0
Спасибо. Нашел вот примерно как это делается через синхронизированные слои.
https://forum.unity3d.com/threads/mecanim-sync-layer.198079/
OverlapSphere ловит коллайдеры, у тебя они там есть? Кстати зачем тебе ловить препятствия сферой, я бы ловил игроков/мобов, потом рейкастил в каждого через слой obstacles, если рейкаст долетел - значит увидели его.
Есть вариант, что он GameObject, на котором висит, считает за объект, с которым он пересекается. С рейкастами, по крайней мере, такая хуйня происходит. Проверь физон в настройках.
Чо делать? Есть ли способ получить доступ к нераспарсенным хедерам?
А obstacleMask это маска или integer? Может с маской что-то?
бамп вопросу
Анончики, подскажите как лучше организовать взаимодействие между компонентами одного геймобджекта, допустим у меня есть компонент который реализует таймер и вызывает переданную как параметр функцию после. Есть компонент который реализует взрыв. Мне нужно сделать бомбу которая взрывается по таймеру. Про геткомпонент естественно знаю, но выходит что скрипт в котором будут обращения к компоненту таймера и взрыва будет зависеть от того висят ли эти компоненты на геймобджекте или нет. Мне не кажется, что это норм вариант, или я уебался, или чет совсем не так делаю.
> будет зависеть от того висят ли эти компоненты на геймобджекте или нет
[RequireComponent(typeof(YobaComponent))]
Подумал, что можно в принципе добавлять компоненты самому, но не уверен, что это хорошее решение.
На null проверяй, лишним не будет. Если отсутствие компонента - не баг, ничего не пиши. Если баг, пиши LogError.
вот эти вроде норм из того что нашел, хотя brackeys мало смотрел
https://www.youtube.com/user/Cercopithecan/playlists
https://www.youtube.com/user/Brackeys/playlists
https://www.youtube.com/channel/UCtQPCnbIB7SP_gM1Xtv8bDQ/playlists
https://www.youtube.com/channel/UCtb1s859RTxx-RIgFs5ZVQA/playlists
У brackeys тоже толком ничего продвинутого, но он, в отличие от большинства, даже простые вещи делает по уму
Стоит, если правильно это сделаешь. Встроенные события работают через sendmessage, что является довольно говеным способом, но можешь написать свой обработчик эвентов и вызывать даже небо/аллаха из аниматора.
Любопытно, а как приделать свой обработчик? Юзать коллбэки из StateMachineBehaviour?
Сделать префаб каждого вида кораблей и подгружать соответствующий, но я не совсем понимаю как перенести все нужные компоненты с префаба на игрока. Какую фразу гуглить
>компоненты с префаба на игрока
Нихуя не понял, что ты этим хотел сказать, чуть подробнее, либо другими словами.
Игра сетевая? Если нет все вообще тривиально. Просто инстанциируй префаб и все. Префаб это и есть "объект игрока".
Есть игрок, к которому прикреплен скрипт на перемещение.
Есть разные виды кораблей. У каждого свои характеристики, анимация и звук. Для удобства каждый вид засунут в свой префаб.
Как передать характеристики корабля игроку я понимаю (переменные), но как мне заменить анимацию и звук?
Думаю в этом направлении:
gameObject.GetComponent<SpriteRenderer>().sprite = _playerShipSprite;
// _playerShipSprite - ссылка на спрайт корабля
Да что за игрок то у тебя, елки-палки? Чем тебя не устраивает уничтожать старый объект и инстанциировать новый?
Отдели вижуал от остального и просто инстанциируй префаб, созраняя ссылку на созданный тобой геймобджект в скрипте игрока, хули ты там выдумываешь?
Я просто плохо объясняю.
>Чем тебя не устраивает уничтожать старый объект и инстанциировать новый?
Получается он должен содержать в себе скрипт на передвижение/обзор и прочее что нужно игроку?
Ну да, к примеру, скрипты контроля, камеры и прочее сидит на префабе, приходят и уходят с ним.
Если тебе нужно сохранять какую-то информацию, когда префабы меняются, можешь повесить скрипт на пустой объект. Пусть он называется PlayerManager, чисто для примера. Можешь даже добавить DontDestroyOnLoad, если нужно сохранить его при загрузке новых сцен.
В этом объекте можешь хранить статы игрока, имя, экспу, и т.п. Как общаться скриптам с префаба и этому скрипту? Можешь инстанциировать новый префаб из этого самого скрипта, Instantiate вернет ссылку на объект, которую сохранишь в переменной. Потом передашь нужные статы и ссылки созданному объекту. Можно в PlayerManager сделать public static PlayerManager Instance { get; private set; } и в Awake() {if(Instance == null) Instance = this;} И общаться с PlayerManager скриптом через Instance. Можешь связывать объекты через FindObject, только не вызывай его каждый раз, а сохрани ссылку один раз, он тяжелый.
Наконец, можно сделать префаб из модели с анимацией и звуком, и сделать его дочерним объектом своего объекта-игрока через transform.parent. Короче, зависит от того, что тебе нужно, и как должно взаимодейтствовать.
Напиши ну, если нет телеги, могу почту оставить
> На null проверяй
Вот этот пидор знает о чём говорит, я даже если на 100% уверен что компонент на объекте есть, всё равно проверку делаю. В нашем деле лишняя паранойя не повредит.
Сейчас использую событие старт на объекте, но это некрасиво. Вдруг я удалю этот объект или захочу их множество из префаба использовать, тогда у меня мой Start или не будет запускаться или запустится несколько раз.
Куда общий для сцены скрипт прицепить?
Сейчас использую событие Start() на объекте, но это некрасиво. Вдруг я удалю этот объект, или
захочу их множество из префаба использовать, тогда у меня мой Start() или не будет запускаться вообще или запустится несколько раз.
Куда общий для сцены скрипт прицепить? И как сделать так, чтобы он выполнялся при старте сцены?
> Куда общий для сцены скрипт прицепить?
Создай пустой объект-контроллер, или на камеру прицепи, уж она-то у тебя точно всегда на сцене будет.
> И как сделать так, чтобы он выполнялся при старте сцены?
void Awake () {
}
Допустим по умолчанию уи создано под вертикальную ориентацию, и как теперь быть когда нужно в горизонтальную? Под андроид можно 2 лейаута использовать для каждой из ориентаций. А тут то как делать? Пока хотелось бы только измененное положение/размеры/?иерархию_сцены?, без новых уи-объектов (т.е. без: выдвижные менюшки в верт. / 2-3 колонки в гор.). Хотя тоже бы хотелось узнать как такое тут и такое можно сделать.
Анимация UI
Представим, для примера, что у нас есть склад товара до 10ед. и нам нужна кнопка, которая меняла бы свой цвет/спрайт/текст в зависимости от заполненности склада. По одному "стилю" на каждую единицу товара (т.е. всего 11 состояний и стилей). Количество товара на складе может изменятся случайно (внешним скриптом) и при нажатии на кнопку (только определённым образом: +1, но на 10 с 50/50% может перейти в 2 или 7). По цвету изменяем только Color, т.е. хайлайт, прессед и т.п. работают как обычно. Почитав мануалы, посмотрев уроки я создал всё это (ну аниматор там, анимации граф переходов, кондишн и т.п.), но у меня есть вопросы.
Как интерполировать цвет по HSV (и т.п.), а не по RGB? Есть что-то встроенное или нужно свое писать?
Можно ли интерполировать не из заданного значения, а из текущего на момент запуска анимации? Например чтобы задать только финальный цвет и интерполировать к нему из текущего.
Кривые указывают конкретные значения, а как задать только форму кривой? Ну чтобы можно было менять значения, а характер интерполяции оставался таким же.
Как задать одну и ту же форму кривой для нескольких параметров (см. вопросы выше), т.е. для всех каналов цвета разом, но у них разные значения.
Переходы (transition) между анимациями (state) имеют какие-то настройки. И я так понимаю они нужны для 3D и бесполезны в нашем примере (ну кроме условия перехода)? Как их правильно отключить?
Как организовать анимацию перехода из одного состояния в другое? Например анимация состояния это просто 1 цвет или "мигание" какое, а анимация перехода это интерполяция из старого цвета в новый. Нужно будет создавать на это 2 стейта (переход + цикличная анимация состояния)?
Если считать что анимация состояния это "мигание" цветом по HSL, то как синхронизировать мигание анимации старого состояния, перехода (изменяя только HSL) и нового?
Как будут работать transition при переходе из state A в state B, когда есть переход из any state в state B. У кого будет приоритет?
Как-нибудь покомпактней можно анимации создавать? Десятки файлов .anim+.meta по 10КБ на один сраный статичный цвет не есть гуд.
Как заставить дочерние элементы блендится с учётом цвета родителя и эффекта курсора (хайлатед, прессед, селектед и т.п.)? Например к кнопке добавить иконку с полосками отражающими заполненность склада и заставить её рисоваться с учетом вышеперечисленного.
*Стоит ли мне дальше ебать мозг всей этой unity-хуйнёй если такой простой пример я могу запилить в контроллере и анимировать в Update? Будет разве что захардкожено.
Допустим по умолчанию уи создано под вертикальную ориентацию, и как теперь быть когда нужно в горизонтальную? Под андроид можно 2 лейаута использовать для каждой из ориентаций. А тут то как делать? Пока хотелось бы только измененное положение/размеры/?иерархию_сцены?, без новых уи-объектов (т.е. без: выдвижные менюшки в верт. / 2-3 колонки в гор.). Хотя тоже бы хотелось узнать как такое тут и такое можно сделать.
Анимация UI
Представим, для примера, что у нас есть склад товара до 10ед. и нам нужна кнопка, которая меняла бы свой цвет/спрайт/текст в зависимости от заполненности склада. По одному "стилю" на каждую единицу товара (т.е. всего 11 состояний и стилей). Количество товара на складе может изменятся случайно (внешним скриптом) и при нажатии на кнопку (только определённым образом: +1, но на 10 с 50/50% может перейти в 2 или 7). По цвету изменяем только Color, т.е. хайлайт, прессед и т.п. работают как обычно. Почитав мануалы, посмотрев уроки я создал всё это (ну аниматор там, анимации граф переходов, кондишн и т.п.), но у меня есть вопросы.
Как интерполировать цвет по HSV (и т.п.), а не по RGB? Есть что-то встроенное или нужно свое писать?
Можно ли интерполировать не из заданного значения, а из текущего на момент запуска анимации? Например чтобы задать только финальный цвет и интерполировать к нему из текущего.
Кривые указывают конкретные значения, а как задать только форму кривой? Ну чтобы можно было менять значения, а характер интерполяции оставался таким же.
Как задать одну и ту же форму кривой для нескольких параметров (см. вопросы выше), т.е. для всех каналов цвета разом, но у них разные значения.
Переходы (transition) между анимациями (state) имеют какие-то настройки. И я так понимаю они нужны для 3D и бесполезны в нашем примере (ну кроме условия перехода)? Как их правильно отключить?
Как организовать анимацию перехода из одного состояния в другое? Например анимация состояния это просто 1 цвет или "мигание" какое, а анимация перехода это интерполяция из старого цвета в новый. Нужно будет создавать на это 2 стейта (переход + цикличная анимация состояния)?
Если считать что анимация состояния это "мигание" цветом по HSL, то как синхронизировать мигание анимации старого состояния, перехода (изменяя только HSL) и нового?
Как будут работать transition при переходе из state A в state B, когда есть переход из any state в state B. У кого будет приоритет?
Как-нибудь покомпактней можно анимации создавать? Десятки файлов .anim+.meta по 10КБ на один сраный статичный цвет не есть гуд.
Как заставить дочерние элементы блендится с учётом цвета родителя и эффекта курсора (хайлатед, прессед, селектед и т.п.)? Например к кнопке добавить иконку с полосками отражающими заполненность склада и заставить её рисоваться с учетом вышеперечисленного.
*Стоит ли мне дальше ебать мозг всей этой unity-хуйнёй если такой простой пример я могу запилить в контроллере и анимировать в Update? Будет разве что захардкожено.
> Читаю юнити ин экшн
> Понимаю, что сишарп для меня СЛОЖНО, ибо я ноль в программировании
Не то ты читать начал. Это книга для тех, кто в шарпах уже смыслит.
В шапке есть ссылка на курсы, попробуй сначала их.
Сишарп легко изучается самостоятельно по любым бесплатным урокам из интернета (которых дофига, как и по юнити). По мне так, если и ходить на курсы, то по юнити. Там материала побольше узнать нужно, чтобы начать. Но опять же я думаю, если ты не можешь всё изучить самостоятельно - смысла платить за это доллары нет.
Хорошо, пройдусь пока по курсам, и еще запишусь на ирл-курсы. Вообще, по книжке все понятно, но очевидно, что шаг в сторону сделать не могу.
> думаю, если ты не можешь всё изучить самостоятельно - смысла платить за это доллары нет
Всё правильно говоришь.
На пустой объект, не?
У меня проблемы с самомотивацией и дисциплиной. С той же тренажеркой - хожу в зал, хотя можно все упражнения делать дома. Но дома ленюсь. А вообще, сколько надо времени для изучения шарпа для старта хоть какой-то самостоятельной работы в юнити, если я ничем сложнее html/css в жизни не занимался?
> А вообще, сколько надо времени для изучения шарпа для старта
Очень индивидуально. Кому-то недели хватит, кому-то и года недостаточно будет.
Если ты совсем корзинус, то заканчивай школу и иди в универ на очку, там будет тебе и мотивация в виде мамки, которая будет тебя дрючить чтоб не проёбывал заплаченные за учёбу деньги, и дисциплина в виде преподов и деканата.
А если хочешь чтоб дома, но не так сухо как в книгах и обычных туториалах, то поищи на ютубе уроки русскоязычного парня с ником stream. Неплохо рассказывал, хоть иногда и тупил, но для поверхностного ознакомления будет полезно.
Курсы по программированию нужны чтобы обучать, а не мотивировать. А шарп нужно знать вообще по минимуму: переменные, условия и иногда матрицы. Если тупо посмотреть все уроки и повторить, можно успеть за пару дней.
>Но дома ленюсь
Попробуй программировать в тренажерке
Нафиг не нужно зубрить язык от корки до корки, мотивация стухнет(у меня, по крайней мере). Пробуй чего-нибудь сделать, подсмотри как пишут скрипты в официальных туториалах Юнити, и делай так же. Если не знаешь что-то - Гугли и сдувай алгоритм. Непонятно что-то в языке - c# Reference или Гугл подскажет.
А, он выпилился. Но есть канал с перезаливками. Там видео не по порядку, так что ищи с порядковым номером "#1" и потом иди по порядку, "#2", "#3" и так далее. Разберёшься.
https://www.youtube.com/channel/UCyh-t-R60C3IwX8iId9y1Rw
Я недавно неплохой канал по шейдерам и эфектам нашел.
https://www.youtube.com/channel/UCEklP9iLcpExB8vp_fWQseg
Ты уверен, что хочешь менять кнопочку через аниматор? Не проще ли написать скрипт? Ты походу микроскопом гвозди заколачиваешь.
>Допустим по умолчанию уи создано под вертикальную ориентацию, и как теперь быть когда нужно в горизонтальную?
Можно универсальный UI запилить например
>>39648
>Под андроид можно 2 лейаута использовать для каждой из ориентаций
Можешь и тут 2 лейаута навелосипедить
>>39648
>А тут то как делать?
Где тут то, йоба? Мы не экстрасенсы
Спасибо, запишем.
Видео — это просто пиздец, как говна поел. И это я его листал, если б целиком посмотрел, то, наверное, сознание бы потерял.
Я это к чему. Теперь я понимаю откуда у юнити такая репутация. Они ж реально думают что это готовая игра, билдят её и потом срут этим в сеть.
Ах да, этот урок или, как его именует "автор", КУРС изначально был ПЛАТНЫМ.
Этот "Калобок" — шедевр геймдева по сравнению с тем, что я посмотрел.
https://www.youtube.com/watch?v=cnEr4P6gGWo
Скрипт для камеры:
public GameObject player;
private Vector3 offset;
void Start () {
player = GameObject.FindGameObjectWithTag("Player");
offset = transform.position - player.transform.position;
}
void LateUpdate () {
if (player == true)
{
transform.position = player.transform.position + offset;
}
Полагаю, камера появляется первой в сцене, когда ещё нет объекта с тегом "Player". Попробовал засунуть в Update() - у камеры сбиваются координаты по Z. Где я проебланил?
> апдейт выполняется то ли каждую секунду, то ли вообще каждый кадр
Сука, и этот человек ещё с кого-то деньги берёт за ОБУЧЕНИЕ
>Теперь я понимаю откуда у юнити такая репутация
Репутация БЕСПЛАТНОГО движка. Ибо ты не сможиш слепить такую игорь, чтобы пробить потолок в 50к по обороту.
Ты не одиног 2bqh
тут некоторые щитают, что получив свет изкорёпки от уеча, им тут же задонатят 3к
Ну тот же уеч вроде тоже бесплатный. Но то ли там СЛОЖНА, то ли плюсы все позабыли, но там такого школотронства не наблюдается.
Уеч бесплатный до того щасливава момента, когда внезапно твою игру начнут донатить. А это значит, что 5% ты внезапно должен отстегнуть.
У юнети первая гроница лежит на 100к 35$ в месяц
https://rutracker.org/forum/viewtopic.php?t=5426859
>такого школотронства
В юнети проще втянуться. Полный магаз ассетов, включая полные проекты игорь с видео-тьюториалами. И сами оффицыальные тьюториалы от создателей юнети.
Не удевитильно, что школоло пойдёт проторённой дорожкой.
но свет в уече лучше из коробки, дела не в крестах, а хитровыебанности игровой механики в уече
> Generally, you are obligated to pay to Epic 5% of all gross revenue after the first $3,000 per game or application per calendar quarter
> 200 бачей.
Столько получит кирил из мухосранска за неделю работы на мой говнопроджект upwork dot com
>after the first $3,000
Я под этим и понимал внезапно
Читай: первые 3к начего не платишь. После первых 3к отстёгиваешь ежеквартально 5%
русня ебаная, после $3,000 заработаных за квартал платишь проценты в этом квартале. т.е. с вечноговна они процент не берут. и что юнетивские 100к бачей, что анрильские 3к в реалиях /gd/ совершенно недостижимы, не волнуйся.
Выглядит неплохо. Скачаю, проверю, отпишусь, как оно для нуба зайдет.
Супернубский вопрос.
Почему меши из ассетстора не ведут себя как гейм-обжект?
Т.е. я настроил так, чтобы игрок не мог проходить через стены/пол и мог стрелять в них. Но загруженные модельки бестелыею
1-день-в-юнити-кун
Чего блять?
Поставь галку Convex на меш-коллайдере, если вообще нет коллайдера - прилепи какой-нибудь. Прилепи так же rigidbody на все что движется. Неподвижное - статик коллайдер.
Ну кстати да, пизжу все-таки я. Но при чем здесь твой вопрос?
> Еще там можно сделать интеллектуальные подсказки на все функции типа FixedUpdate и на коллбеки типа OnTriggerEnter и т.д.
ОКАЗУАЛЕЛЕ!
Нормально объясняй. На твоих скринах ни объекта ни префаба нет, только компонент и окно поиска.
Сейчас гифку кину
Точно, спасибо, ебать, я долбаеб, братишка, земля мне пухом
Спасибо тебе ещё раз, у меня все проблемы разом решились. И, кстать, префаб ещё знает о других префабах
Да, но именно как о префабах. Если ты инстанциируешь из них объекты, придется связывать их во время исполнения.
Добавлю для порядка, что у меня возникли проблемы с дебаггером, при попытке поставить брейкпоинты. Если что имейте в виду. Может быть не у всех это вылезает, я хз.
Прошвырнулся по ютубу, посмотрел подобные ролики (только не такие длинные, я ебал), оказывается я ещё ничё так. Показать ничего готового пока, к сожалению, нечего (потому как "сделал - удалил, сделал - удалил", тупо руку набиваю), но я просто бог моделлинга и скриптинга на фоне тех идиотов, которые просто стандартные ассеты по сцене раскидывают и готовые скрипты к объектам лепят, а им в комментах поют оды и кричат "чувак, ты крут!". А я-то думал что я дно коим я и являюсь, да.
Ну в плане ассетов их можно понять. Я вот начал недавно, и сначала как-то мало внимания обратил на проблему моделек и анимаций. А оказалось это самый большой затык для начинающего - годные ассеты стоят дохуя, да и не факт что подберешь, художники еще дороже, а самому нормально нарисовать - это нужны годы практики. В основном модели, созданные самодельщиками, это тот еще шок-контент.
> Ну в плане ассетов их можно понять
Это "уроки", понимаешь? Чему ты научишь своим "уроком", в котором ты просто таскаешь ассеты по сцене? Ладно бы это были видео "я изучаю юнити с записываю это бэндикамом", так нет, это "смотрите как это делается и запоминайте".
Ничему так не научишь.
Хитбоксы при помощи всяких OverlapSphere - геморно настраивать форму АоЕ хитбокса, под длину и замах оружия. Не самое естественное поведение. Но работают стабильно.
Еще вариант - пускать несколько штук рейкастов из основания оружия по его длине, скажем треугольником, каждый фиксед апдейт. Может это норм? Тоже легко настраивать длину.
смотря че ты там собрался делать. советую воспользоваться https://docs.unity3d.com/ScriptReference/Rigidbody.SweepTest.html
Тут расписано. Тот злой анон был прав: 5% в случае, когда за квартал оборот больше 3000$
У юнети граница в 10 раз выше (100к против 12к в год)
ZdelatPizdato.unitypackage
ты мыслишь в правильном направлении
https://medium.com/the-unity-developers-handbook/dont-re-invent-finite-state-machines-how-to-repurpose-unity-s-animator-7c6c421e5785
да, зачем делать ИИ на меканиме? ну тоесь конечно можно сделать какое-то примитивное говно из пары нод и оно будет работать и это адекватно, хоть и глупо. но что-то сложное как делать то? а что если ноды требуют параметры? ебаться через StateMachineBehaviour и чтобы узнать чем нода А отличается от ноды Б надо кликать на неё? через меканим и диалоговую систему можно сделать с таким-же успехом и много чего требующего бихейвор три, но пользоваться этим можно только в очень малых масштабах.
альтернативы зависят от задачи, разумеется
и это не уклончивый ответ. уже готовых платных и бесплатных имплементаций ИИ хватает. всякие reGOAP, RAIN и прочее.
RAIN
Глючное говно, которое не поддерживается уже давно.
Только время зря на него потратил. Из полезных фич только простое создание зоны видимости/слышимости персонажа и случайный перебор точек маршрута.
В итоге накатил Playmaker и вполне доволен. В нем есть ноды для работы со встроенным в юнити Navigator. Легко обмениваться данными с меканимом и скриптами.
Если бы вопрос сводился чисто к тому, что стоит ли велосипедить, то, конечно, нет, а следовало бы сначала примерить имеющиеся решения (RAIN бесплатен) к своей задаче.
Решение через меканим подкупает тем, что
1. это полноценная FSM
2. наглядно дебажится
3. состояния логично собираются в группы
4. надо ивенты - пожалуйста
погромист сможет в логику плеймейкера?
я пытался в блюпринтс уеча - послал к хуям. Ведь функции надо все равно знать на зубок
Если дохуя программист, то не пользуешься встроенными переменными и экшонами плеймейкера, а пишешь скрипт и экшон, который будет этот скрипт из ноды вызывать.
Но если ты такой программист, который не знает все нужные для работы классы в unity api, то лучше встроенные экшоны использовать, они интуитивные, с подсказками, легко запоминаются.
[Serializable]
public struct Equipment_struct
{
public HelmentItem helment;
public MailItem mail;
public HandSlotItem left_hand_slot;
public HandSlotItem right_hand_slot;
}
Хенд слот итем:
public class HandSlotItem : Item {
public bool one_handed;
public int condition;
public int fatigue_cost;
}
public class WeaponeItem : HandSlotItem{
public int min_dmg;
public int max_dmg;
public bool melee;
public int accuracy;
public int attak_range;
//public skills[] skills;
}
Наследую чтобы запилить еще щит потому что у него статы как у армора а берется он в руку.
public class ShieldItem : HandSlotItem {
public int melee_deff;
public int range_deff;
new public bool one_handed = true;
//public skills[] skills;
}
Сейчас пишу функцию эквипа оружия, и при эквипе двуруча я не могу придумать не костыльный метод, пока приходит в голову только эквипать двуруч в обе руки и скипать его в одной из рук при подсчетах статов и при снятии, но это же просто пиздец костыль. Поделитесь мудростью как это лучше сделать.
[Serializable]
public struct Equipment_struct
{
public HelmentItem helment;
public MailItem mail;
public HandSlotItem left_hand_slot;
public HandSlotItem right_hand_slot;
}
Хенд слот итем:
public class HandSlotItem : Item {
public bool one_handed;
public int condition;
public int fatigue_cost;
}
public class WeaponeItem : HandSlotItem{
public int min_dmg;
public int max_dmg;
public bool melee;
public int accuracy;
public int attak_range;
//public skills[] skills;
}
Наследую чтобы запилить еще щит потому что у него статы как у армора а берется он в руку.
public class ShieldItem : HandSlotItem {
public int melee_deff;
public int range_deff;
new public bool one_handed = true;
//public skills[] skills;
}
Сейчас пишу функцию эквипа оружия, и при эквипе двуруча я не могу придумать не костыльный метод, пока приходит в голову только эквипать двуруч в обе руки и скипать его в одной из рук при подсчетах статов и при снятии, но это же просто пиздец костыль. Поделитесь мудростью как это лучше сделать.
На //public skills[] skills; не обращайте внимание, со временем у меня пушки будут давать скилы, но вопрос не об этом.
По идее, это должны быть два разных слота (в смысле класса), потому что разницы между головой, правой и левой рукой с точки зрения логики надевания предметов нет, а у головы отдельный класс.
Хотя по-моему лучше сделать один класс SlotItem, которому добавить идентификатор конкретной части тела в виде простого enum.
Я бы прикостылил требования внутрь самого предмета, чтобы он требовал наличия списка (или одного) свободных слотов с нужными айди, а в методе экипировки просто проверял, что у персонажа свободные слоты удовлетворяют требованиям предмета.
По моему эквипить в обе руки - норм идея. А что бы не скипать костыльно - не обрабатывай руки как отдельные сущности. Обрабатывай человека. А он там сам разберется что за говно у него в руках.
> разницы между головой, правой и левой рукой с точки зрения логики надевания предметов нет
там есть разница в том что я так сделал чтобы даже через эдитор нельзя было засунуть в слот шлема броню, но твоя мысль по поводу идентификаторов мне нравится, спасибо за ответ.
>>40250
Я так и делаю, но с "он там сам разберется что за говно у него в руках" как раз и возникают костыли.
Есть вот эта хуйня на пикче - здание в горах, так сказать. На здание кинул меш коллайдер и ригидбади, на плеера - соответственно, тоже.
Так вот, если меш-коллайдер повторяет форму здания, игрок через него спокойно проходит. Если поставить галку конвекс - врезается и отскакивает, как и положено, только вот коллайдер тогда у нас в форме куска говна (см. пик), и в здание зайти нельзя.
Неужели придется городить кучу коллайдеров-паралелепипедов вокруг всех стен и углов, чтобы они повторяли форму здания? Я ж заебусь. А как с землей тогда быть? С ней та же самая проблема, а она вообще довольно сложной формы, хоть и состоит из здоровенных полигонов. Или мне эти модельки разрезать на кучу выпуклых мешей, чтобы конвекс-коллайдеры им назначить? Подскажите, плиз.
Еще проблема - ебанутая скорость прокрутки мышью во вьюпорте. Могу либо с такого расстояния смотреть, либо уже внутри здания, один поворот колесика мышки на 300 метров перемещает. Это оттого что меши здания и земли (гор) у меня нехуево так заскейлены?
Не работал с 3д в юнити но в поле меш в меш коллайдере попробуй перетащить свою модельку здания.
Чем не нравится идея напихать бокс коллайдеров, куда надо? А куда не надо - не пихать. Меш коллайдер придется самому рисовать(упрощенный), я так понимаю у тебя его нет.
Он уже там, см. пик. Так как я назначаю меш-коллайдер этому мешу, естественно что он берет форму этой модельки.
>>40379
Долго, я думал есть варианты попроще. Да и с чересчур отзывчивым вьюпортом это будет сложновато. Алсо, открыт вопрос, что делать с коллайдером для модельки земли, см. пик. 2
Единственное что приходит мне в голову с учетом открывшихся ограничений - переделать все нахуй, вообще убрать всякие там двухэтажные здания, сделать землю ровной как стол и разделить ее по уровням, и все это закидывать бокс-коллайдерами... но это кажется как-то тупо.
Есть еще такой стул https://www.assetstore.unity3d.com/en/#!/content/4596 можешь попробовать напиратить где то либо разобраться как они его запилили.
Там же есть встроенный земляной коллайдер. Можно в принципе из модели сделать terrain http://wiki.unity3d.com/index.php?title=Object2Terrain
Алсо, пробовал делать коллайдер здания статиком(без твердого тела и без конвекса)?
Кстати, у тебя игрок кинематика наверное? Не кинематика не должна проходить через обычный меш коллайдер.
У тебя коллайдер-капсула, а не CharacterController? Он странно ведет себя в связке с физическим телом. Не должна она проходить через меш коллайдер. В Standard Assets Example Project там все по этим мешам гоняет, шарики всякие, и люди.
Капсула, капсула.
Ради интереса я только что создал в юньке плоскость, куб, кинул на куб меш-коллайдер, набежал на куб плеером, и о чудо! все работает!
Чем ему не угодила моя моделька - не пойму. Попробую экспортировать по-другому.
Закодил как ты советовал, но всплыла противоположная проблема, что ставить одноручному оружию в требуемые слоты? Можно левую и правую и флажок что это одноручное, но это снова костыль.
Но у меня по необходимым слотам очищает то что уже надето, и как туда засунуть без кучи ифов еще логику или или я не могу придумать.
Не понимат. Допустим у тебя на болванчике слоты, каждый итем занимает N слотов. Скажем, если надета шапка, она не мешает надеть ботинки. Может у тебя совсем другая система какая-то.
У меня просто весь код пишется на отъебись. Допустим есть 5 объектов и на каждом висит скрипт, где в апдейте высчитывается куда было нажатие мыши. А я только сейчас понимаю, что это неправильно, и скорее всего должен быть один скрипт, где бы считалось куда кликнули мышкой, а затем уже выполнялось то или иное действие. Или нет?
Ну или мне постоянно нужно высчитывать время. Так вот у меня может быть по 10 скриптов, где в каждом имеется таймер time= time+time.deltatime. А ведь это скорее всего перегружает саму игру?
Или я ошибаюсь?
Ну суть в том, что может вы знаете годные видео гайды или ресурсы, где про это разжевывают, именно разжевывают, что и как лучше делать, а что лучше не делать. Желательно с примерами.
Юзай что-то вроде этого для хранения данных:
enum InventorySlotID {
rightHand,
leftHand,
Jopa
}
struct Item {
string name = "Dildak"
List<InventorySlotID> requiredSlots = {0, 2};
string meshData = "Resources/Dildak.mesh";
string matData = "Resources/DildakMaterial.mat"
int damage = 5;
int length = 50;
}
bool Equip(Item item) {
foreach (InventorySlotID id in item.requiredSlots) {
if (!character.SlotIsFree(id)) {
return false;
}
}
character.Equip(item);
return true;
}
Алсо, итемы можно загружать из JSON и хранить во внешних текстовых файлах, можно будет читерить себе всякое на ходу.
Юзай что-то вроде этого для хранения данных:
enum InventorySlotID {
rightHand,
leftHand,
Jopa
}
struct Item {
string name = "Dildak"
List<InventorySlotID> requiredSlots = {0, 2};
string meshData = "Resources/Dildak.mesh";
string matData = "Resources/DildakMaterial.mat"
int damage = 5;
int length = 50;
}
bool Equip(Item item) {
foreach (InventorySlotID id in item.requiredSlots) {
if (!character.SlotIsFree(id)) {
return false;
}
}
character.Equip(item);
return true;
}
Алсо, итемы можно загружать из JSON и хранить во внешних текстовых файлах, можно будет читерить себе всякое на ходу.
>где в апдейте высчитывается куда было нажатие мыши
Там есть метод OnMouseOver, который отрабатывает когда мышь над объектом.
>Ну или мне постоянно нужно высчитывать время.
Лично я для этого навелосипедил TimeController, который считает время и дает остальным DateTime gameTime, fixedGameTime, NextFixedGameTime.
>знаете годные видео гайды или ресурсы
https://www.youtube.com/channel/UCPXOQq7PWh5OdCwEO60Y8jQ
В итоге ряд проблем.
1. Все размеры кубов из блендера игнорируются, юнити рисует мне просто ёбаный куб! Какие бы размеры в блендере ни были, в Юньке просто куб каждый раз! ВТФ? Родителей у объекта нет, просто на сцене висит.
2. Грузит только первый меш-куб, второго нет. Resources.LoadAll тоже не пашет. Я уже хз, что делать.
При этом когда смотрю в самом редакторе папку Resources, там и размеры и сабмешы нормально показываются.
>>40492 - кун
Уебал тебе за щеку
Спосибо, добрый антон >>40194 за хароши савет
А вы ебитесь тут с сисярпом!
Так вот, нужно, чтобы при нажатии, допустим, на пробел камера облетала куб чуть выше его и остановилась в той точке, которую нам надо, а не рандомом подгонять значения для Mathf.Lerp().
> нужно, чтобы при нажатии, допустим, на пробел камера облетала куб чуть выше его и остановилась в той точке, которую нам надо
Не нужен тебе ни транслейти ни лерп, используй анимацию.
Я уже и сделал анимацию, но в процессе работы понял, что мне нужна привязка к объекту, вокруг которого камера будет двигаться. А с помощью анимации такого не сделать. Или сделать?
public GameObject yoba1;
this.GetComponent<YobaComponent>() = yoba1.GetComponent<YobaComponent>()
Сделай пустой объект, на него аниматор, а камеру внутрь. Потом добавляешь этот объект в любой другой, а анимация сохраняется относительно локальных координат
Алсо, у вектора есть методы вроде SmoothDamp для плавного передвижения, почитай
Все, что я нашел — это костыль на пикрелейтед. В настройках проверяются ивенты, если ивент — нажатие клавиши, то spinYoba приравнивается к ней.
Буду учить по ходу.
Я просто для того и решил пилить игру, потому иначе мне как-то медленно и лениво это, а так будет желание разбираться по ходу.
да без разницы. в юнити первый результат получишь быстрей.
Крайне высок шанс того, что тебе станет похуй. Это гавно вообще как качели: то пиздец интересно, то нахуй все, лучше подрочить на игры, из-за которых ты решил сделать так же, только заебись.
Чтобы такого не было, надо наметить роадмап с достижимыми шагами, и делать их один за одним. Охуеваешь от трудности чего-то одного, переключаешься на какую-нибудь задачу полегче, чтобы отдохнуть.
И системы контроля версий еще помогают, потому что дают уверенность, что если нахуевертишь изменений, то можно откатиться на предыдущий чекпоинт.
> Охуеваешь от трудности чего-то одного, переключаешься на какую-нибудь задачу полегче
Не в трудностях дело, просто надоедает. Я вот могу по две-три недели часов по 14 целый день хуярить, аж дым идёт, но потом недели на полторы забиваю хуй, ибо заебало неимоверно.
Кстати по 3д моделлингу не меньше хуевых туториалов, чем по Юнити. Так что будь настороже. Выше кидали пару нормальных каналов, еще официальные туториалы Юнити и ворованные/покупные уроки годятся. А что по Блендеру посмотреть из бесплатного - сам вот не знаю.
Короче не жри все подряд туториалы типа пикрелейтед. А по кодингу посмотри конвенции нейминга и написания кода, и когда видишь, что чувак пишет совсем не так, от балды, то скорее всего не стоит его смотреть. То же самое, если явно игнорирует рекомендации Юнити, и делает кривую хрень.
Я просто хочу понять, зачем создавать переменные внутри функций и что значит enum и struct?
> зачем создавать переменные внутри функций
Чтобы они хранили в себе значение.
> что значит enum
Перечисление.
> и struct
Структура.
> в смысле это только для удобства нужно?
Конечно нахуй не нужно. Можно вообще забить хуй на переменные и пользоваться магическими числами. И вообще код в одну строчку писать. И корутинами не пользоваться, а ебаться с флажками в апдейте.
Юзал джейсоны, перекатился на скриптабл обджекты. Батя говорит "Молодца", тянки боятся, быдло завидует, зависимость есть. Можешь свои редакторы для скриптабл обджектов писать.
Смотри, я импортнул модельку, в редакторе отображается обьект с названием модельки, который имеет только трансформ, и его чайлды - два GameObject с MeshFilter, MeshRender всё как положено.
Есть ли способ из коробки, чтобы Transform этого родительского GameObject рассчитывался таким образом, чтобы типа BoundBox вокруг этих child-mesh строился?
Или самому писать?
Грубо говоря, два куба стоят размером 1, один слева, другой правее. Мне надо чтобы родительский ГО свой трансформ делал типа 2,1,1. Тогда я бы смог накинуть на него куб-коллайдер и он бы принял габариты охватывающие все меши в модельке.
Ты опять выходишь на связь, мудило?
Говорят, крашится часто. Ссыкотно ставить.
Я так и думал, спасибо за ответ, побежал радовать батю.
вся суть хуюнити
теперь юнетидетям даже ассет таскать не нужно чтобы навесить ВАУ-ПОЦЭФФЕКТЫ. тепреь они РЕАЛЬНЫЕ ИГРОДЕЛЫ.
> не написал движок с нуля — нимужик
Тут люди на коленке ковыряют шарп, о каком графоне может идти речь?
Кто-то делает игры, кто-то рендерит треугольники. А теперь съеби.
Это ж ещё с июля вроде.
Лол, зашёл чтобы задать тот же вопрос.
Видимо ответа пока нет, во всяком случае здесь.
Тоже распаковал *assets, нашёл там файл без расширения с текстом игры (мне даже проще - весь текст в одном файле) и дальше тупик.
Короче ты это я.
Вы чо совсем ебобо без доступа к Гуглу?
http://www.zoneofgames.ru/forum/index.php?showtopic=36240
Хочу редактировать ивенты через кастомный инспектор. Сделал, как на пикче, все отображается, ивенты редактируются. Но есть одна проблема, не сериализуются поля ивента. То есть они сериализуются, но только если я метод заново назначаю.
https://youtu.be/u2E_rLuF-PY
Ты в курсе что ОнИнспекторГуи вызывается не один, а каждый раз когда надо перерисовать панельку? У тебя там new SerializedObject при каждом чихе создается, по нескольку раз в секунду.
Да, в курсе, в любом случае инициализация проперти в OnEnable проблемы не решает.
Для сайтов такое есть у многих хостеров - выбираешь фреймворк, оно тебе само устанавливает зависимости, генерит репо со всеми нужными хуками, и дальше ты просто коммитишь туда и в хуй не дуешь.
Нет.
Можно.
это для файлов в проекте. для файлов в сцене https://docs.unity3d.com/ScriptReference/Undo.RecordObject.html
Мне не смешно.
1) После перезагрузки сцены - перестают работать элементы интерфейса (кнопки, слайдеры). При чем хоть все скрипты убирай, хоть что делай - они тупо не функционируют, не прожимаются, не крутятся.
2) Сейчас разбираюсь с 3D звуком, тещу его функции. И вот у меня случилась такая мертвая зона в игре. Я сделал три колонки (просто кубы, в которых вшита музыка). Но звук распространяется только в одну сторону от объекта, а не вокруг. Как-будто кубы стоят не по центру распространения звука, а у самого края. Но позиционка звука не настраивается же, если просто использовать как компонент к объекту. Так что я теперь нихера не понимаю, в чем дело.
Так я все подряд ковыряю. Уже много чего научился делать. Я учусь по урокам Стрима, как-раз проходил звук. И вот обратил внимание на такой нюанс, и не понимаю, как это настроить.
Алсо, первый вопрос отменяется - это моя тупость.
Да, скорее всего. Охуенные уроки, спасибо. Круто, что не просто код копируешь, а реально понимаешь и свои скрипты пробуешь. Пока что дошел до интерфейса (пропустил анимацию, считаю ее не такой пока что важной).
Элементарно можешь штудировать официальные уроки на сайте юнити. Если ты совсем новенький, то много полезного узнаешь.
Но они суховаты, да. Стрим более такой, "чувак", так сказать.
Англоязычных таких "чуваков" не подскажу, но, думаю, за меня кто-то подскажет.
GameObject enemy;
void Start () {
enemy = GameObject.FindGameObjectWithTag ("FearOfSun");
}
public void slay (float param) {
if (enemy != null) {
if (param > 5f) {
Destroy (enemy);
}
Привет еще раз. Смотрите, что хочу сделать. Привязываю скрипт к слайдеру и к объекту с тэгом. Хочу, чтобы при значении слайдера > 5 уничтожался объект. Однако, это не работает. Что я сделал не так? Компилится нормально.
Последний андроид СДК консольный, а так открывать батник
{
if (coll.gameObject.tag == "Enemy")
Debug.Log("ENEMY");
}
Rigidbody, коллайдеры и теги на месте, везде 2d. Но всё равно не работает. В чём может быть проблема? Вопрос распространенный.Нас даунов много
Я брал пример из урока:
public void slay (float param) {
transform.localScale = new Vector 3 (1f, param, 1f); }
Скрипт привязывается к слайдеру, и param передается от value слайдера. Но когда я захотел что-то поменять - получилось нихуя.
Блять, откуда ты param передаёшь? Ты вообще видишь что у тебя в коде?
У тебя максимальное значение слайдера не 1 случайно? К onValueChanged цепляешь свою функцию? Посмотри в дебаггере что там происходит, не равна ли null ссылка на объект.
https://www.youtube.com/user/KnnthRA
https://www.youtube.com/channel/UCifiUB82IZ6kCkjNXN8dwsQ
https://www.youtube.com/channel/UCYbK_tjZ2OrIZFBvU6CCMiA
https://www.youtube.com/channel/UCPXOQq7PWh5OdCwEO60Y8jQ
https://www.youtube.com/user/Cercopithecan
Вот у этих чуваков находил то что мне было нужно и вроде как довольно таки ровно запиленое.
Пикрилейтед - попытка винтажного холодильника. Завтра доделывать\красить, но вот вопрос. Если не для графонистой хайполи игры, а сорт оф икском, нужно ли делать ретопологию, или вообще похуй?
Не сглаженная 768 полигонов, на сглаженной 6100.
Если кому мнтересно, решил проблему с помощью SerializedObject.ApplyModifiedProperties.
Согласен, немного убрать можно. Но немного. Много лупов для корректного смуфа, и чтобы вообще сетка по пизде не пошла. Я начинал делать на отьебись, чтобы в минимум полигонов убраться, но в финале столкнулся с тотальным пиздецом, что пришлось переделать с нуля.
Но таки интересно за юнити.
И еще есть пара вопросов юнити. Допустим я в максе настрою маты на отражения, на ржавчину и тд. Юнити это переварит, или там отдельно надо настраивать?
Я просто хз как это все устроено.
> Допустим я в максе настрою маты на отражения, на ржавчину и тд. Юнити это переварит, или там отдельно надо настраивать?
Не совсем понял чё ты хочешь. Юнька отдельно хавает карту нормали, спекуляр и так далее. Так что красишь свой холодильник, всё запекаешь в текстурах и свободен.
> Допустим я в максе настрою маты на отражения, на ржавчину и тд. Юнити это переварит, или там отдельно надо настраивать?
в максе вообще ничего не крась, макс ебанутый и озалупился со своими ебанутыми материалами. у него даже нормали через жопу отображатся, и это не просто Y+/Y- а что-то иное.
красить модельки нужно в специально предназначенных для этого приложениях.
> у него даже нормали через жопу отображатся
Не пизди мне тут.
> и это не просто Y+/Y- а что-то иное.
красить модельки нужно в специально предназначенных для этого приложениях.
Не слушайте его, он - ебанашка.
>>41186
>И еще есть пара вопросов юнити. Допустим я в максе настрою маты на отражения, на ржавчину и тд. Юнити это переварит, или там отдельно надо настраивать?
Для спека, хейд мап, ао- отдельно будешь настраивать в самом unity.
3ds max тебе разве что автоматически сгенерирует дифуз/альбедо и нормал мап.
Добавлю.
Вообще, ты можешь моделировать хоть в сие царском, королевском 3ds max.
Ну или blender, maya.
Главное, сделай норм модель и развёртку.
Что бы можно было в пейнтере текстурировать.
> Не пизди мне тут.
нет это ты не пизди мне тут.
> Что бы можно было в пейнтере текстурировать.
> красить модельки нужно в специально предназначенных для этого приложениях.
зачем ты повторяешь что я сказал? ты попугай?
> нет это ты не пизди мне тут.
нет это ты не пизди мне тут
>зачем ты повторяешь что я сказал? ты попугай?
Нет это ты попугай
Нет это ты попугай
за джве недели
Делаю простое зеркало через камеру + рендер.текстуру.
Зеркало получается обратным - персонаж идет направо, в зеркале движется налево. Как поправить?
Я дебил, простите.
По иксу в -1 ебани.
http://wiki.unity3d.com/index.php/MirrorReflection4
а твои махинации применением камеры это костыль.
Алсо, звуки, которые звучали с нормальной громкостью в редакторе - в готовой игре звучат ОЧЕНЬ тихо.
1. Не проебываешь анчоры на канвасе
2. Правильно выбираешь относительный, либо абсолютный размер ui элементов.
3. ????
4. Профит
Якоря для кого, блджад?
>Поясните по юнити. Реально с нуля за неспешные полгода в одиночку наваять несложную ламповую игрушку, способную получить зелёный свет в стиме?
Зависит от того, что ты хочешь.
Гринлайт всё. Теперь это называется Steam Direct и туда принимают любое говно, надо только заплатить взнос в размере $100 и пройти проверку на вирусы.
Вопрос только в том, сделаешь ты вообще что-то или нет.
Чё, реально можно распаковать билд обратно в проект?
30$ лично мне жаль на проверку.
инби4 разраб DevXUnity
гугл на вопрос об иоке мне говорит "юзай зенджект, сука", но в нем конфигурация только через код, а я хочу через хмл/джсон/йамл. Насколько сложно подключить левый нетовский контейнер, есть ли какие-нибудь подводные?
Все, поостерегусь в следующий раз задавать вопросы, предварительно не залезая в гугл. Извините.
Читать я научился когда ты ещё у папы в яйцах чесался.
Но если ты упираешься в код, то учи код.
Значит хуево научился, учись еще.
Подсказка: конфиги (и все константы вообще) выносят в отдельные файлы без лишнего синтаксиса не потому что упираются в код, а потому что это удобнее.
Странно, с идиотским вопросом врываешься ты, а чёто там хуёво читаю я, ага.
Вот где я наебался - эта киллер фича стоит у разраба 200$.
> - Generate Unity3D project (from win, mac, APK) (scenes, sripts, resources) - Currently not full implementation (Is being finalized)!
Бесплатный вьювер показывает ресурсы игры офигенно, я будто смотрю проект в юнити (загружаю во вьювер exe игры, остальное прога подтягивает сама).
Но 200 баксов лишних у меня конечно нет.
Как и кейгена.
Блядь, вот что надо было делать, а я-то всё думал, как лучше всего на юнити-лошках бабла срубить. Как всегда все самые прибыльные идеи реализуют до нас.
Почему ты такой токсичный? Этот тред создан для высмеивания? И этот же вопрос я задавал постов 70 назад и никто не ответил, если ты такой знаток то поделись.
мимопроходил
Хуй знает что ты хотел этим сказать.
Программки для работы с *assets (просмотр, распаковка, перепаковка) - их есть 2-3 штуки как минимум, неплохих и бесплатных.
DevXUnity стоит на много уровней выше, это как хуй с пальцем сравнить. По твоему легко реализовать такое:
> Generate Unity3D project (from win, mac, APK)
100% оно коряво это делает и всё потом нужно доделывать руками, но хоть что-то.
Сделай аналог дешевле, разбогатеешь.
С другой стороны хорошо, что у школьников нет возможности получить проект из чужой игры.
Не то, чтобы я в принципе использовал анимацию, но почему она должна выключаться, если ты её просто перемещаешь каким-нибудь Rigidbody.velocity
Может таймкод дашь?
Сделал всё, как он, но не работает, стоит мне выключить анимацию, сразу начинает двигаться
ёбай онимку на чайлд, а не на сам тот геймобжект что двигаешь
Чот хуево у них с маркетингом - залили бы чтоли видосов с левого аккаунта с реальными играми, чтобы показать текущие возможности, а то пруфофконцепт две сотни не стоит.
> допустим у меня есть объект, состоящий из нескольких объектов
Не может у тебя объект состоять из объектов. Он может быть родителем других объектов, но это всё равно самостоятельный объект.
Добавить вторую камеру и рендерить с неё на текстуру, а текстуру прилепить куда тебе надо.
>Я слышал
Ну если ты слышал, то тогда конечно. Послушай еще, может услышишь другое решение для твоего ебанутого случая.
блять, нормально ситуацию объясняй. как вы заебали, сначала костыли выдумываете, а потом спрашиваете А КАКОЙ КОСТЫЛЬ ЗДЕЛАТЬ ЧТОБЫ МОЙ ДРУГОЙ КОСТЫЛЬ ЗАРАБОТАЛ
Какие костыли? У меня 2д-шный дебил бегает, у него руки, ноги, голова и у всего этого коллайдеры, ригидбоди и скрипты. Мне просто нужно скопировать картинку без всего этого.
>>41487
Клацни по нему райткликом, сделай дубликат, убери все ненужные компоненты, перетащи в папку с префабами. Потом в коде где то где удобно сделай переменную в класе типа GameObject захуярь туда свой префаб. Потом через https://docs.unity3d.com/ScriptReference/Object.Instantiate.html добавляешь его на сцену.
я не про то. какова цель коприрования? обьясняй ситуацию в подробностях с предысториями
Вообще мне нужно, чтобы худ игрока (UI) уехал в одну сторону и выехал из другой. Хочу запариться с пространством свободным на экране. В общем тут показывать надо.
Костыли — это не оптимизация.
Ты игру сначала сделай. Слышал про вайтбоксинг, не? Прототипирование там, все дела.
Ты не тем занимаешься.
хуле тебе не ясно. есть объект, на нём скрипты. ставим объект на сцену, скрипты выполняются. ставим больше объектов - выполняется больше скриптов
Короче, пидор. Это можно сделать шейдером, если твой пидор это цельный скиннед меш. Но ты слишком тупой для этого, так что просто иди нахуй.
Да, только у меня ui и ничего цельного
Они у меня всегда трясутся.
Ладно, спс за идею, анон, я спать.
Award Winning Idea
Аноны, никто и вас до такого бы не додумался
https://www.youtube.com/watch?v=_4ISYP3P9IU
Более того - старо как мир. В первый раз подобную штуковину фигачили в интернет-редацкии Times, в виде съемок панорамных видосиков. Около года назад. В итоге чуть-ли не треть пресс-релизов были по поводу этого самого empathy generation. Остальное это философствования по поводу места человека в VR-пространстве и виртуальных изнасилованиях, травле в виртуал-спейсе и других sotial-vr платформах, anti-harasming bubbles.
P.S Короче - в "Кремниевой Долине" полный пиздец и разработчиков VR/AR меньше, чем всяких журналистиков, пихологов, евангелистов, теоретиков, исследователей экспириенса и прочей шелупони
P.S.S я бы с удовольствием показал ей свой код, покопался бы в ее, и научил всяким приемчикам.
>утю-тю какой милый беззащитный щеночек
>почему он вырос в волкодава
>почему он меня не слушается
>почему он откусил мне руку
>почему я под шконкой
Захотел я для стора модели пилить, а чтобы была ФИШЕЧКА решил сделать простой шейдор, который как стандартный, только по альфе диффуза можно цвет менять.
Получился пикрелейтед. Но я, вот, боюсь. А вдруг он не у всех работать будет? Или, может, сломается после какого-нибудь обновления унити?
> Еще нихуя не понятн скомпилировал он его заново или нет
Чего блять? Если ты скрипт сохранил и перевалился в редактор, то он его начинает компилить, что даже визуально видно по вращающемуся кружочку.
нихуя, это для обычных скриптов так
а когда делаешь какие-то изменения для скриптов редактора (Editor) то они хуй когда скомпилируются и нихуя это кружечком не показывается
что и бесит дико
пкм+refresh
Не я хочу запускать его только тогда когда он уже закончил работать
Да, у меня все получилось. Спасибо
Если у кого была такая проблема, решение тут
https://docs.unity3d.com/ScriptReference/CompositeCollider2D.html
Неужели надо каждый раз получать эти обджекты из сцены чтобы при необходимости изменить?
И ещё как сделать переменную в классе, в которую я смогу положить любой существующий класс, что-то уровня void?
В юнити есть базовый класс object для любых unity объектов.
Да не ссы ты, все нормально. Не нужно бояться шейдеров.
Шизик ебаный, ты сам то понял что написал?
>Затем хочу создать в другом скрипте массив указателей на эти компоненты, чтобы легко к ним обращаться, как это сделать?
без задней мысли, создал да передал.
>как сделать переменную в классе, в которую я смогу положить любой существующий класс
зачем?
Как понять, какой слой использовать?
А, всё, я определился, спасибо тебе огромное
> Как это реализовать? Сделать для каждого корабля свой скрипт? Так отличие в паре строк.
ScriptableObject жи.
Я конечно не настаиваю, но может тебе изучить аниматор? Переходы там, параметры, эвенты. StateMachineBehavior тоже пригодится. Клип как правило должен запускаться из state machine, а не из рандомного места в коде. Ты рискуешь получить большие трудности с дебагом(если сподобишься соорудить что-то сложнее хеллоуворлда).
О чём это он мне сигнализирует?
Что я пока придумал - сканировать переднюю полусферу лучами/триггером, проверяя направление пути. Если путь направлен в сторону forward, и триггер сработал - останавливаемся.
И еще вариант - отключить автоматическое обновление позиции агентом, и двигать основной объект, только если дистанция между ними больше некоторого порогового значения(lerp,ом). Это убирает мелкие дрыганья.
Плюс включаю NavMeshObstacle и отключаю Navmeshagent по достижении цели. А нет ли случаем "красивых" решений?
Запилил хп персонажу по слайдбару. И такой скрипт.
public class Fire : MonoBehaviour
private float health = 100;
GameObject player;
В апдейте
if (player != null)
{ float distance = Vector3.Distance(transform.position, player.transform.position);
if (distance < 1.5f)
{ health -= (50f * Time.deltaTime);
slider.value = health;
if (health <= 0)
{ Destroy(player);
} ....
Собственно, этот скрипт висит на каждом препятствии и противнике милишнике. Но дело в том, что для каждого препятствия/врага хп персонажа существует параллельно. Т.е. каждый проверяет состояние хп, которое было при последнем контакте именно с объектом, на который висит скрипт, а не с глобального параметра хп.
Как переписать?
Ебать ты задом наперед все сделал. Скрипт игрока сам может следить за своим здоровьем.
Если игрок один, сделай синглтон. А так навесь него что-то типа:
void OnHit(float damage)
{
health -= damage
if (health < 0)
{
OnDeath();
}
}
В противниках у тебя теперь просто будет:
if (distance == ...)
{
player.OnHit(50 * Time.deltaTime);
}
Слайдер хп тоже прописывай в игроке, очевидно же. И максимальное значение не проеби.
А вообще коллайдеры поковыряй.
Спасибо, сейчас попробую.
Я сам подозревал, что что-то совсем нелогично, но использовал скрипт из урока, сам пока что еще совсем слабо. Сделал подобные врагам. Чтобы их могли тоже препятствия коцать, вроде все работает.
Но сейчас поковыряю. Опыт в юньке неделя.
У меня повреждения через интерфейс
public interface IDamageable {
float CurrentHealth { get; }
void TakeDamage (float amount);
}
потом любая дамажащая хуета проверяет(при попадании лучом или коллайдером в колалйдер)
var hp =otherCollider.GetComponent<IDamageable>();
if(hp != null) {hp.TakeDamage(число);}
И еще вариант сделать повреждения через базовый класс Health - какой вариант лучше, это уже на любителя(есть конечно и другие варианты кроме этих).
А как получать дамаг(или не получать), какие эффекты/звуки проигрывать, дамажимый объект решает сам.
мимоанон
> Опыт в юньке неделя
Не, тогда не ковыряй ну или ковыряй, я тебя не остановлю. Полистай что-нибудь по шарпу из /pr/ (C# Player's Guide попробуй — еще захочешь), заметно уменьшишь количество новых велосипедов в коде.
>>42025
Двачую, сам так сделал (правда, под предлогом того, что на всякие коробки и табуретки бессмысленно вешать весь класс NPC).
Полгода назад накодил себе основу для пошаговой стратегии, я тут писал немного и велосипедил. Лето прошло, можно снова садиться за код, и, в общем, решил начать с девконсоли - чтобы в самой игре можно было в нужной точке призывать нужных юнитов, площадки и т.п. Глянул туториалы по этому делу, помедитировал, и понял, что хочу сделать свой велосипед. А для своего велосипеда нужно делать свой велосипедный input field. Ради бога не спрашивайте зачем. Оно и без слов понятно, что из готового можно стяпляпить что-то рабочее и эффективное, просто у меня наполеоновские планы К тому же если я хочу замену определённой последовательности символов на произвольную картинку, то всё равно придётся что-то похожее с нуля кодить. Ричтекст же не работает всё ещё?
Собственно, вопрос: как лучше всего ловить нажатия клавиш? Я знаю про кейкоды и геткейдаун/ап, но я спрашиваю про принцип за ними. Как эта система с переключением языков, шифтами и т.п. вообще работает? Допустим, я напишу класс, в который будет ловиться нажатие клавиши через геткеи и переводить её в нужный формат. Это же совсем пиздец?
А поподробнее можно? Нельзя мне куда-нибудь в коде прицепиться, чтобы уже преобразованный текст использовать?
дай мне!
Сделал несколько панелей, написал скрипт. Закинул его в кнопку, там это. Я даже не сразу понял, в чем дело. Пошел проверил старые кнопки, а там такая хуйня. Теперь рядом с названием шестеренка, а не иконка с# и нет никаких функций. Что делать, как чинить?
рейкаст и путь идет к последней точке, где тебя видел/зарейкастил
Чувак, как стать богом?
вопрос: почему в unity отрабатывает ДЕАКТИВИРОВАННЫЙ В ИНСПЕКТОРЕ, но висящий на объекте скрипт?
Платиновые вопросы? Галочка вы инспекторе выключает только выполнение Srart, Update и прочего.
Это копия, сохраненная 25 июля 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.