Вопрос-[ответ] по Unity
| |
QWER56 | Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Вопрос-[Ответ] по Unity3d
База скриптов Unity3d Курс Уроков по Unity 3D от Alcatraz
ConsMark - поисковик по интернет магазинам.
Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54 |
|
| |
EchoIT | Дата: Суббота, 21 Марта 2015, 10:43 | Сообщение # 6881 |
старожил
Сейчас нет на сайте
| Интернет, исходник скинуть? Ничего не путаешь?
Даю подсказку: WorldToScreenPoint.
Долгожданный анонсик: State of War
|
|
| |
Интернет | Дата: Суббота, 21 Марта 2015, 11:21 | Сообщение # 6882 |
постоянный участник
Сейчас нет на сайте
| ну ладно предположим я в Draw пишу код: draw_sprite(player,image_index,x,y); draw_healthbar(x-30,y-30,x+30,y-25,(hp)*100,c_gray,c_red,c_lime,0,1,1); Полоска жизни привязана к спрайту повернутому на право, а когда нажимаешь движение на лево спрайт не меняется и продолжает двигаться как бы задом.Нужно ее привязать и к левому спрайту.Как?
|
|
| |
EchoIT | Дата: Суббота, 21 Марта 2015, 11:24 | Сообщение # 6883 |
старожил
Сейчас нет на сайте
| Интернет, а, у тебя 2D... Не прочитал предыдущие сообщения. В таком случае не знаю, с 2D в Unity3D не работал.
Долгожданный анонсик: State of War
|
|
| |
Интернет | Дата: Суббота, 21 Марта 2015, 11:29 | Сообщение # 6884 |
постоянный участник
Сейчас нет на сайте
| -
Сообщение отредактировал Интернет - Суббота, 21 Марта 2015, 11:30 |
|
| |
Pe4enka | Дата: Понедельник, 06 Апреля 2015, 12:57 | Сообщение # 6885 |
почетный гость
Сейчас нет на сайте
| Привет ! Появился такой вопрос, как через скрипт обратиться к скрипту(First Person Controller), который появился в Unity 5 ?Ибо когда объявляю переменную-его нет(
Бадабум!
|
|
| |
NEBR | Дата: Понедельник, 06 Апреля 2015, 13:58 | Сообщение # 6886 |
почти ветеран
Сейчас нет на сайте
| Pe4enka, если редактор не посвечивает название скрипта - перезагрузи проект (закрой редактор и открой его снова, либо перезагрузи в настройках)
King Size #Gamiron12
|
|
| |
Pe4enka | Дата: Понедельник, 06 Апреля 2015, 17:20 | Сообщение # 6887 |
почетный гость
Сейчас нет на сайте
| NEBR, Не помогло...
Бадабум!
|
|
| |
MANMANA | Дата: Понедельник, 06 Апреля 2015, 20:34 | Сообщение # 6888 |
почти ветеран
Сейчас нет на сайте
| Цитата Pe4enka ( ) Привет ! Появился такой вопрос, как через скрипт обратиться к скрипту(First Person Controller), который появился в Unity 5 ?Ибо когда объявляю переменную-его нет( а как раньше не помогает?
объект А со скриптом FPSInputController пометить, например, тегом Player (можно поиск объекта осуществлять любым другим способом);
скрипт на объекте В, отличном от объекта А:
Код var fpss : FPSInputController;
function Start () { fpss = GameObject.FindGameObjectWithTag("Player").GetComponent("FPSInputController"); }
function Update () { fpss.prop = "NonZero"; }
внутри скрипта FPSInputController (переменная введена для примера)
Код var prop : String = "Zero";
пример работы кода после старта приложения переменная prop меняется в скрипте FPS контроллера
Добавлено (06 апреля 2015, 20:34) --------------------------------------------- вместо поиска могешь создать публичную переменную для ГО и в инспекторе запИхнуть в нее объект, на котором висит FPS... Далее ГО.GetComponent("FPSInputController"); ...
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
Сообщение отредактировал MANMANA - Понедельник, 06 Апреля 2015, 20:40 |
|
| |
Pe4enka | Дата: Понедельник, 06 Апреля 2015, 20:52 | Сообщение # 6889 |
почетный гость
Сейчас нет на сайте
| MANMANA, На C# принцип тот-же ? Добавлено (06 апреля 2015, 20:52) --------------------------------------------- MANMANA, И еще, со стандартным то норм все, но я хочу через C# скрипт связаться с C# скриптом First Person Controller(новый который).
Бадабум!
|
|
| |
MANMANA | Дата: Понедельник, 06 Апреля 2015, 21:22 | Сообщение # 6890 |
почти ветеран
Сейчас нет на сайте
| У меня стандартный контроллер на JS (странно, да?)
возможно, ты про вот эти контроллеры и моторы на C# https://gist.github.com/zephjc/5641540
или
http://forum.unity3d.com/threads....c.64378
или
http://forum.unity3d.com/threads....p.93527
в любом случае, вот предыдущий пример на C# для скрипта FPSInputControllerC
C# Код using UnityEngine; using System.Collections;
public class scr : MonoBehaviour { public FPSInputControllerC fpss; // Use this for initialization void Start () { fpss = GameObject.FindWithTag("Player").GetComponent<FPSInputControllerC>();
} // Update is called once per frame void Update () { fpss.prop = "NonZero"; } }
вот мануал по доступу к компонентам объектов и внутренностям скриптов http://docs.unity3d.com/410....ts.html
справа есть переключалки для выбора языков
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
|
|
| |
Pe4enka | Дата: Среда, 08 Апреля 2015, 15:22 | Сообщение # 6891 |
почетный гость
Сейчас нет на сайте
| Такой вопрос, как удалить предмет из маасива ? Т.е, У меня из клетки массива удаляется лишь скрипт который в нее помещен, а мне нужно удалить именно клетку массива... Код using System.Collections; using System.Collections.Generic;
public class Inventory : MonoBehaviour { public Transform ShowCursor; public bool Show; public GUISkin Skin; public MouseLook Mouse; public List<Item> Items = new List<Item>(); public float MaxMass=50; public float CurMass=0; [HideInInspector] public Item CurItem; void Start(){ RebuildMass(); }
public void AddMass(float Mass){ CurMass+=Mass; } public void RebuildMass(){ CurMass=0; for (int i=0; i<Items.Count; i++) { if(Items[i]!=null){ if(Items[i].Count>0){ CurMass+=Items[i].Count*Items[i].Mass; } } } } void Update(){ if(Input.GetKeyDown(KeyCode.I)){ Show=!Show; } } void OnGUI(){ if(Show){ ShowCursor.gameObject.GetComponent<ShowCursor>().enabled=false; Cursor.visible=true; //Mouse.enabled=false; GUI.skin=Skin; GUI.Window(0, new Rect(0,0,Screen.width,Screen.height), InventoryBody,"Inventory"); }else{ ShowCursor.gameObject.GetComponent<ShowCursor>().enabled=true; Cursor.visible=false; //Mouse.enabled=true; } } public void AddItem(Item item){ if(item.Name=="ПМ"){ Items.Add(item); } } public void Use(Item item){ item.Count--; RemoveItem(item); } public void Remove(Item item){ Items.Remove(item.); Items.RemoveAt(10); } public void RemoveItem(Item item){ for(int i=0; i < Items.Count; i++){ if(Items[i]==item){ Items[i]=null; } } } void InventoryBody(int id){ if(GUI.Button(new Rect(700f,Screen.height-200f,150f,50f),"Выход")){ CurItem=null; Show=false; } /*if(CurItem){ GUI.Box(new Rect(700,80,400,300),CurItem.Description); if(GUI.Button(new Rect(700f,80,150f,50f),"Выкинуть")){ RemoveItem(CurItem); } }*/ // GUILayout.BeginArea(new Rect(0f,75f,100f,600f)); for(int i=0; i<Items.Count; i++){ if(Items[i]!=null){ if(GUILayout.Button(Items[i]._Texture,GUILayout.Width(100f), GUILayout.Height(100f))){ CurItem=Items[i]; } }else{ GUILayout.Box("", GUILayout.Width(100f), GUILayout.Height(100f)); } } GUILayout.EndArea(); // // GUILayout.BeginArea(new Rect(200f,75f,100f,600f)); for(int i=5; i<Items.Count; i++){ if(Items[i]!=null){ if(GUILayout.Button(Items[i]._Texture,GUILayout.Width(100f), GUILayout.Height(100f))){ CurItem=Items[i]; } }else{ GUILayout.Box("", GUILayout.Width(100f), GUILayout.Height(100f)); } } GUILayout.EndArea(); // } } Вот код.
Бадабум!
|
|
| |
NEBR | Дата: Среда, 08 Апреля 2015, 18:26 | Сообщение # 6892 |
почти ветеран
Сейчас нет на сайте
| Pe4enka, с листами легко, удаление объекта
Items.Remove(object)
а добавление Items.Add(object)
object = это определенный объект, который нужно удалить (он может быть в любой ячейке и любого типа)
King Size #Gamiron12
|
|
| |
Pe4enka | Дата: Четверг, 09 Апреля 2015, 12:02 | Сообщение # 6893 |
почетный гость
Сейчас нет на сайте
| NEBR, Это я знаю... У меня на месте объекта скрипт, когда он удаляется остается пустое место вместо него..
Бадабум!
|
|
| |
beril | Дата: Четверг, 09 Апреля 2015, 12:18 | Сообщение # 6894 |
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
| Цитата Pe4enka ( ) NEBR, Это я знаю... У меня на месте объекта скрипт, когда он удаляется остается пустое место вместо него.. Удаляй GameObject. Если из инвентаря нужно удалить клетку, удали из списка, а потом заново перерисуй клетки
Накодил? Убери за собой! Инвентарь в Unity(UI) Инвентарь в Unity(GUI)
|
|
| |
Pe4enka | Дата: Четверг, 09 Апреля 2015, 13:58 | Сообщение # 6895 |
почетный гость
Сейчас нет на сайте
| beril, Я дурак... Можешь показать пример кода ?
Бадабум!
|
|
| |
beril | Дата: Четверг, 09 Апреля 2015, 19:36 | Сообщение # 6896 |
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
| У тебя ведь там инвыентарь я так понял? и тебе надо удалить одну из ячеек инвентаря?
Накодил? Убери за собой! Инвентарь в Unity(UI) Инвентарь в Unity(GUI)
Сообщение отредактировал beril - Четверг, 09 Апреля 2015, 19:38 |
|
| |
NEBR | Дата: Четверг, 09 Апреля 2015, 19:49 | Сообщение # 6897 |
почти ветеран
Сейчас нет на сайте
| Цитата Pe4enka ( ) Это я знаю... У меня на месте объекта скрипт, когда он удаляется остается пустое место вместо него.. Такого не должно быть, пустого места )
King Size #Gamiron12
|
|
| |
Pe4enka | Дата: Пятница, 10 Апреля 2015, 12:35 | Сообщение # 6898 |
почетный гость
Сейчас нет на сайте
| NEBR, Не должно, но оно есть... Особенно заметно когда в инвент добавляется новая вещь, она идет не в эту пустую клетку, а в следующую. Т.е, первая клетка пустая, затем клетка не пустая...
Бадабум!
|
|
| |
MANMANA | Дата: Пятница, 10 Апреля 2015, 18:06 | Сообщение # 6899 |
почти ветеран
Сейчас нет на сайте
| Цитата Pe4enka ( ) NEBR, Не должно, но оно есть...
Вызываемая функция RemoveItem у вас не удаляет элемент массива, а лишь делает его значение равным null. Если вы хотите удалить элемент массива, то вот здесь Код public void RemoveItem(Item item){ for(int i=0; i < Items.Count; i++){ if(Items[i]==item){ Items[i]=null; } } } вместо Items[i]=null; вам стоит использовать Items.RemoveAt(i); (у вас же есть вызов этой функции листа в вашей функции "public void Remove(Item item)", правда ваша функция нигде не вызывается в листинге вашего файла)
Приравнивать Items[i]=null; - дохлый номер, поскольку для T (Объекта коллекции List<T>) для ссылочных типов допускается значение null, т.е. не является способом удаления элемента листа.
Цитата Pe4enka ( ) Особенно заметно когда в инвент добавляется новая вещь, она идет не в эту пустую клетку, а в следующую. Т.е, первая клетка пустая, затем клетка не пустая... List<T>.Add - метод, добавляющий объект в конец коллекции List<T>.Добавлено (10 апреля 2015, 18:06) --------------------------------------------- p.s. бойтесь одинаковых значений, передаваемых в и обрабатываемых вашей функцией RemoveItem, поскольку при таком вашем подходе
Код public void RemoveItem(Item item){ for(int i=0; i < Items.Count; i++){ if(Items[i]==item){ Items[i]=null; } } }
если в List'е содержится несколько элементов с одинаковыми значениями, например, "молоток элитный 80lvl rangers only", то обнулятся все эти молотки. и использование приведенного выше Items.RemoveAt(i); (для удаления, а не обнуления) еще и удалит элементы листа с одинаковыми значениями.
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
Сообщение отредактировал MANMANA - Пятница, 10 Апреля 2015, 17:59 |
|
| |
Pe4enka | Дата: Воскресенье, 12 Апреля 2015, 15:35 | Сообщение # 6900 |
почетный гость
Сейчас нет на сайте
| Цитата MANMANA ( ) p.s. бойтесь одинаковых значений, передаваемых в и обрабатываемых вашей функцией RemoveItem, поскольку при таком вашем подходе Это таки случилось.... Как исправить ?Добавлено (12 апреля 2015, 15:35) --------------------------------------------- Хэх.... Переделал инвентарь полностью.. Все бы хорошо, но Код GUI Error: You are pushing more GUIClips than you are popping. Make sure they are balanced) , эта ошибка все испортила, она появляется когда в инвентарь ложиться более 1-ой вещи в момент открытия инвентаря... Как решать я не знаю, поэтому пришел за помощью в очередной раз.) Код using UnityEngine; using System.Collections; using System.Collections.Generic;
public class Inventory : MonoBehaviour { public List<Item> Items = new List<Item>(); public List<Item> EqupiedItems = new List<Item>(); public Item _ItemDrop=null; public Item _ItemEquip=null; private bool Show; private Vector2 Scroll; public Transform GunPoint; public void Update(){ if(Input.GetKeyDown(KeyCode.I)){ Show=!Show; } if(_ItemDrop!=null){ Instantiate(_ItemDrop.PrefabDrop, GunPoint.transform.position, GunPoint.transform.rotation); _ItemDrop.PrefabDrop.GetComponent<Rigidbody>().AddForce(Vector3.forward*2); Items.Remove(_ItemDrop); _ItemDrop=null; } if(_ItemEquip!=null){ Items.Remove(item:_ItemEquip); EqupiedItems.Add(item:_ItemEquip); GameObject ItemObject = (GameObject)Instantiate(_ItemEquip.PrefabEquip,GunPoint.transform.position,GunPoint.rotation); ItemObject.transform.parent=GunPoint.transform; _ItemEquip=null; } } void OnGUI(){ if(Show){ GUI.Window(0, new Rect(0f,0f,Screen.width, Screen.height), InventoryItems, "InventoryItems"); } } void InventoryItems(int id) { GUILayout.BeginArea(new Rect(Screen.width-200, 10, 190, Screen.height-20),GUI.skin.box); Scroll = GUILayout.BeginScrollView(Scroll, GUILayout.ExpandHeight(true),GUILayout.ExpandWidth(true)); for (int i = 0; i < Items.Count; i++) { if(Items[i]!=null){ GUILayout.BeginVertical(GUI.skin.box); GUILayout.Label(Items[i].ItemName); // Название GUILayout.BeginHorizontal(); GUILayout.Label(Items[i].ItemTexture); // Иконка GUILayout.BeginVertical(); if(GUILayout.Button("Equip")){ _ItemEquip=Items[i]; } if(GUILayout.Button("Drop")){ _ItemDrop=Items[i]; } GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndVertical(); } GUILayout.EndScrollView(); } GUILayout.EndArea(); /*
*/ GUILayout.BeginArea(new Rect(Screen.width-Screen.width, 10, 190, Screen.height-20),GUI.skin.box); Scroll = GUILayout.BeginScrollView(Scroll, GUILayout.ExpandHeight(true),GUILayout.ExpandWidth(true)); for(int e=0; e < EqupiedItems.Count; e++){ if(EqupiedItems[e]!=null){ GUILayout.BeginVertical(GUI.skin.box); GUILayout.Label(EqupiedItems[e].ItemName); // Название GUILayout.BeginHorizontal(); GUILayout.Label(EqupiedItems[e].ItemTexture); // Иконка GUILayout.BeginVertical(); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndVertical(); } GUILayout.EndScrollView(); GUILayout.EndArea(); } public void Equip(object item){ PickUpItem PickUp = (PickUpItem) item; if(PickUp!=null){ Items.Add(PickUp.Prefab); Destroy(PickUp.gameObject); } } }
Бадабум!
|
|
| |
|