Воскресенье, 17 Ноября 2024, 11:34

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

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

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • KillerbotДата: Понедельник, 19 Декабря 2011, 19:58 | Сообщение # 1301
    участник
    Сейчас нет на сайте
    iMoonlightAndre, а мы в школе еще не учили языков программирования, хотя я еще в 8 классе. В каком классе изучают программирование?
    35363Дата: Понедельник, 19 Декабря 2011, 20:05 | Сообщение # 1302
    участник
    Сейчас нет на сайте
    Привет всем, нужна помощь по написанию и вызову функции в Unity3d.

    Вот собственно скрипт содержащий функцию:
    Code

    using UnityEngine;
    using System.Collections;

    public class FunctionTest : MonoBehaviour {  
       

    void TestFunction(){ }
                        
                        }

    Пустая функция(это в данный момент не важно). Вроде бы всё правильно. Вызывается всё это дело вот так:
    Code
    FunctionTest.TestFunction()

    Здесь вроде бы всё верно. То есть я пытаюсь вызвать функцию отдельным скриптом, но не получается, выдает ошибку:
    Code
    error CS0120: An object reference is required to access non-static member `FunctionTest.TestFunction()'

    Кто-нибудь может помочь? На JS вроде намного проще, но тут C#.


    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!
    sk0rpi0nДата: Понедельник, 19 Декабря 2011, 21:12 | Сообщение # 1303
    Tiberium
    Сейчас нет на сайте
    Посоны ваще JS-ята, я три месяца не работал с юнити и все забыл biggrin .
    Как сделать, чтобы когда игрок наступает на куб, то у него включается гравитация(useGravity)?
    Куб - Rigidbody, игрок - стандартная капсула, тэг Player.
    Что-то там типа
    Code
    function OnCollisionEnter( collision:Collision )
    {
    gameObject.rigidbody.UseGravity = true;
    }

    Но не особо у меня этот код работает, какие бы варианты я не пробовал. sad

    Quote
    В каком классе изучают программирование?

    Не раньше 9, хотя у нас его вообще не будет...




    Adventures of the Purple Ball - готов.
    Wanderer - готов.


    Сообщение отредактировал sk0rpi0n - Понедельник, 19 Декабря 2011, 21:15
    35363Дата: Понедельник, 19 Декабря 2011, 21:18 | Сообщение # 1304
    участник
    Сейчас нет на сайте
    sk0rpi0n,
    Edit --> Project Settings --> Physics
    Глянь там. Есть настройки физики и вроде бы гравитации.


    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!

    Сообщение отредактировал 35363 - Понедельник, 19 Декабря 2011, 21:18
    sk0rpi0nДата: Понедельник, 19 Декабря 2011, 21:19 | Сообщение # 1305
    Tiberium
    Сейчас нет на сайте
    Quote (35363)
    Глянь там. Есть настройки физики и вроде бы гравитации.

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




    Adventures of the Purple Ball - готов.
    Wanderer - готов.


    Сообщение отредактировал sk0rpi0n - Понедельник, 19 Декабря 2011, 21:20
    35363Дата: Понедельник, 19 Декабря 2011, 21:22 | Сообщение # 1306
    участник
    Сейчас нет на сайте
    sk0rpi0n, Эмм не понимаю в чем проблема в Rigidbody объекта в инспекторе убираешь галочку Use gravity и потом активируешь скриптом, или в Start твоего скрипта пишешь:
    Code
    gameObject.rigidbody.UseGravity = false;


    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!

    Сообщение отредактировал 35363 - Понедельник, 19 Декабря 2011, 21:22
    sk0rpi0nДата: Понедельник, 19 Декабря 2011, 21:26 | Сообщение # 1307
    Tiberium
    Сейчас нет на сайте
    Quote (35363)
    sk0rpi0n, Эмм не понимаю в чем проблема в Rigidbody объекта в инспекторе убираешь галочку Use gravity и потом активируешь скриптом, или в Start твоего скрипта пишешь

    Проблема в том, что я не помню, как сделать, чтобы гравитация включалась при коллизии игрока с кубом. Пишу вот так:
    Code
    function OnCollisionEnter( Player:Collision )
    {
    gameObject.rigidbody.UseGravity = true;
    }

    Гравитация включается из-за любого объекта.
    Вот так:
    Code
    function OnCollisionEnter( other:Collision )
    {
    gameObject.rigidbody.UseGravity = true;
    }

    Тоже самое...




    Adventures of the Purple Ball - готов.
    Wanderer - готов.
    35363Дата: Понедельник, 19 Декабря 2011, 21:37 | Сообщение # 1308
    участник
    Сейчас нет на сайте
    Вобщем примерно так:
    Code
    public var ObjectForCollison:GameObject;
    public var x:int;

    function OnCollisionEnter(ObjectForCollision) {
    x+=1;
    }

    При столкновении объекта к x прибавляется 1, это для демонстрации. То есть
    Code
    x+=1;
    меняешь на свой
    Code
    gameObject.rigidbody.UseGravity = true;


    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!

    Сообщение отредактировал 35363 - Понедельник, 19 Декабря 2011, 21:37
    sk0rpi0nДата: Понедельник, 19 Декабря 2011, 21:43 | Сообщение # 1309
    Tiberium
    Сейчас нет на сайте
    Quote (35363)
    Вобщем примерно так

    То же самое, при прикосновении любого объекта гравитация применяется... Хотя я выбрал Player в ObjectForCollision.




    Adventures of the Purple Ball - готов.
    Wanderer - готов.
    RipDevДата: Понедельник, 19 Декабря 2011, 21:49 | Сообщение # 1310
    гейм-дизайнер
    Сейчас нет на сайте
    35363, Нужно сначала найти компонент, сто раз уже обсуждалось и обсуждается. Нужно читать справку, не для дураков написана.

    Code

    GameObject foo=GameObject.Find("GOна котором висит скрипт").GetComponent("FunctionTest");
    foo.TestFunction();

    gameObject.GetComponent<FunctionTest>().TestFunction();
    //Думаю не надо пояснять, что gameObject это текущий го на котором висит скрипт.

    И не надо вызывать из шарпа джава или наоборот, слышал есть проблемы с этим.
    Quote (35363)
    Кто-нибудь может помочь? На JS вроде намного проще, но тут C#

    С чего это вдруг? Одинаково. dry

    А вообще для развития, введи в справке GameObject и посмотри методы.

    Добавлено (19.12.2011, 21:49)
    ---------------------------------------------
    sk0rpi0n,

    Code

    Player.rigidbody.UseGravity = true;  

    Нужно же включать гравитацию у плеера, а не куба или го на котором скрипт?
    gameObject это текущий гейобжект на котором висит скрипт.


    Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.
    35363Дата: Понедельник, 19 Декабря 2011, 21:50 | Сообщение # 1311
    участник
    Сейчас нет на сайте
    Балиин точно, извини, вот http://answers.unity3d.com/questio....on.html должно помочь.

    То есть по примеру получается :
    Code

    function OnCollisionEnter(collision:Collision)
    {
         if(collision.gameObject.tag == "Player")
         {
            gameObject.rigidbody.UseGravity = true;  
         }
    }


    по идее так. Сам я на C# только пишу, в JS не лезу...


    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!
    RipDevДата: Понедельник, 19 Декабря 2011, 21:51 | Сообщение # 1312
    гейм-дизайнер
    Сейчас нет на сайте
    biggrin уже разобрался happy

    Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.
    35363Дата: Понедельник, 19 Декабря 2011, 21:56 | Сообщение # 1313
    участник
    Сейчас нет на сайте
    RipDev, спасибо, +.

    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!

    Сообщение отредактировал 35363 - Понедельник, 19 Декабря 2011, 22:14
    RipDevДата: Понедельник, 19 Декабря 2011, 22:17 | Сообщение # 1314
    гейм-дизайнер
    Сейчас нет на сайте
    Quote (35363)
    RipDev, то есть? Если я захочу в какой-то момент использовать функцию из какого-либо скрипта мне в любом случае придётся искать сам компонент?Так?

    Угу, вот только есть 1 момент, который я не рассматривал. Это разница между:
    gameObject.GetComponent<FunctionTest>().TestFunction();
    Когда компонет берется из скрипта, который может даже не висеть на го.
    И когда скрипт висит на го и берется он с него.
    GameObject foo=GameObject.Find("GOна котором висит скрипт").GetComponent("FunctionTest");
    Думаю здесь если что либо менять, то отразиться только на конкретном го.
    а в случае выше, но все го на которых висит скрипт.


    Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.
    xPFaNДата: Понедельник, 19 Декабря 2011, 22:27 | Сообщение # 1315
    был не раз
    Сейчас нет на сайте
    RipDev, Спасибо, с меня +
    35363Дата: Понедельник, 19 Декабря 2011, 22:27 | Сообщение # 1316
    участник
    Сейчас нет на сайте
    RipDev, я именно это и хотел, мне не нужно чтобы скрипт висел на го, а просто вот взять из ассетов скрипт и выполнить нужную мне функцию:)

    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!
    sk0rpi0nДата: Вторник, 20 Декабря 2011, 14:42 | Сообщение # 1317
    Tiberium
    Сейчас нет на сайте
    Quote
    Нужно же включать гравитацию у плеера, а не куба или го на котором скрипт?
    gameObject это текущий гейобжект на котором висит скрипт.

    Нет, именно куба. biggrin
    Вот так, как я написал - кубы с друг другом касаются и у них гравитация включается!
    А мне нужно, чтобы только при прикосновении игрока...
    Короче пишу еще раз что мне нужно:
    Игрок идёт, становится на куб(коллизия типо), и у куба включается гравитация, которая с самого начала выключена в Rigidbody-настройках куба.




    Adventures of the Purple Ball - готов.
    Wanderer - готов.


    Сообщение отредактировал sk0rpi0n - Вторник, 20 Декабря 2011, 14:46
    EyeДата: Вторник, 20 Декабря 2011, 14:55 | Сообщение # 1318
    заслуженный участник
    Сейчас нет на сайте
    Создаешь сверху куба триггер и кидаешь этот код.
    Если название триггера Pesok - подключается ригидбоди (по началу его не должно быть) и добавляется масса.

    Code
    function OnTriggerEnter (other : Collider) {    
           
    if(other.gameObject.name == "Pesok"){
           
    other.gameObject.AddComponent(Rigidbody);
    rigidbody.mass = 10;

    }    

    }


    ICQ: 422190728,
    E-Mail: funnyalien@yandex.ru,
    Jabber: funnyalien@jabber.ru,
    Steam: funnyalienvalentine,
    Twitter: MrFunnyAlien,
    Skype: happyconsole,
    ВКонтакте: vk.com/twinemen,
    Мобильный: +79199212414.


    Сообщение отредактировал Eye - Вторник, 20 Декабря 2011, 14:56
    PovstalezДата: Вторник, 20 Декабря 2011, 17:49 | Сообщение # 1319
    постоянный участник
    Сейчас нет на сайте
    Quote (RipDev)
    gameObject.GetComponent<FunctionTest>().TestFunction(); Когда компонет берется из скрипта, который может даже не висеть на го.

    Вы понимаете что Вы несёте? Знаете что такое gameObject? Это объект, на котором висит сам скрипт. Т.е. Вам не нужно находить объект, если этот скрипт лежит с компонентом, который вам нужно.....
    35363Дата: Вторник, 20 Декабря 2011, 18:01 | Сообщение # 1320
    участник
    Сейчас нет на сайте
    Я вот кстати тоже не понимаю, оба предложенных варианта, предназначены для получения компонента прямо из объекта. А как мне использовать функцию скрипта, который не находится на сцене?(лежит в ассетах) или это невозможно?

    Если ничего не получается, а до этого получалось - необходимо вернутся в то состояние при котором все получалось!
    Поиск:

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