07.01.2024, 02:52

Свайп объекта вверх

07.01.2024, 02:52. Показов 1235. Ответов 8

Студворк — интернет-сервис помощи студентам
Как сделать адекватный свайп объекта? Сейчас в реализации приходится нажимать на экран, чтобы сделать следующем свайп этого же объекта, посмотреть тут наглядно. Своего рода смахивание купюры с пачки купюр

Код для объекта с красным оттенком:
Кликните здесь для просмотра всего текста

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class MoneySwipe : MonoBehaviour
{
    private bool isDragging = false;
    private Vector2 touchPosition;
    private Vector3 initialPosition;
    private Vector3 swipeVelocity;
    private float swipeSpeed = 0.3f;
    private float mouseSpeed = 120.0f;
    private float maxY = 5.0f;
    private float smoothTime = 0.1f;
    private bool isSwiping = false;
 
    void Start()
    {
        initialPosition = transform.position;
    }
 
    void Update()
    {
        // Logic for swipe on mobile devices
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            if (touch.phase == TouchPhase.Began)
            {
                RaycastHit hit;
                Ray ray = Camera.main.ScreenPointToRay(touch.position);
 
                if (Physics.Raycast(ray, out hit) && hit.collider.gameObject == gameObject)
                {
                    isDragging = true;
                    isSwiping = false;
                    touchPosition = touch.position;
                }
            }
            else if (touch.phase == TouchPhase.Moved && isDragging)
            {
                Vector2 deltaSwipe = touch.position - touchPosition;
                swipeVelocity = new Vector3(0, deltaSwipe.y, 0) * swipeSpeed * Time.deltaTime;
                touchPosition = touch.position;
                isSwiping = true;
            }
            else if (touch.phase == TouchPhase.Ended)
            {
                isDragging = false;
                CheckAndResetPosition();
            }
        }
        else // Logic for the mouse, but I couldn't =(
        {
            if (Input.GetMouseButtonDown(0))
            {
                RaycastHit hit;
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 
                if (Physics.Raycast(ray, out hit) && hit.collider.gameObject == gameObject)
                {
                    isDragging = true;
                    isSwiping = false;
                    touchPosition = Input.mousePosition;
                }
            }
            else if (Input.GetMouseButton(0) && isDragging)
            {
                Vector2 deltaSwipe = (Vector2)Input.mousePosition - touchPosition;
                swipeVelocity = new Vector3(0, deltaSwipe.y, 0) * mouseSpeed * Time.deltaTime;
                touchPosition = Input.mousePosition;
                isSwiping = true;
            }
            else if (Input.GetMouseButtonUp(0))
            {
                isDragging = false;
                CheckAndResetPosition();
            }
        }
 
        if (!isDragging && isSwiping)
        {
            transform.Translate(swipeVelocity, Space.World);
            swipeVelocity = Vector3.Lerp(swipeVelocity, Vector3.zero, smoothTime * Time.deltaTime);
            if (Mathf.Abs(swipeVelocity.y) < 0.01f)
            {
                isSwiping = false;
                CheckAndResetPosition();
            }
        }
    }
 
    void CheckAndResetPosition()
    {
        if (transform.position.y >= maxY + initialPosition.y) 
        {
            transform.position = initialPosition;
            isSwiping = false;
        }
    }
}

Координаты объекта:

Сам объект:
0
07.01.2024, 02:52
Ответы с готовыми решениями:

Как сделать движение объекта вверх вдоль стен
Допустим объекту надо прыгать от одной стены к другой, какие вообще способы есть? Если бы я делал я бы просто задал постянное изменение по...

Как в Unity сделать бесконечное движение объекта вверх?
Как в Unity сделать бесконечное движение обЪекта вверх? с#

Как в Unity сделать виртуальный отрезок из 100 пунктов и задать перемещение объекта вверх-вниз по отрезку?
А затем сделать так, чтобы объект остановился на вычисленной переменной?

8
1149
07.01.2024, 09:35
Цитата Сообщение от Antsently Посмотреть сообщение
адекватный свайп
опишите, что вы имеете ввиду под "адекватный свайп". мы ведь не умеем мысли читать.

Цитата Сообщение от Antsently Посмотреть сообщение
Сейчас в реализации приходится нажимать на экран, чтобы сделать следующем свайп
то есть вы сначала выделяете объект - первым касанием экрана, вторым можете двигать его?
А как надо?

по видео
Вы хотите, что бы объект свайпался вне зависимости от того попали вы по нему пальцем или нет?
то есть вы провели пальцем в любом месте экрана и объект должен свайпаться?
0
Antsently  [ТС]
0
07.01.2024, 16:02
Цитата Сообщение от ieretsumi Посмотреть сообщение
опишите, что вы имеете ввиду под "адекватный свайп". мы ведь не умеем мысли читать.

то есть вы сначала выделяете объект - первым касанием экрана, вторым можете двигать его?
А как надо?

по видео
Вы хотите, что бы объект свайпался вне зависимости от того попали вы по нему пальцем или нет?
то есть вы провели пальцем в любом месте экрана и объект должен свайпаться?
Добрый, я хотел бы реализовать так(см. вложение)
Вложения
Тип файла: mp4 document_5247013540950196694.mp4 (1.76 Мб, 7 просмотров)
0
1149
07.01.2024, 18:11
Antsently, делайте на встроенных в юнити интерфейсах
IBeginDragHandler
IDragHandler
IEndDragHandler

IDropHandler
0
Antsently  [ТС]
0
07.01.2024, 18:47
Цитата Сообщение от ieretsumi Посмотреть сообщение
Antsently, делайте на встроенных в юнити интерфейсах
IBeginDragHandler
IDragHandler
IEndDragHandler
IDropHandler
Хорошо, я попробую реализовать и отпушусь что получится
0
Antsently  [ТС]
0
08.01.2024, 11:06
Цитата Сообщение от ieretsumi Посмотреть сообщение
Antsently, делайте на встроенных в юнити интерфейсах
IBeginDragHandler
IDragHandler
IEndDragHandler
IDropHandler
Доброго...
Я добавил ссылки на видео, чтобы наглядно понимать, что происходит сейчас.

У меня получилось в конечном этоге так.
На мобильном устройстве это выглядит так.
Какой должен быть итог.Вот apk, если нужно более детально понять, чего хочу я добиться.

Проблемы:
1. Не могу свайпать двумя руками, получается только последовательно и медленно, хотя по идее объект должен двигатьяс по скорости свайпа(перетаскивания).
2. Не нашел решения с Clone(Clone), если их будет несколько сотен, то мобилка ляжет скорей всего.

Код
Кликните здесь для просмотра всего текста
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections;
 
public class MoneyMovement : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IDropHandler
{
    private bool isDragging = false;
    private Vector3 initialPosition;
    private Vector3 originalScale;
    private Quaternion originalRotation;
    private float maxY = 4f;
    private float returnSpeed = 5.0f;
    private float shrinkDuration = 0.25f;
 
    private bool returnToInitial = false;
    private bool hasReachedMaxY = false;
    private bool hasStartedShrink = false;
 
    void Start()
    {
        initialPosition = transform.position;
        originalScale = transform.localScale;
        originalRotation = transform.rotation;
    }
 
    void Update()
    {
        if (returnToInitial)
        {
            ReturnToInitial();
        }
    }
 
    public void OnBeginDrag(PointerEventData eventData)
    {
        isDragging = true;
        returnToInitial = false;
    }
 
    public void OnDrag(PointerEventData eventData)
    {
        if (isDragging)
        {
            Vector3 cursorPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            float newY = Mathf.Clamp(cursorPos.y, initialPosition.y, maxY);
            transform.position = new Vector3(transform.position.x, newY, transform.position.z);
 
            // Проверяем, достиг ли объект maxY, если да, начинаем анимацию уменьшения
            if (!hasReachedMaxY && transform.position.y >= maxY)
            {
                hasReachedMaxY = true;
 
                if (!hasStartedShrink)
                {
                    StartCoroutine(ShrinkObject());
                    hasStartedShrink = true;
                }
            }
        }
    }
 
    public void OnEndDrag(PointerEventData eventData)
    {
        isDragging = false;
 
        if (!returnToInitial && !hasReachedMaxY && transform.position.y >= maxY)
        {
            hasReachedMaxY = true;
 
            if (!hasStartedShrink)
            {
                StartCoroutine(ShrinkObject());
                hasStartedShrink = true;
            }
        }
        else if (!returnToInitial && transform.position.y < maxY)
        {
            returnToInitial = true;
        }
    }
 
    public void OnDrop(PointerEventData eventData)
    {
        // Логика при броске объекта (если нужно что-то обрабатывать)
    }
 
    IEnumerator ShrinkObject()
    {
        Vector3 startPosition = transform.position;
        Vector3 endPosition = new Vector3(startPosition.x, startPosition.y + maxY, startPosition.z);
        float timer = 0.0f;
 
        while (timer < shrinkDuration)
        {
            timer += Time.deltaTime;
 
            float scaleRatio = Mathf.Lerp(1.0f, 0.5f, timer / shrinkDuration);
            transform.localScale = originalScale * scaleRatio;
            transform.position = Vector3.Lerp(startPosition, endPosition, timer / shrinkDuration);
 
            yield return null;
        }
 
        CreateNewMoney();
        Destroy(gameObject);
    }
 
    void ReturnToInitial()
    {
        transform.position = Vector3.MoveTowards(transform.position, initialPosition, returnSpeed * Time.deltaTime);
        transform.localScale = Vector3.Lerp(transform.localScale, originalScale, Time.deltaTime);
 
        if (Vector3.Distance(transform.position, initialPosition) < 0.01f)
        {
            returnToInitial = false;
        }
    }
 
    void CreateNewMoney()
    {
        GameObject newMoney = Instantiate(gameObject, initialPosition, originalRotation);
        newMoney.transform.localScale = originalScale;
        newMoney.GetComponent<MoneyMovement>().enabled = true;
    }
}


Можете ли вы, если не сложно показать адекватный вариант реализации, как на видео с игрой (итог видео)?
0
1149
08.01.2024, 12:36
Цитата Сообщение от Antsently Посмотреть сообщение
Не нашел решения с Clone(Clone)
замените клонирование на Pool objects


пологаю в вашем случае хватит трёх префабов денежки на сцене


Цитата Сообщение от Antsently Посмотреть сообщение
Не могу свайпать двумя руками
так вы же через позицию мыши делаете, сколько у вас курсоров на компе? - правильно один.
попробуйте через touch



Цитата Сообщение от Antsently Посмотреть сообщение
Можете ли вы
я не участвую в чужих проектах!!!
к тому же вы просите о медвежьей услуге! Учитесь самостоятельно писать код и находить решения.
0
Antsently  [ТС]
0
08.01.2024, 22:00
Цитата Сообщение от ieretsumi Посмотреть сообщение
замените клонирование на Pool objects
пологаю в вашем случае хватит трёх префабов денежки на сцене
Я вас понял, но у меня такая проблема получается

Создаются новые Money(Clone), а не используются созданные.
Скрипт свайпа:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
using UnityEngine.EventSystems;
using UnityEngine.Pool;
using UnityEngine;
using System.Collections.Generic;
using System.Collections;
 
public class MoneyMovement : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    
    private bool isDragging = false;
    private Vector3 initialPosition;
    private Vector3 originalScale;
    private Quaternion originalRotation;
    private float maxY = 4f;
    private float returnSpeed = 4.0f;
    private float shrinkDuration = 0.4f;
 
    private bool returnToInitial = false;
    private bool hasReachedMaxY = false;
    private bool hasStartedShrink = false;
    [SerializeField]
    public ObjectPool objectPool;
 
    void Start()
    {// Получаем ссылку на ObjectPool
        objectPool = FindObjectOfType<ObjectPool>();
 
        initialPosition = transform.position;
        originalScale = transform.localScale;
        originalRotation = transform.rotation;
 
    }
 
    void Update()
    {
        if (returnToInitial)
        {
            ReturnToInitial();
        }
    }
 
    public void OnBeginDrag(PointerEventData eventData)
    {
        isDragging = true;
        returnToInitial = false;
    }
 
    public void OnDrag(PointerEventData eventData)
    {
        if (isDragging)
        {
            Vector3 cursorPos = Camera.main.ScreenToWorldPoint(eventData.position);
            float newY = Mathf.Clamp(cursorPos.y, initialPosition.y, maxY);
            transform.position = new Vector3(transform.position.x, newY, transform.position.z);
 
            // Проверяем, достиг ли объект maxY, если да, начинаем анимацию уменьшения
            if (!hasReachedMaxY && transform.position.y >= maxY)
            {
                hasReachedMaxY = true;
 
                if (!hasStartedShrink)
                {
                    StartCoroutine(ShrinkObject());
                    hasStartedShrink = true;
                }
            }
        }
    }
 
    public void OnEndDrag(PointerEventData eventData)
    {
        isDragging = false;
 
        if (!returnToInitial && !hasReachedMaxY && transform.position.y >= maxY)
        {
            hasReachedMaxY = true;
 
            if (!hasStartedShrink)
            {
                StartCoroutine(ShrinkObject());
                hasStartedShrink = true;
            }
        }
        else if (!returnToInitial && transform.position.y < maxY)
        {
            returnToInitial = true;
        }
    }
 
    IEnumerator ShrinkObject()
    {
        Vector3 savedInitialPosition = initialPosition;
        Vector3 savedOriginalScale = originalScale;
        Quaternion savedOriginalRotation = originalRotation;
 
        Vector3 startPosition = transform.position;
        Vector3 endPosition = new Vector3(startPosition.x, startPosition.y + maxY, startPosition.z);
        float timer = 0.0f;
 
        while (timer < shrinkDuration)
        {
            timer += Time.deltaTime;
 
            float scaleRatio = Mathf.Lerp(1.0f, 0.5f, timer / shrinkDuration);
            transform.localScale = originalScale * scaleRatio;
            transform.position = Vector3.Lerp(startPosition, endPosition, timer / shrinkDuration);
            yield return null;
        }
 
        GameObject newMoney = objectPool.GetNextObject();
 
        if (newMoney != null)
        {
            // Устанавливаем новый объект Money на место текущего
            newMoney.transform.position = initialPosition;
            newMoney.transform.rotation = originalRotation;
            newMoney.transform.localScale = originalScale;
            newMoney.SetActive(true);
        }
 
        gameObject.SetActive(false);
    }
 
    void ReturnToInitial()
    {
        transform.position = Vector3.MoveTowards(transform.position, initialPosition, returnSpeed * Time.deltaTime);
        transform.localScale = Vector3.Lerp(transform.localScale, originalScale, Time.deltaTime);
 
        if (Vector3.Distance(transform.position, initialPosition) < 0.01f)
        {
            returnToInitial = false;
        }
    }
 
    public void CreateNewMoney()
    {
        // Сохраняем значения перед созданием нового объекта
        Vector3 savedInitialPosition = initialPosition;
        Vector3 savedOriginalScale = originalScale;
        Quaternion savedOriginalRotation = originalRotation;
 
        GameObject newMoney = objectPool.GetNextObject();
 
        if (newMoney != null)
        {
            // Используем сохраненные значения при установке параметров нового объекта
            newMoney.transform.position = savedInitialPosition;
            newMoney.transform.rotation = savedOriginalRotation;
            newMoney.transform.localScale = savedOriginalScale;
            newMoney.SetActive(true);
 
            // Делаем объект активным на некоторое время перед скрытием
            StartCoroutine(DeactivateMoney(newMoney));
 
            if (objectPool.HasAvailableObjects())
            {
                // Затем активируем текущий объект MoneyMovement
                gameObject.SetActive(true);
            }
        }
    }
 
    IEnumerator DeactivateMoney(GameObject moneyObject)
    {
        // Сначала выключаем объект, чтобы избежать визуальных артефактов
        moneyObject.SetActive(false);
        yield return new WaitForSeconds(0.1f);
 
        // Подготавливаем объект перед возвратом в пул
        Rigidbody2D rb = moneyObject.GetComponent<Rigidbody2D>();
        if (rb != null) rb.velocity = Vector2.zero;
 
        moneyObject.transform.position = initialPosition;
        moneyObject.transform.rotation = originalRotation;
        moneyObject.transform.localScale = originalScale;
 
        // Затем возвращаем объект в пул
        objectPool.ReturnObjectToPool(moneyObject);
    }
 
 
}
Скрипт пула:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ObjectPool : MonoBehaviour
{
    [SerializeField]
    public GameObject prefab; // Префаб Money
    public int poolSize = 3; // Размер пула
 
    private List<GameObject> pool;
    public  List<GameObject> availableObjects;
 
    void Start()
    {
        InitializePool();
    }
 
    void InitializePool()
    {
        pool = new List<GameObject>();
        availableObjects = new List<GameObject>();
 
        for (int i = 0; i < poolSize; i++)
        {
            GameObject obj = Instantiate(prefab, transform);
            obj.SetActive(false);
            pool.Add(obj);
            availableObjects.Add(obj);
        }
    }
 
    public GameObject GetNextObject()
    {
        if (availableObjects.Count > 0)
        {
            GameObject nextAvailable = availableObjects[0];
            availableObjects.RemoveAt(0);
            nextAvailable.SetActive(true);
            return nextAvailable;
        }
        else
        {
            Debug.LogWarning("В пуле нет доступных объектов. Возвращаем новый объект.");
            GameObject newObj = Instantiate(prefab, transform);
            newObj.SetActive(true);
            pool.Add(newObj);
            return newObj;
        }
    }
 
    public void ReturnObjectToPool(GameObject moneyObject)
    {
        moneyObject.SetActive(false);
 
        if (!availableObjects.Contains(moneyObject))
        {
            availableObjects.Insert(0, moneyObject);
        }
 
        // После возврата объекта в пул, обновляем список доступных объектов
        UpdateAvailableObjects();
 
        // Проверяем, есть ли достаточно доступных объектов перед созданием нового
        if (availableObjects.Count > 0)
        {
            StartCoroutine(DelayedActivation());
        }
    }
 
    private IEnumerator DelayedActivation()
    {
        yield return null; // Даем один кадр для завершения действий с объектом
        MoneyMovement moneyMovement = FindObjectOfType<MoneyMovement>();
        if (moneyMovement != null)
        {
            moneyMovement.CreateNewMoney();
        }
    }
 
    private void UpdateAvailableObjects()
    {
        availableObjects.Clear();
 
        foreach (GameObject obj in pool)
        {
            if (!obj.activeSelf)
            {
                availableObjects.Add(obj);
            }
        }
    }
 
    public bool HasAvailableObjects()
    {
        return availableObjects.Count > 0;
    }
 
 
}
0
1149
08.01.2024, 23:46
Antsently, по вашему видео заметно, что объекты по какой то причине не возвращаются в Pool!
то есть в классе MoneyMovement не вызывается метод ReturnObjectToPool из класса ObjectPool.
вам нужно понять - почему?

а значит настало время изучить отладку кода!
при помощи Debug.Log и инструментов VisualStudio вам надо найти тот момент в котором происходит "несрабатывание" метода ReturnObjectToPool

сделать это можно примерно так
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
08.01.2024, 23:46

Как реализовать свайп вправо-вверх или влево-вниз и т.д. в 3D проекте Unity (Двойной свайп в Unity)?
Здравствуйте. Я не могу решить одну большую проблему (3D проект на платформе Windows) Суть: Ниже предоставлен код для свайпа...

Как обновить TableView делая свайп вверх ?
Добрый день! Аналогично как у приложения вк например. делаем свайп вверх содержимого таблицы, отображается loader и надпись please...

Какой сигнал вызовет ListView при свайп вверх в конце списка
Ответ должен быть очевиден - но не нашел... Вряд ли ж надо обрабатывать в SwipeArea (как в примерах help) с созданием сигналов...

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

Кнопки и свайп
Всем привет!;D Кто поможет мне по одному вопросу? Тут я видела недавно про листание свайпом был вопрос. Так вот, свайп то я освоила. а вот...


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

Или воспользуйтесь поиском по форуму:
9
Опции темы

Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru