|
Unity Мультиплатформенный инструмент для разработки игр |
15.08.2010, 01:35
|
#211
|
Бывалый
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений (для 995 пользователей)
|
Ответ: Фак по Юнити.
Сообщение от Den
|
В FPS примере используется такая вещь, посмотри там, может что найдешь.
|
(Offline)
|
|
15.08.2010, 10:07
|
#212
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.08.2010, 23:23
|
#213
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Фак по Юнити.
Всё время писал на JS.
Сейчас решил на C# попробывать.
Вот код на JS
GUI.Label(Rect(10,10,50,100), life); //где life это int переменная
а как это сделать на C#
я тока сделал вот что
GUI.Label(new Rect(10,10,50,100), life); //но он ругается на 2 переменую, типа она должна быть string
как быть???
|
(Offline)
|
|
15.08.2010, 23:40
|
#214
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Вот так:
GUI.Label(new Rect(10,10,50,100), life.ToString());
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.08.2010, 16:59
|
#215
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Фак по Юнити.
вот код меню:
using UnityEngine; using System.Collections; public class mainMenu : MonoBehaviour { public Rect windowRect1= new Rect (20, 20, 120, 50); public Rect windowRect2= new Rect (20, 20, 120, 50); private string b1; private string b2; private bool a=false; private bool menu=false; public float g=5.0f; void OnGUI() { if((menu && (Application.loadedLevel==1))||(Application.loadedLevel==0)){windowRect1 = GUI.Window (0, windowRect1, MyWindow1, "Main Menu"); if(a) windowRect2 = GUI.Window (0, windowRect2, MyWindow2, "Setting");} if(Application.loadedLevel==0) { b1="Play"; b2="Exit"; } if(Application.loadedLevel==1) { b1="Continue"; b2="Main Menu"; if(Input.GetAxis("Esc")!=0) { menu=true; Screen.lockCursor = false; } if(menu) Time.timeScale=0.1f; // СТРОЧКА!!!! else Time.timeScale=1.0f; } } void MyWindow1 (int windowID) { GUILayout.BeginHorizontal(); if(GUILayout.Button(b1)) { if(Application.loadedLevel==0) Application.LoadLevel(1); if(Application.loadedLevel==1) { Screen.lockCursor = true; menu=false; } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if(GUILayout.Button("Setting")) a=!a; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if(GUILayout.Button(b2)) // СТРОЧКА!!! { if(Application.loadedLevel==1) Application.LoadLevel(0); if(Application.loadedLevel==0) Application.Quit(); } GUILayout.EndHorizontal(); //GUI.DragWindow(); } void MyWindow2 (int windowID) { GUILayout.BeginHorizontal(); GUILayout.Label("Graphics"); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); g=GUILayout.HorizontalSlider(g,0,6); if(g>=0 && g<1) QualitySettings.currentLevel = QualityLevel.Fastest; if(g>=1 && g<2) QualitySettings.currentLevel = QualityLevel.Fast; if(g>=2 && g<3) QualitySettings.currentLevel = QualityLevel.Simple; if(g>=3 && g<4) QualitySettings.currentLevel = QualityLevel.Good; if(g>=4 && g<5) QualitySettings.currentLevel = QualityLevel.Beautiful; if(g>=5 && g<6) QualitySettings.currentLevel = QualityLevel.Fantastic; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if(GUILayout.Button("Ok")) a=!a; GUILayout.EndHorizontal(); //GUI.DragWindow(); } }
Почему если вместь if(menu) Time.timeScale=0.1f; поставить if(menu) Time.timeScale=0.0f;
то компилятор ругается
ArgumentException: Getting control 0's position in a group with only 0 controls when doing repaint
Aborting
UnityEngine.GUILayoutGroup.GetNext ()
UnityEngine.GUILayoutUtility.DoGetRect (UnityEngine.GUIContent content, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption[] options) [0x00000]
UnityEngine.GUILayoutUtility.GetRect (UnityEngine.GUIContent content, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption[] options) [0x00000]
UnityEngine.GUILayout.DoButton (UnityEngine.GUIContent content, UnityEngine.GUIStyle style, UnityEngine.GUILayoutOption[] options) [0x00000]
UnityEngine.GUILayout.Button (System.String text, UnityEngine.GUILayoutOption[] options) [0x00000]
mainMenu.MyWindow1 (Int32 windowID) (at Assets\mainMenu.cs:52)
UnityEngine.GUI+_Window.Do ()
UnityEngine.GUI.EndWindows (UnityEngine.IDList idlist)
UnityEngine.GUIUtility.EndGUI (Int32 doLayout, Int32 doWindows, UnityEngine.IDList idlist)
UnityEditor.EditorGUIUtility:RenderGameViewCameras (Rect, Rect, Boolean, Boolean)
UnityEditor.EditorGUIUtility:RenderGameViewCameras (Rect, Rect, Boolean, Boolean)
UnityEditor.GameView:OnGUI()
System.Reflection.MonoMethod:InternalInvoke(Object , Object[])
System.Reflection.MonoMethod:InternalInvoke(Object , Object[])
System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
System.Reflection.MethodBase:Invoke(Object, Object[])
UnityEditor.HostView:Invoke(String)
UnityEditor.MaximizedHostView:OnGUI()
|
но не сразу а после нажатия кнопки "Continue" ??
Тыкает меня на if(GUILayout.Button(b2))
Почему?
|
(Offline)
|
|
16.08.2010, 17:07
|
#216
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
GUI - это такая хитрая штука в юнити, что за кадр может отрисовываться до пяти раз. Следовательно и код отрисовки тоже столько же раз может повториться. Ошибка эта проявляется тогда, когда у GUI не получается отрисовать один из проходов помоему. Но тут проблема скорее всего не в этом, а в том, что ты читаешь Input в методе OnGUI, а он предназначен для метода Update.
PS: кстати зачем нужна строчка Screen.lockCursor = false;? Не достаточно ли просто его скрыть?
|
(Offline)
|
|
16.08.2010, 17:27
|
#217
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Фак по Юнити.
pax, посоветуй как сделать меню в игре на паузе? Чтоб время остановленное было.
|
(Offline)
|
|
16.08.2010, 18:25
|
#218
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Фак по Юнити.
Вот новый код:
using UnityEngine; using System.Collections; public class MainMenu: MonoBehaviour { public Rect windowRect1= new Rect (20, 20, 120, 50); public Rect windowRect2= new Rect (20, 20, 120, 50); private string b1; private string b2; public bool menu=false; public Camera cam; public Transform FPS; private bool a=false; public float g=5.0f; void OnGUI() { if((menu && (Application.loadedLevel==1))||(Application.loadedLevel==0)){windowRect1 = GUI.Window (0, windowRect1, MyWindow1, "Main Menu"); if(a) windowRect2 = GUI.Window (0, windowRect2, MyWindow2, "Setting");} if(menu) { Time.timeScale=0.1f; // <---- Вот здеся) } else Time.timeScale=1.0f; } void MyWindow1 (int windowID) { GUILayout.BeginHorizontal(); if(GUILayout.Button(b1)) { if(Application.loadedLevel==0) Application.LoadLevel(1); if(Application.loadedLevel==1) { Screen.lockCursor = true; menu=false; } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if(GUILayout.Button("Setting")) a=!a; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if(GUILayout.Button(b2)) { if(Application.loadedLevel==1) Application.LoadLevel(0); if(Application.loadedLevel==0) Application.Quit(); } GUILayout.EndHorizontal(); //GUI.DragWindow(); } void MyWindow2 (int windowID) { GUILayout.BeginHorizontal(); GUILayout.Label("Graphics"); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); g=GUILayout.HorizontalSlider(g,0,6); if(g>=0 && g<1) QualitySettings.currentLevel = QualityLevel.Fastest; if(g>=1 && g<2) QualitySettings.currentLevel = QualityLevel.Fast; if(g>=2 && g<3) QualitySettings.currentLevel = QualityLevel.Simple; if(g>=3 && g<4) QualitySettings.currentLevel = QualityLevel.Good; if(g>=4 && g<5) QualitySettings.currentLevel = QualityLevel.Beautiful; if(g>=5 && g<6) QualitySettings.currentLevel = QualityLevel.Fantastic; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if(GUILayout.Button("Ok")) a=!a; GUILayout.EndHorizontal(); //GUI.DragWindow(); } void Update() { if(Application.loadedLevel==0) { b1="Play"; b2="Exit"; Screen.lockCursor = false; } if(Application.loadedLevel==1) { cam.gameObject.GetComponent<MouseLook>().enabled=!menu; FPS.gameObject.GetComponent<MouseLook>().enabled=!menu; gameObject.GetComponent<Strelok>().enabled=!menu; b1="Continue"; b2="Main Menu"; if(Input.GetAxis("Esc")!=0) { menu=true; Screen.lockCursor = false; } } } }
вот новый код.
ошибок некаких не выдаёт.
Но как видно он ставит не на паузу (Time.timeScale=0.1f; ).
А мне надо на паузу (Time.timeScale=0.0f; )
но когда я так изменю строку , игра не снимается с паузы (ошибок никаких не выдаёт).
Помогите!
---------------
---------------
---------------
using UnityEngine; using System.Collections; public class Apteka : MonoBehaviour { public int prib=10; public Collider igrok; void OnCollisionEnter (Collision coll) { if(igrok == coll.collider) global.live+=prib; } }
это скрипт аптечки.
igrok - это FPS плэйер
global.live - это его жизни
Но почему скрипт срабатывает только если апчтечка упадёт игроку на голову?
Последний раз редактировалось den, 16.08.2010 в 23:10.
|
(Offline)
|
|
17.08.2010, 00:09
|
#219
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
Я бы попробовал так:
if(GUILayout.Button(b1)) //или b2 { Time.timeScale=1.0f; }
...
if(Input.GetButtonDown("Esc")) { menu=true; Screen.lockCursor = false; Time.timeScale=0.0f; }
А по поводу второго вот (ссылка) Тока не забудь поставить колайдеру аптечки - is trigger
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.08.2010, 01:01
|
#220
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Фак по Юнити.
я так тоже пробывал не помогает: главное курсор после нажатия кнопки Esc становится в центр, но не исчезает!
Похуду при timeScale=0 некоторые функции просто неработают.
Но я сделал Time.timeScale=0.001f; ,впринцепе не заметно что игра не на паузе, а просто замедлилась в 1000 раз
------------
А по поводу второго вот (ссылка) Тока не забудь поставить колайдеру аптечки - is trigger
|
а если у объекта стоит твйрдое тело?
При is trigger он просто проваливается...
|
(Offline)
|
|
17.08.2010, 11:16
|
#221
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Фак по Юнити.
А ты попробуй убрать все Screen.lockCursor = true;
Сообщение от Den
а если у объекта стоит твйрдое тело?
При is trigger он просто проваливается...
|
Тогда OnCollisionEnter должна быть у игрока, и при столкновении с чем-то он должен проверять, с чем столкнулся. И если это аптечка - то добавлять себе жизней и удалять аптечку. Просто, по моему, OnCollisionEnter вызывается у объектов, которые двигались, а не у тех, которые были неподвижны до столкновения.
|
(Offline)
|
|
17.08.2010, 18:08
|
#222
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Фак по Юнити.
bool n=false; GameObject[] vrags = GameObject.FindGameObjectsWithTag("vrag"); for(GameObject vr in vrags) { if(Vector3.Distance(vr.transform,transform)<=10) n=true; }
почему не работает?
на JS всё работает, решил на C# переписать нефига!
|
(Offline)
|
|
17.08.2010, 18:42
|
#223
|
Бывалый
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений (для 450 пользователей)
|
Ответ: Фак по Юнити.
foreach?
|
(Offline)
|
|
17.08.2010, 18:55
|
#224
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Фак по Юнити.
так чтоли?
bool n=false; GameObject[] vrags = GameObject.FindGameObjectsWithTag("vrag"); for(GameObject vr foreach vrags) { if(Vector3.Distance(vr.transform,transform)<=10) n=true; }
можно поконкретнее...
|
(Offline)
|
|
17.08.2010, 18:58
|
#225
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Фак по Юнити.
проффи....ыыы...
foreach([var] in [array]){
}
З.Ы. тема почищена
__________________
Последний раз редактировалось SBJoker, 17.08.2010 в 22:35.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:58.
|