Хотел создать рейтинг игроков с плагином "Google Play Game Services". Одна проблема, после успешного импорта плагина в File=> не появлятся пункт "Play Games" В чем может быть проблема? Версия Unity 4.6
Сообщение отредактировал STRATEG766 - Вторник, 23 Августа 2016, 17:41
STRATEG766, читаем системные требования https://github.com/playgameservices/play-games-plugin-for-unity: Unity® 5 or above. Note:4.6.8 works at runtime, but some editor functionality does not work. as a result, use of older version of Unity are at your own peril.
Что написано ясно? Попробуй обновиться до Unity 4.7.2, если так нужен 4.x, а если не сработает - не жалуйся, допиливай сам.
Как узнать какие ассеты входят в готовую сборку WebGL проекта, а какие нет ? Большой проект, куча всяких моделейкоторые не используются, текстуры пережал, а размер не уменьшился...
как проматывать текст в textfield? скрипт который печатает побуквено у меня есть, но как сделать так чтобы он проматывался вертикально на строку когда текст доходит до нижней границы окна?
// Add menu named "CleanUpWindow" to the Window menu [MenuItem("Window/CleanUpWindow")] static void Init() { // Get existing open window or if none, make a new one: CleanUpWindow window = (CleanUpWindow)EditorWindow.GetWindow(typeof(CleanUpWindow), true, "Project Cleanup", true); window.Show(); }
void OnGUI() {
if (needToBuild) { GUI.color = Color.red; GUILayout.Label("Are you sure you remembered to build project? Because you really need to...", EditorStyles.boldLabel); }
GUILayout.BeginHorizontal(); if (!needToBuild) { if (GUILayout.Button("Clear EditorLog")) { clearEditorLog(); needToBuild = true; } }
GUI.color = Color.green; if (GUILayout.Button("Load EditorLog")) loadEditorLog();
if (groupEnabled) { GUILayout.Label("DEPENDENCIES"); for (int i = 0; i < includedDependencies.Count; i++) { EditorGUILayout.LabelField("", string.Format("{0} {1}", i, includedDependencies[i])); } }
if (GUILayout.Button("Selected Objects")) PrintSelected();
GUILayout.Space(10);
GUI.color = Color.red;
if (GUILayout.Button("Delete Selected", GUILayout.MinHeight(32))) DeleteSelected();
GUILayout.EndHorizontal(); for (int i = 0; i < objList.Value.Count; i++) { if (objList.Value[i] != null) { GUILayout.BeginHorizontal(); EditorGUILayout.ObjectField(objList.Value[i], typeof(Object), false, GUILayout.MinWidth(340)); toggles[objList.Key][i] = EditorGUILayout.Toggle(toggles[objList.Key][i]); GUILayout.EndHorizontal(); } } } } } }
EditorGUILayout.EndScrollView();
EditorGUILayout.EndVertical();
EditorGUILayout.EndHorizontal(); }
}
void PrintSelected() { foreach (KeyValuePair<string, List<Object>> kvp in unUsedArranged) { for (int i = 0; i < toggles[kvp.Key].Count; i++) { if (toggles[kvp.Key][i] == true) Debug.Log("" + unUsedArranged[kvp.Key][i]); } } }
void DeleteSelected() { if (!EditorUtility.DisplayDialog("Delete Unused Assets", "Are you sure you want to delete the selected assets? There is no going back.", "Delete", "Aaagh, stop!")) return;
foreach (KeyValuePair<string, List<Object>> kvp in unUsedArranged) { for (int i = 0; i < toggles[kvp.Key].Count; i++) { if (toggles[kvp.Key][i]) { AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(unUsedArranged[kvp.Key][i])); } } }
AssetDatabase.Refresh();
loadEditorLog(); }
void ToggleAll(bool val) { foreach (KeyValuePair<string, List<bool>> kvp in toggles) { for (int i = 0; i < toggles[kvp.Key].Count; i++) toggles[kvp.Key][i] = val; } }
void ToggleKey(bool val, string key) { for (int i = 0; i < toggles[key].Count; i++) toggles[key][i] = val; }
try { // Have to use FileStream to get around sharing violations! //System.IO.File.WriteAllText(UnityEditorLogfile, string.Empty); FileStream FS = new FileStream(UnityEditorLogfile, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); //StreamReader SR = new StreamReader(FS); StreamWriter SW = new StreamWriter(FS);
unUsedArranged = new Dictionary<string, List<Object>>(); unUsedArranged.Add("plugins", new List<Object>()); unUsedArranged.Add("editor", new List<Object>()); unUsedArranged.Add("unsorted", new List<Object>()); unUsedArranged.Add("material", new List<Object>()); unUsedArranged.Add("texture", new List<Object>()); unUsedArranged.Add("model", new List<Object>()); unUsedArranged.Add("prefab", new List<Object>());
toggles = new Dictionary<string, List<bool>>(); foreach (KeyValuePair<string, List<Object>> kvp in unUsedArranged) { toggles.Add(kvp.Key, new List<bool>()); }
for (int i = 0; i < assetList.Length; i++) { if (!usedAssets.Contains(assetList[i])) { Object objToFind = AssetDatabase.LoadAssetAtPath(assetList[i], typeof(Object)); unUsed.Add(objToFind); string key = getArrangedPos(objToFind); unUsedArranged[key].Add(objToFind); toggles[key].Add(false); } } }
try { // Have to use FileStream to get around sharing violations! FileStream FS = new FileStream(UnityEditorLogfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader SR = new StreamReader(FS);
string line; while (!SR.EndOfStream && !(line = SR.ReadLine()).Contains("Mono dependencies included in the build")) {
} while (!SR.EndOfStream && (line = SR.ReadLine()) != "") { if (line.StartsWith("Dependency assembly - ")) { line = line.Substring("Dependency assembly - ".Length); } dependencyResult.Add(line); } while (!SR.EndOfStream && !(line = SR.ReadLine()).Contains("Used Assets")) {
} while (!SR.EndOfStream && (line = SR.ReadLine()) != "") {
Добавлено (24 августа 2016, 21:52) --------------------------------------------- NEBR, тот что на гифки, с плохим кодом, тень написана тоже специально, потому что стандартный эффект Shadow от Unity не совместим и на каждую букву расходует лишние 2 вершины, а Outline - это вообще 4 тени, соотвественно 8 лишних вершин на букву. Выкладываю простой код для обычного "печатания" через обновление Text.text:
Код
// Добавлять на объект с компонентом Text
using UnityEngine; using UnityEngine.UI; using System.Collections;
public class TypeEffect : MonoBehaviour { public float CharsPerSecond = 10f; public bool PlayOnStart = true;
[Tooltip( "* Можно не указывать\n" + "* Прокрутка будет автоматической, если Pivot у Text внизу" )] public Scrollbar VerticalScrollbar;
public void Play() { StartCoroutine(AnimateText()); }
IEnumerator AnimateText() {
for (int i = 0; i < text.Length + 1; i++) { textBox.text = text.Substring(0, i);
// Переход на новую строку TextGenerator ctg = textBox.cachedTextGenerator; if (ctg.characterCountVisible < i - 1) { float width = textBox.rectTransform.sizeDelta.x; float height = textBox.rectTransform.sizeDelta.y; textBox.rectTransform.sizeDelta = new Vector2(width, height + ctg.lines[0].height + 1); }
// Сдвигаем Scrollbar if (VerticalScrollbar) VerticalScrollbar.value = 0f;
yield return new WaitForSeconds(1f / CharsPerSecond); } } }
В этой строке
Код
textBox.rectTransform.sizeDelta = new Vector2(width, height + ctg.lines[0].height + 1);
происходит расширение области, где ctg.lines[0].height - высота первой строки, а +1 нужен чтобы текст держался на одном уровне. Почему именно +1 - не знаю, возможно где-то сломается, но у меня при разным размерах текста всё работало. Желательно делать Height у объекта с Text таким же как у Scroll View. Внешне будет не так красиво, потому что происходит перенос слов во время "печатания". Стандартная тень, конечно же, подходит.
Сообщение отредактировал Lertmind - Среда, 24 Августа 2016, 21:54
Дорогие друзья, нужна помощь! Ситуация такова: есть геймОбъект (враг) и у него есть дочерние объекты, у которых тоже есть дочерние объекты (кости, конечности, голова), при попадании снаряда (тоже геймОбъекта, не луча) в дочерний объект в материнском должны происходить вычисления и по достижении определённого результата в костях включается РиджитБоди и персонаж красиво падает на землю (умирает). Загвоздка в чём: я не знаю как проложить связь с дочерними объектами и подОбъектами. Я сделал спаунер и пробовал через GameObject.Find проложить эти связи и у меня получилось! Но тогда умрет только один персонаж, на котором я и писал этот скрипт (клонам из префаба хоть бы хны...), а при изъятии его со сцены все остальные выдают ошибку "Мол, объект не найден, бэ-бэ-бэ, мэ-мэ-мэ". На каждой кости висит скрипт с на триггер (чтоб регистрировать попадание в кость), если интересно. В нём и прописан GameObject.Find ищущий материнский объект, но это не работает для клонов. Подскажите что использовать вместо него? Желательно на charp. И ещё, маленькая просьба... Я не знаю, когда я снова попаду на сайт, так что, если не сложно, предложения отсылайте в личку. Не знаю, смогу ли я найти ваш ответ в ленте)))
Lertmind, я пробовал так и не знаю почему, но когда я пытаюсь сделать массив Rigidbody[] bones у меня вылазит ошибка. Я видел примеры подобного кода, но запустить их у меня не получается... [/code] public class fdfgdfg : MonoBehaviour { public Collider[] colss; public Rigidbody[] rigid;
Хм.. Вопрос такой. Есть бег есть ходьба Если нажать в начале кнопку бега потом ходьбы все нормально персонаж бежит. Если нажать кнопку бега во время нажатой кнопки ходьбы персонаж на бег не переходит. В чем косяг?
Код
//Move if (Input.GetKeyDown(KeyCode.LeftArrow)) { speed = -speedX; } if (Input.GetKeyUp(KeyCode.LeftArrow)) { speed = 0; } //run
if (Input.GetKeyDown(KeyCode.LeftShift)) { speedX = runSpeed; run = true; } if (Input.GetKeyUp(KeyCode.LeftShift)) { speedX = oldSpeedX; run = false; }