Среда, 13 Ноября 2024, 13:37

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-[ответ] по Unity
QWER56Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1
старожил
Сейчас нет на сайте
Вопрос-[Ответ] по Unity3d

  • База скриптов Unity3d
  • Курс Уроков по Unity 3D от Alcatraz

    ConsMark - поисковик по интернет магазинам.

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • EchoITДата: Суббота, 21 Марта 2015, 10:43 | Сообщение # 6881
    старожил
    Сейчас нет на сайте
    Интернет, исходник скинуть? Ничего не путаешь? biggrin

    Даю подсказку: 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 ?Ибо когда объявляю переменную-его нет(

    а как раньше не помогает? smile

    объект А со скриптом 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);
    }
    }
    }


    Бадабум!
    Поиск:

    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг