Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168

Как правильно применить скрипт, написанный нейросетью?

27.02.2025, 15:13. Показов 1824. Ответов 11

Студворк — интернет-сервис помощи студентам
Приветствую всех. Каюсь, иногда использую GPT чат для написания простеньких скриптов. На удивление, справляется отлично и, т.к. я не программист, мне очень сильно это помогает реализовать некоторые моменты.
Собственно, задал я ему задачу написать скрипт для вращения объекта со скоростью (RPM), взятой из скрипта другого объекта.
Проще говоря, у автомобиля есть колесо в скрипте которого присутствует вывод частоты вращения и эту частоту вращения колеса надо передать на кардан.

Вот что я запросил:
Напиши скрипт для Unity для вращения объекта с частотой оборотов (rpm), с получением значения rpm из другого скрипта и выбором оси вращения


Вот что GPT мне предложил:

Вот пример скрипта на C#, который позволяет вращать объект в Unity с заданной частотой оборотов (RPM), получая значение RPM из другого скрипта. Также вы сможете выбрать, вокруг какой оси будет происходить вращение (X, Y или Z).

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using UnityEngine;
 
public class Rotator : MonoBehaviour
{
    // Ссылка на другой скрипт, который содержит значение RPM
    public RPMProvider rpmProvider;
    
    // Ось вращения (x, y, z)
    public Vector3 rotationAxis = Vector3.up;
 
    void Update()
    {
        if (rpmProvider != null)
        {
            // Получаем значение RPM из другого скрипта
            float rpm = rpmProvider.GetRPM();
 
            // Переводим RPM в радианы в секунду
            float radiansPerSecond = rpm * Mathf.Deg2Rad / 60;
 
            // Вращаем объект
            transform.Rotate(rotationAxis, radiansPerSecond * Time.deltaTime);
        }
    }
}
 
public class RPMProvider : MonoBehaviour
{
    // Пример значения RPM
    private float currentRPM = 100f;
 
    public float GetRPM()
    {
        // Возвращаем значение RPM (можно добавить логику для его изменения)
        return currentRPM;
    }
 
    // Например, метод для изменения RPM
    public void SetRPM(float newRPM)
    {
        currentRPM = newRPM;
    }
}

Как использовать:

1. Создайте пустой объект в Unity, который будет содержать RPMProvider. Присвойте ему компонент RPMProvider из приведенного выше кода.
2. Создайте другой объект (например, Куб), который вы хотите вращать, и добавьте к нему компонент Rotator.
3. В инспекторе для объекта с Rotator перетащите объект с RPMProvider в поле rpmProvider.
4. В инспекторе выберите ось вращения, изменив значение rotationAxis на Vector3.right, Vector3.up или Vector3.forward в зависимости от того, вокруг какой оси вы хотите вращать объект.

Теперь ваш объект будет вращаться вокруг заданной оси в соответствии с RPM, возвращаемым RPMProvider. Вы можете изменить значение RPM через метод SetRPM в RPMProvider.



Но когда я создаю скрипт с кодом от GPT, то появляется только один компонент Rotator, который я добавляю к кардану.

А к колесу нужно прикрепить компонент RPMProvider, который как бы прописан в скрипте, но выбрать и добавить его к колесу не получается (нету в списке компонентов). Поэтому не могу ничего вставить в поле Rpm Provider, т.к. отсутствует объект с этим компонентом.
Написанный GPT код надо разделить и создать два скрипта Rotator и RPMProvider или как правильно сделать чтобы все заработало?
Буду благодарен за разъяснения.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.02.2025, 15:13
Ответы с готовыми решениями:

Подскажите как правильно написать скрипт
Хочу написать скрипт, в игре будет молоток. При тапе на экран нужно реализовать силу удара. Как я себе это представляю. Я нажимаю на экран,...

Как правильно сделать скрипт?
Делаю игру на андроид хочу сделать магазин и столкнулся с проблемой что работает криво, когда покупаю 2-рой товар покупает и 1-вый. Как...

Как правильно вписать в скрипт новые обьекты?
Всем привет, делаю магазин в игре по гайду. Там показывается как сделать магазин с покупкой одного скина, то есть один уже есть, стоковый,...

11
1128 / 297 / 155
Регистрация: 30.07.2022
Сообщений: 1,766
Записей в блоге: 4
27.02.2025, 22:14
alexsecl, это потому что, вы оба класса в один скрипт записали.
разделите их и оба скрипта поместите на сцену.

Rotator
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using UnityEngine;
 
public class Rotator : MonoBehaviour
{
    // Ссылка на другой скрипт, который содержит значение RPM
    public RPMProvider rpmProvider;
    
    // Ось вращения (x, y, z)
    public Vector3 rotationAxis = Vector3.up;
 
    void Update()
    {
        if (rpmProvider != null)
        {
            // Получаем значение RPM из другого скрипта
            float rpm = rpmProvider.GetRPM();
 
            // Переводим RPM в радианы в секунду
            float radiansPerSecond = rpm * Mathf.Deg2Rad / 60;
 
            // Вращаем объект
            transform.Rotate(rotationAxis, radiansPerSecond * Time.deltaTime);
        }
    }
}
RPMProvider
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class RPMProvider : MonoBehaviour
{
    // Пример значения RPM
    private float currentRPM = 100f;
 
    public float GetRPM()
    {
        // Возвращаем значение RPM (можно добавить логику для его изменения)
        return currentRPM;
    }
 
    // Например, метод для изменения RPM
    public void SetRPM(float newRPM)
    {
        currentRPM = newRPM;
    }
}
1
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
27.02.2025, 22:16  [ТС]
ieretsumi, Я так в первую очередь попробовал сделать, выдавало ошибку... Попробую еще раз.

PS: Попробовал. Да, когда создаешь первый скрипт Rotator, выдает error. Не обращая на это внимание, создаем второй скрипт RPMProvider, после этого ошибка пропадает.

PSS: Но не работает передача вращения с объекта с RPMProvide на объект с скриптом Rotator...
0
1128 / 297 / 155
Регистрация: 30.07.2022
Сообщений: 1,766
Записей в блоге: 4
27.02.2025, 23:17
alexsecl, объект со скриптом RPMProvider поместите в поле скрипта Rotator .
вот в это поле public RPMProvider rpmProvider; - сделать это нужно в инспекторе.
1
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
27.02.2025, 23:21  [ТС]
Цитата Сообщение от ieretsumi Посмотреть сообщение
объект со скриптом RPMProvider поместите в поле скрипта Rotator .
вот в это поле public RPMProvider rpmProvider; - сделать это нужно в инспекторе.
Ну это само собой) Я хоть и не программист, но такие вещи способен делать)

Такое чувство, что скрипт RPMProvider не получает значение RPM от колеса, поэтому и не передает ничего.
Какую строчку нужно добавить в скрипт RPMProvider, чтобы в инспекторе выводило текущее значение RPM (для проверки)?
0
1128 / 297 / 155
Регистрация: 30.07.2022
Сообщений: 1,766
Записей в блоге: 4
27.02.2025, 23:25
если что ваш объект вращается вокруг оси Y, но делает это максимально медленно.
чтобы повысить скорость, в скрипте Rotator измените 22 строчку на
C#
1
transform.Rotate(rotationAxis, radiansPerSecond * Time.deltaTime * 200);
Добавлено через 2 минуты
Цитата Сообщение от alexsecl Посмотреть сообщение
Какую строчку нужно добавить в скрипт RPMProvider, чтобы в инспекторе выводило текущее значение RPM (для проверки)?
внесите изменение в 4 строку скрипта RPMProvider
C#
1
[SerializeField] private float currentRPM = 100f;
1
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
27.02.2025, 23:33  [ТС]
Цитата Сообщение от ieretsumi Посмотреть сообщение
внесите изменение в 4 строку скрипта RPMProvider
Ошибка " Assets\Scenes\Scripts\RPMProvider.cs(7,1 9): error CS0102: The type 'RPMProvider' already contains a definition for 'currentRPM' "

Цитата Сообщение от ieretsumi Посмотреть сообщение
если что ваш объект вращается вокруг оси Y, но делает это максимально медленно.
чтобы повысить скорость, в скрипте Rotator измените 22 строчку на
Теперь кардан постоянно медленно крутится с постоянной скоростью вне зависимости от скорости автомобиля))
0
1128 / 297 / 155
Регистрация: 30.07.2022
Сообщений: 1,766
Записей в блоге: 4
27.02.2025, 23:40
Цитата Сообщение от alexsecl Посмотреть сообщение
Ошибка " Assets\Scenes\Scripts\RPMProvider.cs(7,1 9): error CS0102: The type 'RPMProvider' already contains a definition for 'currentRPM' "
я имел ввиду 4 строку из разделенного кода, который я переписал вам на Форуме, вы у себя могли что то изменить.
и судя по ошибке вы задвоили строку private float currentRPM = 100f;

короче вот итоговый код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class RPMProvider : MonoBehaviour
{
    // Пример значения RPM
    [SerializeField] private float currentRPM = 100f; // теперь меня видно в инспекторе =)
 
    public float GetRPM()
    {
        // Возвращаем значение RPM (можно добавить логику для его изменения)
        return currentRPM;
    }
 
    // Например, метод для изменения RPM
    public void SetRPM(float newRPM)
    {
        currentRPM = newRPM;
    }
}
1
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
27.02.2025, 23:45  [ТС]
Цитата Сообщение от ieretsumi Посмотреть сообщение
я имел ввиду 4 строку из разделенного кода, который я переписал вам на Форуме, вы у себя могли что то изменить.
Да, точно)) У меня там первой строкой идет
C#
1
using UnityEngine;
Поэтому и сместились строки.

Я так и думал, значение RPM не извлекается. На 100 постоянно, поэтому кардан и крутится с постоянной скоростью от этого значения...

Хм.. Колесо - это вилколлайдер (модифицированный), и в его скрипте точно есть RPM, которое можно получить.
0
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
28.02.2025, 20:07  [ТС]
ieretsumi, в общем, спасибо за помощь, решил проблему немного по другому. Извлек обороты (RPM) вилколлайдера с помощью плеймейкера (get property). И эти значения вставил (set property) в простенький скрипт вращения кардана. Хотелось бы, конечно, чтобы было красиво и в одном скрипте все это управлялось без плеймейкера, но...
1
193 / 135 / 57
Регистрация: 28.05.2022
Сообщений: 894
01.03.2025, 06:53
Очень у вас все загружено и непонятно от куда растут ноги, у вас есть метод setrpm, но где он вызывается?
Если он взаимодействует никак с юнити логикой, то зачем его наследовать от монобеха?

Сами себе проблемы придумываете.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using UnityEngine;
 
public class Rotator : MonoBehaviour
{
    // Ссылка на другой скрипт, который содержит значение RPM
    public RPMProvider RpmProvider {get { return _rpmProvider; } };
    private RPMProvider _rpmProvider = new();
    
    // Ось вращения (x, y, z)
    public Vector3 rotationAxis = Vector3.up;
 
    void Update()
    {
        if (_rpmProvider != null)
        {
            // Получаем значение RPM из другого скрипта
            float rpm = _rpmProvider.GetRPM();
 
            // Переводим RPM в радианы в секунду
            float radiansPerSecond = rpm * Mathf.Deg2Rad / 60;
 
            // Вращаем объект
            transform.Rotate(rotationAxis, radiansPerSecond * Time.deltaTime);
        }
    }
}
 
[System.Serializable]
public class RPMProvider
{
    [SerializeField] private float currentRPM = 100f;
 
    public float GetRPM()
    {
        // Возвращаем значение RPM (можно добавить логику для его изменения)
        return currentRPM;
    }
 
    public void SetRPM(float newRPM)
    {
        currentRPM = newRPM;
    }
}
так же у вас должен быть какой то главный класс который задавал бы SetRPM()
По типу:
C#
1
2
3
4
5
6
7
8
9
10
class Car
Rotator rearLeft;
Rotator rearRight;
 
{
NextGear(Gear gear)
{
rearLeft.RpmProvider.SetRpm(gear.RPM);
// и тут на правое
}}
Все перечитал, так и не понял в чем проблема
0
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
01.03.2025, 13:35  [ТС]
Цитата Сообщение от Olol321 Посмотреть сообщение
Все перечитал, так и не понял в чем проблема
Проблема в том, что я не программист ни разу (я уже написал об этом в первом сообщении). То что для вас очевидно, для меня - темный лес.
Тем не менее вопрос решен другими методами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2025, 13:35
Помогаю со студенческими работами здесь

Как правильно писать скрипт для уровней
Назрел у меня вопрос как вообще правильно собирать уровень. У нас же есть разные сцены и на разных сценах разные уровни и вот сама суть...

Как встроить скрипт написанный на питоне в C#?
Всем доброго времени суток ! Прошу помочь разобраться в такой ситуации: Есть WinForms и есть скрипт написанный на Python . Как...

Объясните как работает скрипт написанный в хедотделе
Есть скрипт написанный в хедотделе: var message='Правая кнопка мыши отключена!'; function click() { if (event.button ==...

Как использовать скрипт написанный на JavaScript в Python
В общем нужно использовать вот это скрипт https://github.com/simonepri/is-sea#api Мне нужно что бы значение в коде равнялось (допустим...

Как применить скрипт ко всем классам
Здравствуйте, подскажите как можно применить скрипт ко всем классам на странице одновременно, не писать же мне под каждый отдельный id -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru