Доброго времени суток. Пытаюсь освоить UE4, решил интегрировать проект со стимом по этому гайду: https://www.youtube.com/watch?v=6RlYegIkN0Y Но после редактирования DefaulEngine.ini, перезапуске проекта и его включении стим никак не реагирует, хотя в видео он разворачивается на шифт+таб. Что в DefaulEngine.ini :
Может быть стоит откатиться на более раннюю версию? Сейчас стоит 4.14.0 Буду благодарен за любую подсказку, спасибо.
Добавлено (26 ноября 2016, 13:07) --------------------------------------------- Проблему решил сменой версии UE с 4.14 на 4.76, все заработало с первой попытки. Так же методом тыка определил что наиболее поздняя версия, на которой проект успешно интегрируется со стимом - 4.10.4. Может быть кому-то поможет. Закройте, пожалуйста, тему.
Сообщение отредактировал Zekkin - Воскресенье, 27 Ноября 2016, 14:44
Доброго времени суток. Недавно начал осваивать блендер, и уткнулся в проблему с качеством текстур. Текстура 2048*2048 мыльная, жутко смотрится на модели, а 4096*4096 смотрится хорошо, но весит в ~4 раза больше. Для приплюснутого цилиндра текстура весом в ~20мб - жирновато. Как можно уменьшить вес текстуры, не особо потеряв в качестве? Спасибо. P.s. Скриншоты с моделькой (если её можно так назвать) и текстурой прилагаю.
P.p.s Было бы интересно узнать - можно ли не изменяя текстуру придать оной видимость объема на модели? Спасибо. P.p.p.s Пережал в jpg, вес несколько уменьшился (5mb), но стоит второй раз открыть модель - текстура теряет качество в хлам. Заново загружаю текстуру - все снова нормально, до первого перезапуска блендера :с
Сообщение отредактировал Zekkin - Вторник, 26 Июля 2016, 13:38
Доброго времени суток. Пытаюсь записать объекты со сцены в массив - это получается вполне себе хорошо, но нужно записывать их не абы как, а по порядку. Как можно записывать объекты в массиве по возрастанию/убыванию некоторого значения скрипта-компонента объекта? (Скрипты одинаковые, объекты одинаковые - значения разные). Значения - обычный int. Буду благодарен за любую подсказку, пока на ум приходят страшные костыли. Спасибо.
using UnityEngine; using System.Collections; using System;
public class AnimatePlayer : MonoBehaviour { public Animation anim; //=====
//=====
public AnimationClip Run; public AnimationClip stay1; public AnimationClip RunLeft; public AnimationClip RunRight; public AnimationClip RunBack; public AnimationClip Shoot; private PlayerInfo PlInf; //==== public void Start () { PlInf = GetComponent<PlayerInfo> (); anim.Stop(); }
Добрый день. Интересует мнение сообщества по поводу интерфейса в играх Tower Defense. Есть два варианта - основная часть интерфейса - строительство и спеллы располагаются либо в нижней части экрана, а-ля wc3 и aoe, или же справа - red alert. Понятно, что игры не TD, а очень даже RTS (Хотя в вк3 много карт на эту тему), но все-таки их объединяет строительство - следовательно, их я и сравниваю. Куда, по вашему мнению, лучше всего пихнуть интерфейс? Сам склоняюсь ко второму варианту, но интересно ваше мнение. Спасибо. P.s. игра на pc
Сообщение отредактировал Zekkin - Четверг, 28 Апреля 2016, 20:29
Благодарю за ссылочку =) По поводу устаревшей системы - я так и не нашел отличия старой системы от того же UNET, разве что последний лобби и мастер-сервер от себя предоставляет. Попробую на стандартном нетворке сделать, если все будет так уж страшно - перейду на UNET.
Добавлено (24 апреля 2016, 12:55) --------------------------------------------- Все синхронизировалось, красота!) Единственное но - чуть-чуть дергаются анимации если слишком сильно замедлять их в скрипте таким макаром:
Доброе время суток. Сделал синхронизацию анимации между игроками, но образовалось большое но - анимации всех других игроков, кроме подконтрольного, дергаются, будто пропускают кадры. Сразу подумалось что тут должно быть что-то вроде интерполяции, но гугл молчит - интерполяции анимации не находит Может быть это как-то по-другому называется? Собственно сам код синхронизации:
Код
using UnityEngine; using System.Collections;
public class AnimatePlayer : MonoBehaviour { public Animation anim; //===== public AnimationClip walk; public AnimationClip stay1; public AnimationClip walkL; public AnimationClip walkR; public AnimationClip walkB; public AnimationClip Shoot; //==== public void Start () { anim.Stop(); }
Делал по нарытому в интернетах и понятому из разных исходников. Почему-то кажется что все должно быть просто, вроде интерполяции для перемещения объектов, но вот найти ничего не могу. Если по синхронизации анимаций гугл еще что-то находил, то по интерполяции оных - нуль. Спасибо.
Добрый день. Почему-то некорректно изменяется скорость анимации, при её проигрывании случаются пропуски - 30-40% от общей длины анимации. Грубо говоря, конец анимации банально не проигрывается.
Код:
Код
using UnityEngine; using System.Collections;
public class AnimatePlayer : MonoBehaviour { public Animation anim; public void Start () { anim.Stop(); }
Имхо - не будет пока те же VR очки реально не выйдут на рынок, тк сейчас их покупают единицы. Учитывая, сколько времени прошло в выхода первых очков и то, насколько они актуальны на рынке - лет 5, может больше. Опять же, это только мое мнение как рядового геймера :D По цене - ну, учитывая цену очков... Если сейчас - 100-150тыс, потом по-идее цена должна упасть, все-таки технологии скачут как кони. Я бы приобрел такой комплект за ~50к, если под него будут качественные продукты. Сейчас же это не стоит столько сколько за это просят.
Инерцию, если не ошибаюсь, можно добавить AddForce`ом. Справочка: http://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html https://unity3d.com/ru/learn/tutorials/modules/beginner/physics/addforce
Сообщение отредактировал Zekkin - Суббота, 23 Апреля 2016, 17:47
Как буду дома попробую выдавать каждому игроку PlayerID, и при приближении к предмету через условие проверки ID и префаба игрока открывать сундук. Теоретически должно работать.
Добавлено (22 апреля 2016, 12:09) --------------------------------------------- Нечто вроде Если (!(CurID == PlayerID)) То присваиваю префабу к которому обращаюсь объект коллизии, CurID присвою ID объекта коллизии, иначе не делаю ничего.
Добавлено (22 апреля 2016, 16:19) --------------------------------------------- Добился возможности для всех игроков лутать что-то из сундука, однако теперь лут в сундуке у всех разный Буду пробовать синхронизировать
Доброе время суток. Как можно обратится к конкретному экземпляру префаб`а? Допустим, у меня есть три игрока, созданных из одного префаба. На каждом префабе висит скрипт инвентаря, и при подборе какой-либо вещи скрипт подбора обращается к скрипту инвентаря, соответственно добавляя вещь в него. Поиск игрока к которому нужно обратиться проводился с помощью
Код
Player = GameObject.FindGameObjectWithTag ("Player");
Столкнулся с проблемой - возможность что-то подобрать получает только первый появившийся игрок.
Пробовал сделать так: Обращение идет к игроку который подошел к вещи, но если к вещи подходят 2+ игрока - работает некорректно, какой-то костыль.
Код
using UnityEngine; using System.Collections;
public class TriggerZone : MonoBehaviour { public GameObject Player;
void OnCollisionEnter (Collision col) { if (Player == null) { Player = col.gameObject; } }
}
Собственно из этого скрипта я и вытаскивал экземпляр для обращения. Есть ли у экземпляра префаба уникальный ID или что-то вроде? Что-бы можно было обратиться к конкретному инвентарю конкретного игрока? Все что приходит в голову выглядит как костыль, в принципе, можно и так, но если есть более элегантный способ, то почему бы и нет? Спасибо.
Сообщение отредактировал Zekkin - Четверг, 21 Апреля 2016, 23:31
Если что - Inventory висит на камере, которая висит на игроке.
Код
ArgumentException: An element with the same key already exists in the dictionary. System.Collections.Generic.Dictionary`2[System.Int32,Item].Add (Int32 key, .Item value) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:404) Item001.OnMouseDown () (at Assets/Items/ItemScripts/Item001.cs:19) UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32)
Добавлено (21 апреля 2016, 16:30) ---------------------------------------------
Насколько я понял, в Dictionary нельзя поместить одинаковые элементы? // Хотя бред, в скрипте Inventory прекрасно добавляются одинаковые элементы -_- попробую добавить функцию добавления предмета в Inventory а в Item001 только вызывать оную.
Добавлено (21 апреля 2016, 16:44) ---------------------------------------------
Перевесил Inventory на самого игрока. Попытка что-то изменить приводит к тому же результату, Wooow`кает два раза - потом пишет ошибку.
Код
using System.Collections; using System.Collections.Generic;
public class Item001 : MonoBehaviour { private Inventory inv; public GameObject Player;
// Use this for initialization void Start () {
} void OnMouseDown () {
Player = GameObject.FindGameObjectWithTag ("Player");
inv = Player.GetComponent<Inventory>();
for (int i=0; i<=24; i++) { Debug.Log("Wooow"); if (inv.InventoryPlayer.ContainsValue(null)) Debug.Log("Wooow"); { inv.InventoryPlayer.Add(i, ItemData._ItemData.ItemGen(1)); Debug.Log("Wooow"); break; }
} }
}
Ошибка сменилась на такую:
Код
ArgumentException: An element with the same key already exists in the dictionary. System.Collections.Generic.Dictionary`2[System.Int32,Item].Add (Int32 key, .Item value) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:404) Item001.OnMouseDown () (at Assets/Items/ItemScripts/Item001.cs:26) UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32)
Точнее - изменилась строка с ошибкой
Добавлено (21 апреля 2016, 18:34) ---------------------------------------------
Методом тыка выяснил что проблема в строке
Код
if (inv.InventoryPlayer.ContainsValue(null))
тк без неё все прекраснейшим образом работает. Как еще можно проверить ячейку "на пустоту"?
Добавлено (21 апреля 2016, 19:01) ---------------------------------------------
Еще один эксперимент показал - такой скрипт:
Код
using UnityEngine; using System.Collections; using System.Collections.Generic;
public class Item001 : MonoBehaviour { private Inventory inv; public GameObject Player;
// Use this for initialization void Start () {
} void OnMouseDown () {
Player = GameObject.FindGameObjectWithTag ("Player");
inv = Player.GetComponent<Inventory>();
for (int i=0; i<=23; i++) {
if (inv.InventoryPlayer.ContainsValue(null)) { Debug.Log(i); }
} }
}
Просто перечисляет все i, будто они не заняты, хотя первые 4 (0, 1, 2 и 3) очень даже заняты...
Сообщение отредактировал Zekkin - Четверг, 21 Апреля 2016, 19:01