Ответы пользователя по тегу Unity
  • Как вызвать переменную из другого класса?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    у вас так и не понятно какую переменную из какого скрипта вы хотите вызвать.!?

    и второй кусок кода - не класс, а просто пару строчек

    но в общем то случае..если вам нужна глобальная переменная сделайте

    public static float HealthWall = 100;
    тогда сможете обращаться к ней GameController.HealthWall из любого скрипта

    если же хочется не статичными переменными..то или читайте про синглтон (может вам под архитектуру подойдет)
    или просто банально ищите через Find или FindObjectOfType - объект с нужным скриптом (если они у вас в сцене)

    пока вообще не понятно что куда вы хотите "дернуть" и зачем..отсюда вытекает что толком и не понятно - что вам подсказать)
    Ответ написан
  • Unity не хочет запекать освещение, что я делаю не так?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    что ж, по всему выходит что у вас модель без развертки как будто, без какой либо
    о чем вам собственно и пишет в лог юнити

    ну или баг в версии юнити тоже не исключен, но все же менее вероятен, чем кривая(пустая) модель

    предлагаю вам попробовать дефолтный куб поставить на сцену и запечь свет на него, если сработает - то чините модель)
    Ответ написан
    Комментировать
  • Как сделать рулетку в unity3d?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    новые у вас и с этим кодом создадуться, тут проблем нету.

    а удалить старые. есть у вас
    GameObject obj - ссылка на объект.
    сохраните в классе ссылку на него (сейчас это локальная переменная в методе)
    (в вашем случае это будет массив ссылок или список)
    List<GameObject> objRefs  = new List<GameObject>();
    
    /////
    
    for ()
    {
    //вот вы создали объект и запоминаем в список
    objRefs.Add(obj);
    }
    
    /////удалить все из списка пройтись по списку
    foreach(var obj in objRefs)
    {
    Destroy(obj );
    }
    objRefs.Clear(); // и почистили список


    чистите старые объекты..в начале вашего метода к примеру.
    еще перед удаление объекта - можете проверить его на null, чтоб не пробовать удалять старые, вдруг они у вас самоуничтожаться могут или еще какая-то логика.

    Ну и так к слову..инстанциация дорогая операция, подумкйте над тем что возможно стоит создать все префабы на сцене и просто включать/выключать (может еще перемещать и настраивать) готовые уже объекты на сцене.
    Ответ написан
    3 комментария
  • Trying to get a relatively sized RenderBuffer without an active camera - в Unity?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    что там за вакханалия - это еще вопрос конечно..может у вас у камеры для зеркала тоже тэг MainCamera стоит??

    а так у вас же вроде ошибка сама за себя говорит..
    Trying to get a relatively sized RenderBuffer without an active camera
    private void OnBecameInvisible()
        {
            MCamera.enabled = false;
        }

    как бы вы делаете камеру неактивной, и ругается что не выйдет взять рендер текстуру из выключенной камеры

    ну и так бонусом гляньте вот сюда
    https://msdn.microsoft.com/ru-ru/library/system.tu...
    вам чтоб не array возвращать поидее более чем сгодиться. и не будет этих некрасивых
    System.Convert.ToInt32((RecalculateRenderTexture(Move.herTransorm.position)[0])

    и вообще так к слову..зачем вы сделали массив из float если на деле все конвертируете в int??

    да и вы понимаете что три раза вызываете метод??
    float[] tempArray = RecalculateRenderTexture(Move.herTransorm.position);
    Camera.targetTexture= RenderTexture.GetTemporary(
                System.Convert.ToInt32(tempArray [0])),
                System.Convert.ToInt32(tempArray [0])), 
                System.Convert.ToInt32(tempArray [2])));


    Хотя бы так. просто для читаемости.
    Ответ написан
    5 комментариев
  • Dragon Bones - хороший выбор для начинающего разработчика игр на Unity?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Так то на форуме обсуждают все это и даже используют..
    https://forum.unity.com/threads/dragonbones-in-uni...
    Ответ написан
    Комментировать
  • Вывод информации о текущем здоровье в VR?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    в углу экрана - вообще не для VR. как вы в угол посмотрите?? переферическим зрением?? очень не удобно

    а так все верно вам попадалось, в 9 из 10 случаев это Canvas . А то что он залезает в текстуры, ну это вы как то или лвл дизайном или геимдизайном избегаете)
    или сделайте шейдер который будет поверх всего рисоваться всегда..(некоторые делают еще второй камерой. у камер разная глубина, и одно всегда рисует как бы поверх второй)

    но а вообще избежать в VR чтоб рука/интерфеис/контроллер не влезали в пол/стену/прочие предметы - универсального решения никто не придумал.
    Обычно просто дизаин уровня и перемещения делается так, чтоб минимизировать подобные случаи.
    Ну или местами просто нет свободы перемещения (по рельсам или стоит неподвижно, или телепортируется только в определенные заранее точки) - тогда опять же. просто заранее раставить так, чтоб не возникало таких ситуаций.)

    надеюсь хоть чем то полезна оказалась вся эта информация/тавтология)
    Ответ написан
  • Т transform.right не работает на спрайты созданные спавном, в чем причина?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    ох, здраствуйте
    давайте начнем разгребать)

    что понимается под "пушка ведет себя неестественно"?
    из приведенного "обрывка" кода не понятно в чем разница у вас между спавном и существующим в сцене спраитом.
    вообще не ясно как "пушка" выбирает цель, есть подозрение что вообще ни как.

    target в скрипте пушки у вас как подставляется?? он один раз и навсегда ссылкой на префаб??

    что вы пытаетесь сделать вот этой строкой ??
    transform.right = target.position - transform.position;

    вы же понимаете что (target.position - transform.position ) это вектор направления в сторону цели?
    вы так вращаете объект в сторону цели??

    про "пушка чтоб знала о всех врагах", это уже от архитектуры приложения. Как по мне при спавне вам бы запоминать созданный объект и складывать все эти объекты в список.

    Ну и последнее, разбивать бы вам это дело на кучу мелких вопросов, а то вы получается хотите целый урок обучающий в одном вопросе)
    Ответ написан
  • Стрельба в 2D из пушки на клик как сделать?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Ура. вы аккуратно все выложили и это можно потестить.
    смотрите у вас по сути в общем то все верно и отлично , кроме момента применения силы

    попробуйте применить

    myRigidbody.AddForce(transform.right * moveSpeed, ForceMode2D.Impulse);

    у вас сейчас кидает по сути вправо от текущего направления объекта потому что применяете AddRelativeForce .

    А вам надо глобальный вектор силы применить, посчитав его на основе текущего направления объекта.
    transform.right , transform.fwd и transform.up как раз и содержат этот глобальный вектор "куда направлен сейчас объект", по какой либо из осей)
    выберите нужную просто. для 2D вроде как раз красная ось transform.right
    Ответ написан
  • Как сравнить координаты?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    А теперь по делу

    так то у вас же есть информация о КОЛЛИЗИИ
    посмотрите документацию
    https://docs.unity3d.com/ScriptReference/Collision.html
    https://docs.unity3d.com/ScriptReference/ContactPo...

    физический движок предоставляет информацию о точках соприкосновения и о нормали. собственно можно узнать с какой стороны коснулось

    в вашем случае конечно проще узнать просто по Y ,кто выше , а кто ниже, но вообще знать такое - пригодится.
    Ответ написан
    1 комментарий
  • Unity3D как реализовать движение с помощью акселерометра?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    https://docs.unity3d.com/ScriptReference/Input-acc...
    для начала документация.
    потом еще вы в курсе что Input.acceleration меряется просто в пределе от -N до N.?
    и вот представим у вас в Input.acceleration меняется от -1 до 1. и как вы собираетесь дальше уйти??

    на основе Input.acceleration - вам надо выбрать вектор/направление куда двигаться.
    а само движение уже..что нибудь вроде

    transform.Translate(dir * speed); как в документации

    если вы осознали все, то поймете что у вас по сути вертится объект вокруг точки в пределе от -N до N.
    (тоесть вы никак не смещаете относительно текущей позиции, а высчитываете на основе акселерометра просто глобальную позицию..надеюсь внятно пояснил)))
    и Speed - банально увеличивает радиус только.
    Ответ написан
  • Как вызвать переменную или метод другого класса через строку?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    ответьте почему у вас множество классов, а не один класс Country, на основе которого сделали себе объект для России и Италии и так далее?
    у них у всех будет одинаковые переменные..
    public class Country 
    {
    public string Name;
    //и другие нужные поля под страну
    }
    
    ///////////
    //создаем себе объект класса
    Country  russia = new Country();
    russia.Name = "Russia";
    //////////
    
    //и вот собственно во все инфо и подобное отдаете объект класса Country 
    //в котором все содержиться
    void Info(Country currentCountry){
    
    Text.text = currentCountry.Name;
    
    }


    конечно еще есть struct вместо класса. и про наследование можно поговорить если будет что то уникальное для каких-то стран.
    но вам еще видимо рано такое..

    но в общем то, если сильно все упростить, вы просто не использовали ООП - создав на каждую страну свой собственный класс.
    Ответ написан
    3 комментария
  • ScreenCapture.CaptureScreenshot Или Application.CaptureScreenshot не могу разобраться?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Для начала, оба ваших метода делают одно и тоже, это и есть один и тот же метод, только
    Application.CaptureScreenshot - устаревший, его перенести из Application, и его лучше не использовать.

    "показывать полученный скриншот в отдельном окошке UI " - вот эту часть на компе вы сделали??
    если да, то ничего сложного сделать тоже самое на мобилках
    просто используйте
    https://docs.unity3d.com/ScriptReference/Applicati... (путь к папке для приложения, не надо будет получать права записи и точно работает на iOS и Андроид)

    ну а если вывести скриншок в игре - проблема..
    то что ж вам по сути
    - создавать в папке (сами создали, обозвали, запомнили) скриншоты
    - искать их в этой папке.
    - по известному пути подтягивать скриншот текстурой в материал окошка

    тут уж простите каждый из пунктов - гуглить и выяснять и реализовывать - это уже обучение и за вами остается.
    ( а уж всякие, закончилось место, удалять старые, сохранять в выбранное место (на анроиде только прокатит, ай ос же закрытая и не даст пихать просто куда попало) - это уже вообще отдельныу темы)
    Ответ написан
    Комментировать
  • Почему при столкновении персонажа с препятствием происходит отскок?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    https://docs.unity3d.com/ScriptReference/Rigidbody...

    расписано же как работает, и что в 2d более низкий лимит..у вас банально коллайдер персонажа влезает в коллайдер стены, и потом физикой выталкивается.

    как они говорят или делайте движение, на небольшие расстояния.
    или все же двигайте объект физический - прикладывая к нему силу, а не меняя положение.
    Ответ написан
  • Разработка мобильных приложений на C#?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Если вам именно приложения - то Xamarin отличный выбор.
    Если вдруг игры - и вообще что то с графикой, а не UI - то удобнее будет Unity.

    Материалов что по первому, что по второму - много. а вот русскоязычного - привыкайте что всегда будет не хватать. без англ на уровне чтения документации - почти бесполезное дело искать что-то посложнее чем "как сделать нажатие на кнопку"

    Про UI систему и там, и там есть. Подробнее особо не раскажешь, там уже конкретно смотреть надо как оно в Xamarin и Unity сделано.
    Ответ написан
    3 комментария
  • Как поднять объект на определенную высоту в Unity3d?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Вариантов масса, от навесить анимацию или запустить коронтину, до использовать твиннер или Lerp между двумя запомненными позициями)

    тут больше вопрос в том где это происходит (по методу или на апдеите обязательно как у вас). будет ли там физика. нужно ли когда поднялась до конца дверь - событие тригерить?
    Ответ написан
  • Какая программа нужна для создания 2D объекта?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    вы про векторную графику что ли? в юнити нет её поддержки.
    https://habrahabr.ru/company/microsoft/blog/326262/
    прочитайте к примеру эту статью.
    По сути вам просто рисовать разрешением побольше, чтоб не было заметно, экран все равно в пикселях , хоть вы там почти идеально круглую плоскость сделаете из полигончиков..
    Ответ написан
  • Можно ли в анимации Unity использовать localPosition?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Обычно в таком случае просто использую дополнительный родительский объект.
    над шариком вешается какой-нибудь AnimationRoot
    и анимация висит на этом вот AnimationRoot. под которым child есть который собственно и анимируется.
    и все что не "прикрепишь" ребенком в иерархии к этому child - будет корректно анимироваться в локальных координатах
    как то так. это если по простому и быстро)
    Ответ написан
    2 комментария
  • Где Ошибка в коде (ввод в Unity)?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Changename у вас вполне себе может быть без параметра.
    Как вы указали у себя на скрине красными стрелочками - это не из текстового поля текст возможность передать, а методу что-то подпихнуть из Editor (никак не связанно с вводом)

    вам в скрипте надо где то указать или получить ссылку на
    InputField

    using UnityEngine;
    using UnityEngine.UI;
    using System.Collections;
    using System;
    using System.Collections.Generic;
    
    public class Chose : MonoBehaviour {
    public InputField nameField;
      public int i=0;
      public string [] m = new string[100];
      public List <string> films = new List<string>(100);
      public void Changename()
      {
        string newName = nameField.text;
        films.Add(newName );
        i += 1;
        Debug.Log("Имя" + i +", название фильма - " + newName );
      }
      public void WriteAllOfThem()
      {
        foreach (string p in films)
        {
          Debug.Log (p);
        }
      }
    }
    class Film
    {
      public string Name { get; set; } 
    }


    только в инспекторе не забудьте указать ссылку на это текстовое поле.
    и так к слову по этой ссылке мы можете и подставлять текст в это поле и формат менять, да и вообще как без ссылочки на элемент вы хотели с ним работать?))
    Ответ написан
    4 комментария
  • Помощь с аудио в unity5?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    AudioSource audioSource;

    сделайте public и назначте в инспекторе ссылку..

    audioSource.PlayOneShot у вас по сути вызывает
    this.GetComponent<AudioSource>().PlayOneShot
    а по скринам видно, что на объекте, на котором висит walkscript - нет аудиосорса.
    ну или повесьте его на объект "mario right"..как собственно в ошибке и написанно.

    Update
    И для уточнения и понимания
    Вы поидее малость путаете AudioSource и AudioClip
    AudioClip - просто ссылка на сам аудио фаил.
    AudioSource - по сути "плеер", которому можно "скормить" аудиофаил и набор настроек для воспроизведения.
    и вот собственно плеера на mario right и нету.
    он есть на отдельном JumpSound - но вы неправильно ищите в walkscript Start() или забыли на него ссылку сделать.
    Ответ написан
  • Unity C# - Как, после получения урона персонажем, дать ему неуязвимость?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    Update()
    {
      timer -=Time.deltaTime;
      if(timer<=0)
      {
         godMode = false;
      }
      else
      {
           godMode  = true;
      }
    }


    в момент как захотели сделать неуязвимым, увеличили таймер на N. пока не станет равным нулю - будет флаг неуязвимости.
    Ну а как по флагу сделать чтоб урон не домажил, думаю вы уже разберетесь)
    еще вариант просто установить флаг и через Invoke - выключить его через 2 секунды.
    // где то в момент получения урона и включения неуязвимости
    godMode = true;
    Invoke("OffGodMode",2f);
     ////
    
    void OffGodMode()
    {
      godMode  = false;
    }
    Ответ написан
    Комментировать