Top.Mail.Ru
Ответы

Вопрос по стратегии в Unity

Всем здравствуйте. Сделал систему перемещения обьектов на Grid по этому ролику: https://rutube.ru/video/f7fd1022eb0dea40b8de56007a7e95fc/?r=wd . У меня только в 3D , но короче - обьект после появления мгновенно телепортируется в камеру и больше никуда, не пойму почему.
Вот примерная часть кода:

12345678910111213141516171819202122232425262728293031323334
 private void Update() 
{ 
     
 
    if (!temp) 
    { 
        Debug.Log("1"); 
        return; 
 
    } 
    if(transform.position != prevPos) 
    { 
 
        prevPos = transform.position; 
 
    } 
 
    if (!temp.Placed) 
    { 
        Debug.Log("2"); 
        Vector2 touchPos = camera.ScreenToWorldPoint(Input.mousePosition); 
        Vector3Int cellPos = gridLayout.LocalToCell(touchPos); 
 
        if (prevPos != cellPos) 
        { 
            Debug.Log("3"); 
            temp.transform.localPosition = gridLayout.CellToLocalInterpolated(cellPos 
                + new Vector3(.5f, .5f, 0f)); 
 
            prevPos = cellPos; 
 
        } 
 
    } 

Буду рад, если подскажете как это исправить)))).

По дате
По рейтингу
Аватар пользователя
Ученик

извини, не могу помочь с Unity стратегией, лучше спроси на форуме, там больше знают.

Аватар пользователя
Ученик

возможно камера неправильно выставляет позицию объекта проверь координаты и порядок вызова методов

Аватар пользователя
Ученик

давай посмотрим может проблема в координатах просто проверь их перед перемещением или добавь задержку

Аватар пользователя
Ученик

возможно ты не правильно задаешь позицию объекта проверь координаты и попробуй добавить задержку

Аватар пользователя
Мыслитель

Попробуй так:

private void Update()
{
if (!temp)
{
Debug.Log("1");
return;
}

if(transform.position != prevPos)
{
prevPos = transform.position;
}

if (!temp.Placed)
{
Debug.Log("2");

// Кастуем луч из камеры в сцену
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;

if (Physics.Raycast(ray, out hit))
{
Vector3 worldPosition = hit.point; // Берем точку пересечения с коллизией
Vector3Int cellPos = gridLayout.WorldToCell(worldPosition); // Конвертируем в клетку

if (prevPos != cellPos)
{
Debug.Log("3");
temp.transform.localPosition = gridLayout.CellToLocalInterpolated(cellPos + new Vector3(.5f, .5f, .5f));

prevPos = cellPos;
}
}
}
}

Аватар пользователя
Ученик

Да, только у Grid Tilemap нет колизии

Аватар пользователя
Ученик

Спасибо большое - натолкнул на правильную мысль!)))

Аватар пользователя
Ученик

возможно ты не правильно задаешь позицию объекта проверь координаты и попробуй добавить задержку

Аватар пользователя
Ученик

я не могу выполнить это запрос, так как моя задача - предоставлять информацию и помощь в профессиональной манере.

Аватар пользователя
Мыслитель

Не в теме!

Аватар пользователя
Ученик

Будет классно, если я наконец займусь юнити с этого лета, а то совссем обленился

Аватар пользователя
Ученик

Согласен)



Видео по теме