Воскресенье, 17 Ноября 2024, 10:33

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • M1ghtMortalДата: Вторник, 20 Декабря 2011, 18:10 | Сообщение # 1321
    участник
    Сейчас нет на сайте
    35363, Можно, для этого нужно объявить метод как статический. Статический метод не принадлежит к определенному объекту, а принадлежит классу. Пример определения и вызова:
    Code

    class someClass {
      void static someMethod () {
       // Делаем некотрые действия
      }
    }

    Вызов
    Code

    // ..... Какой то код
    someClass.someMethod();
    // ..... Какой то код


    Java/C++/Unity(C#) Programmer.
    Мой блог MightMortal.RU
    PovstalezДата: Вторник, 20 Декабря 2011, 18:13 | Сообщение # 1322
    постоянный участник
    Сейчас нет на сайте
    Quote (35363)
    А как мне использовать функцию скрипта, который не находится на сцене?

    невозможно. Скрипт должен находится на объекте который находится на цене.
    35363Дата: Вторник, 20 Декабря 2011, 19:08 | Сообщение # 1323
    участник
    Сейчас нет на сайте
    M1ghtMortal, Povstalez, оба ловите по +, очень помогли smile

    Добавлено (20.12.2011, 19:08)
    ---------------------------------------------

    Quote (M1ghtMortal)
    class someClass {
    static public void someMethod () {
    // Делаем некотрые действия
    }
    }

    Вот так по идее... Ладно, вобщем теперь ещё один вопрос. Не получается использовать класс Transform в моей функции, почему так происходит и что нужно сделать для того чтобы он работал? Я так понял, что ошибка похожа на ту что ловил раньше, когда не ставил static перед функцией, но как тогда здесь поступить?


    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!
    PovstalezДата: Вторник, 20 Декабря 2011, 19:17 | Сообщение # 1324
    постоянный участник
    Сейчас нет на сайте
    Quote (35363)
    Вот так по идее... Ладно, вобщем теперь ещё один вопрос. Не получается использовать класс Transform в моей функции, почему так происходит и что нужно сделать для того чтобы он работал? Я так понял, что ошибка похожа на ту что ловил раньше, когда не ставил static перед функцией, но как тогда здесь поступить?

    Экстрасенсы в отпуске. кусок кода, ошибку в студию....
    35363Дата: Вторник, 20 Декабря 2011, 19:26 | Сообщение # 1325
    участник
    Сейчас нет на сайте
    Povstalez, я думал меня не сложно будет понять, есть самая обыкновенная функция на C# в юнити (она выше твоего поста). Там она пустая, я просто добавил transform.Translate/Rotate - не важно, как мне разрешить работать классу Transform в моей функции?

    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!
    M1ghtMortalДата: Вторник, 20 Декабря 2011, 19:54 | Сообщение # 1326
    участник
    Сейчас нет на сайте
    35363, Использовать transform.Translate/Rotate не возможно потому что они делают операции над объектом, который их вызвал, а так как метод статический, у него нету объекта. По идее можно сделать так:
    Code
    static public void someMethod() {
    GameObject someObj = /* ищем объект, или еще как-нибудь получаем объект над которым должны проводиться операции */ ;
    someObj.transform.Rotate(Vector3.right, Time.deltaTime);
    }

    Хотя с этим кодом не уверен, а проверить не могу.
    Если же тебе нужно проводить операции над объектом, которого нету на сцене, то здесь вроде нету вариантов, так как объекта просто не будет существовать в пространстве игры и к нему не будет доступа. Но я могу ошибаться.


    Java/C++/Unity(C#) Programmer.
    Мой блог MightMortal.RU


    Сообщение отредактировал M1ghtMortal - Вторник, 20 Декабря 2011, 19:54
    35363Дата: Вторник, 20 Декабря 2011, 20:12 | Сообщение # 1327
    участник
    Сейчас нет на сайте
    M1ghtMortal, а можно и по другому сделать) при вызове функции вводить string переменную с названием объекта который будем вращать...ладно, спасибо большое, отлично объяснил:) Я б запарился искать инфу на зарубежных сайтах)).

    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!
    RipDevДата: Вторник, 20 Декабря 2011, 20:23 | Сообщение # 1328
    гейм-дизайнер
    Сейчас нет на сайте
    Quote (Povstalez)
    Вы понимаете что Вы несёте? Знаете что такое gameObject?

    По моему это вы не понимаете и со зрением плоховато у вас dry
    Да там ошибка, точно не знаю т.к не проверял. Но думаю нельзя найти скрипт не висящем на го.

    Добавлено (20.12.2011, 20:23)
    ---------------------------------------------
    35363, Создай ГО scripts, и навешай на него скрипты которые тебе нужны.
    Еще есть наследование. И да система юнити ломает мозг wacko


    Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.


    Сообщение отредактировал RipDev - Вторник, 20 Декабря 2011, 20:25
    M1ghtMortalДата: Вторник, 20 Декабря 2011, 20:26 | Сообщение # 1329
    участник
    Сейчас нет на сайте
    Вариантов решения одной задачи много.
    Quote (35363)
    отлично объяснил:) Я б запарился искать инфу на зарубежных сайтах)).

    Объясняю я не очень хорошо. Да и не все уже помню, так как примерно с пол года не писал под Unity3D.


    Java/C++/Unity(C#) Programmer.
    Мой блог MightMortal.RU
    RipDevДата: Вторник, 20 Декабря 2011, 20:53 | Сообщение # 1330
    гейм-дизайнер
    Сейчас нет на сайте
    35363, вот рабочий вариант, сам проверил:
    Code

    Test t;// Test имя класса/скрипта
        t =gameObject.AddComponent<Test>();//добавляем компонент.

    В этом случае скрипт вешать на го не надо, его просто добавляем программно. happy

    Кстати еще вариант, простой класс, как же его не упомянули.

    Code

    class Test
    public class Test   
    {

      // Use this for initialization
      public int tt=100;

    }

    class code

    Test t=new Test();
    Debag.Log(t.tt);// будет 100.


    Вот думаю вариантов достаточно smile


    Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.


    Сообщение отредактировал RipDev - Вторник, 20 Декабря 2011, 21:11
    iMoonlightAndreДата: Среда, 21 Декабря 2011, 07:11 | Сообщение # 1331
    частый гость
    Сейчас нет на сайте
    Killerbot, я в пятом классе QBasic изучал... Просто потом в другую школу перешел там программирования не было, потом снова перешел в 10 классе, и они там уже несколько лет Visual Basic изучали.

    Мои проекты для iOS:
    andarkyДата: Среда, 21 Декабря 2011, 10:41 | Сообщение # 1332
    старожил
    Сейчас нет на сайте
    как скриптом создать событие, типа НАЖАТА КНОПКА <СТРЕЛКА ВЛЕВО>


    Моя страничка по дизайну
    GameDev//Design//3D
    Ютубчик
    M1ghtMortalДата: Среда, 21 Декабря 2011, 11:24 | Сообщение # 1333
    участник
    Сейчас нет на сайте
    andarky, Вот:
    Code

    using UnityEngine;
    using System.Collections;

    public class example : MonoBehaviour {
    void Update() {
    if (Input.GetKeyUp(KeyCode.LeftArrow))
    print("Key was pressed");

    }
    }

    Если нужно что бы событие вызывалось все время пока нажата кнопка, то используй Input.GetKeyDown.


    Java/C++/Unity(C#) Programmer.
    Мой блог MightMortal.RU
    andarkyДата: Среда, 21 Декабря 2011, 12:02 | Сообщение # 1334
    старожил
    Сейчас нет на сайте
    M1ghtMortal,
    НЕ ТО!
    нужно как-бы обмануть Unity,
    например у объекта написаны свои обработчики на нажатие клавиш,
    а я хочу продублировать клавиши визуальной клавиатурой, на которую можно тыкать мышей,
    и чтоб при нажатии на ее кнопки (GUI-элементы) объект думал что это нажимается на клавиатуре.

    Я подобные фокусы делал еще давно в Delphi посредством WinAPI.
    я мог делать даже передавая это другим окнам Windows по их идентификатору.

    Но в Unity никакого WinAPI нет,
    а SendMessage - выполняет совсем другую операцию

    Добавлено (21.12.2011, 12:02)
    ---------------------------------------------
    зачем мне это надо:




    Моя страничка по дизайну
    GameDev//Design//3D
    Ютубчик
    RipDevДата: Среда, 21 Декабря 2011, 17:35 | Сообщение # 1335
    гейм-дизайнер
    Сейчас нет на сайте
    andarky, тогда это не юнити а сшарп.
    Quote (andarky)
    я хочу продублировать клавиши визуальной клавиатурой, на которую можно тыкать мышей,
    и чтоб при нажатии на ее кнопки (GUI-элементы) объект думал что это нажимается на клавиатуре.

    А это легко, даже заморачиваьтся не надо.
    Делай обработку в отдельной функции, а потом вызываешь ее и при нажатии кнопки и про нажатии клавиши.

    Но походу вы сильно запутались, и сдается мне у вас не получится сделать по через ... wacko .

    что бы с эмулировать нажатие, придется юзать user32.dll.

    Добавлено (21.12.2011, 17:35)
    ---------------------------------------------

    Quote (andarky)
    либо я пролетаю сквозь цель, а если цель близка к полу то я могу запросто провалится сквозь него в бездну.

    Очень похоже на 1 мою проблему с перемещением по клику.
    посмотри что у тебе по y, т.е перемещай персонаж только по x,z а y не трогай.


    Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.
    xPFaNДата: Пятница, 23 Декабря 2011, 15:13 | Сообщение # 1336
    был не раз
    Сейчас нет на сайте
    А как сделать, чтобы переменной рандомно давалось значение. var x = 0; А потом на экран выводилось рандомное значение x. Только чтобы это значение было в определенных пределах?
    M1ghtMortalДата: Пятница, 23 Декабря 2011, 16:34 | Сообщение # 1337
    участник
    Сейчас нет на сайте
    xPFaN, Это делается методом
    Code
    Random.Range(minValue, maxValue);

    Этот метод вернет случайное число в пределах от minValue до maxValue. Это переменные типа float, возвращается он же. А если вызвать с переменными типа int, то вернется тоже целое число.
    Официальная справка.


    Java/C++/Unity(C#) Programmer.
    Мой блог MightMortal.RU
    xPFaNДата: Пятница, 23 Декабря 2011, 18:15 | Сообщение # 1338
    был не раз
    Сейчас нет на сайте
    M1ghtMortal, а поподробнее можно, на эту страницу я уже заходил(я насчет справки), но ничего не понял... А примера не найдется?
    seamanДата: Пятница, 23 Декабря 2011, 18:58 | Сообщение # 1339
    старожил
    Сейчас нет на сайте
    Пример уже выложен
    Quote
    xPFaN, Это делается методом
    Code
    Quote
    Random.Range(minValue, maxValue);


    Этот метод вернет случайное число в пределах от minValue до maxValue. Это переменные типа float, возвращается он же. А если вызвать с переменными типа int, то вернется тоже целое число.

    Что Вам еще нужно?


    Сообщение отредактировал seaman - Пятница, 23 Декабря 2011, 18:59
    M1ghtMortalДата: Пятница, 23 Декабря 2011, 19:21 | Сообщение # 1340
    участник
    Сейчас нет на сайте
    xPFaN, Пример очень простой:
    Code
    int someInt = Random.Range(3,30);

    После выполнения этого кода в переменной someInt будет значение от 3 до 30. В справке пример есть, он очень простой. Проще только то, что я написал.


    Java/C++/Unity(C#) Programmer.
    Мой блог MightMortal.RU
    Поиск:

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