Понедельник, 26 Октября 2020, 03:25

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Вопрос-[ответ] по Unity. (Задаём свои вопросы.)
Вопрос-[ответ] по Unity.
QWER56Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1
старожил
Сейчас нет на сайте
Вопрос-[Ответ] по Unity3d

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

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

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • drcrackДата: Понедельник, 11 Февраля 2019, 09:55 | Сообщение # 8701
    старожил
    Сейчас нет на сайте
    я так и не понял зачем вообще эти проверки
    почему нельзя просто применять гравитацию каждый кадр? character controller это сам разрулит
    тока походу у DonakiDijunk неправильно слои настроены или еще какая проблема, раз оно пролетает через коллайдеры
    IrbisДата: Понедельник, 11 Февраля 2019, 10:02 | Сообщение # 8702
    почетный гость
    Сейчас нет на сайте
    По сути да не нужны) Может для ускорения во время падения?
    Я сам код перемещения под if убрал, потому что не увидел смысла двигать на нулевой вектор. Да и из-за погрешности (или кривого кода под коробкой в движке) при перемещении на нулевой вектор isGrounded будет туда-сюда между true/false скакать)
    У меня с его изначальным кодом тоже, кстати, пролетал, но вроде пишет, что Move() он тоже пробовал)


    Сообщение отредактировал Irbis - Понедельник, 11 Февраля 2019, 10:13
    DonakiDijunkДата: Понедельник, 11 Февраля 2019, 11:15 | Сообщение # 8703
    был не раз
    Сейчас нет на сайте
    Irbis, спасибо, заработало теперь все.

    Все исправил. Вопрос - при зажатии лкм вращение стопорится, и мышка еле двигается, в чем может быть ошибка?


    Сообщение отредактировал DonakiDijunk - Понедельник, 11 Февраля 2019, 13:50
    ZeroCoolДата: Среда, 13 Февраля 2019, 15:00 | Сообщение # 8704
    почетный гость
    Сейчас нет на сайте
    Цитата drcrack ()
    в новых версиях они вроде в window → package manager переехали и ставятся куда-то отдельно, не в папку проекта

    неа, нету (:


    DonakiDijunkДата: Среда, 20 Февраля 2019, 20:04 | Сообщение # 8705
    был не раз
    Сейчас нет на сайте
    Код
    RotateAmountX += Input.GetAxis("Mouse X") * MouseSensitivity * Time.deltaTime;    
      RotateAmountY = Input.GetAxis("Mouse Y")* MouseSensitivity * Time.deltaTime;
      if (RotateAmountX > 0.07f){
       RotateAmountX= 0.07f;
      }
      if (RotateAmountX < -0.07f){
       RotateAmountX = -0.07f;
      }
            transform.Translate(RotateAmountX, RotateAmountY, 0.0f );


    Дебаг выводит ограничения, но на деле они не работают, объект продолжает движение и не стопорится; В чем ошибка?
    drcrackДата: Среда, 20 Февраля 2019, 21:36 | Сообщение # 8706
    старожил
    Сейчас нет на сайте
    transform.Translate это перемещение (а не вращение), почему переменные называются Rotate?
    почему ты не учитываешь deltaTime в ограничении?
    почему обьект должен стопориться, если ты двигаешь его каждый кадр, пусть и ограничивая скорость?
    DonakiDijunkДата: Четверг, 21 Февраля 2019, 14:45 | Сообщение # 8707
    был не раз
    Сейчас нет на сайте
    Цитата drcrack ()
    transform.Translate это перемещение (а не вращение), почему переменные называются Rotate?

    Я не знаю где ты увидел что вращение я имел ввиду... И ты что-то агрессивен.

    С вопросом выше разобрался. Баги юнати :D

    К вопросу официально туториала тутор

    Код
    float CameraRotate = Input.GetAxis("Mouse X") * MouseSensitivity * Time.deltaTime;
      Quaternion deltaRotation = Quaternion.Euler(0.0f, 0.0f, CameraRotate);
      HeroBody.MoveRotation(HeroBody.rotation * deltaRotation);


    Выдает ошибку
    Код
    Operator '*' cannot be applied to operands of type 'float' and 'Quaternion'

    В чем фейл?
    drcrackДата: Четверг, 21 Февраля 2019, 15:58 | Сообщение # 8708
    старожил
    Сейчас нет на сайте
    Цитата
    Я не знаю где ты увидел что вращение я имел ввиду...

    может потому что переменные называются RotateAmountX и RotateAmountY? :D

    Цитата DonakiDijunk ()
    Выдает ошибку
    Код
    Operator '*' cannot be applied to operands of type 'float' and 'Quaternion'

    В чем фейл?

    кватернион нельзя умножить на float
    в твоем случае можно умножить строчкой выше:
    Код

    Quaternion.Euler(0.0f, 0.0f, CameraRotate * HeroBody.rotation);

    (или еще выше)

    PS а в репу гадить не надо людям которые бесплатно разбираются в говнокоде чтобы помочь


    Сообщение отредактировал drcrack - Четверг, 21 Февраля 2019, 16:00
    DonakiDijunkДата: Четверг, 21 Февраля 2019, 20:25 | Сообщение # 8709
    был не раз
    Сейчас нет на сайте
    Цитата drcrack ()
    PS а в репу гадить не надо людям которые бесплатно разбираются в говнокоде чтобы помочь

    Ути-пути, какие мы злые здесь, но не в ИРЛ) Вопросы выше не лечится подобным образом, как ты предложил, да и не актуален, с обновой Юни, функция багует. Там костыль нужен был.

    Вопрос следующего характера:
    Код
    if (Input.GetMouseButtonDown (0)){
      _anim.SetTrigger("fire");
      WeaponAudioSource.PlayOneShot(ShootSound);    
      }else{
      _anim.SetTrigger("idle");
      }

    При единичном нажатии, триггер срабатывает дважды. Как лечится?
    drcrackДата: Четверг, 21 Февраля 2019, 20:43 | Сообщение # 8710
    старожил
    Сейчас нет на сайте
    Цитата
    но не в ИРЛ)

    ирл уже включает "ин", не надо добавлять "в"

    Цитата
    не актуален, с обновой Юни, функция багует. Там костыль нужен был.

    ну да, плохому танцору баги юнити мешают :D

    Цитата
    Как лечится?

    попробуй обновиться, это походу баг юнити
    DonakiDijunkДата: Воскресенье, 24 Февраля 2019, 03:22 | Сообщение # 8711
    был не раз
    Сейчас нет на сайте
    Unity сборка на linux, артефакты на изображении в игровом окне, в самом редакторе их нет. В чем может быть причина?

    AndrewNovakДата: Воскресенье, 24 Февраля 2019, 14:32 | Сообщение # 8712
    почетный гость
    Сейчас нет на сайте
    Цитата DonakiDijunk ()
    В чем может быть причина

    Непонятно какие артефакты. Уточни.
    Если темный фон то это настраивается в камере. В Редакторе включи кнопочку.


    COLD DEPTH Steam
    PUSS!
    COLD DEPTH
    DonakiDijunkДата: Воскресенье, 24 Февраля 2019, 23:30 | Сообщение # 8713
    был не раз
    Сейчас нет на сайте
    Цитата AndrewNovak ()
    Непонятно какие артефакты. Уточни.
    Если темный фон то это настраивается в камере. В Редакторе включи кнопочку

    Неее, пасеба) Было связано с тем, что размер тайлов был не кратен двум)

    Добавлено (25 Февраля 2019, 00:20)
    ---------------------------------------------
    Вопрос с кодом



    При движении вдоль стен, на которых стоит TilemapCollider персонажа трясет. Пробежался по сайтам, все фиксы что есть, пробовал, но тряска так и не прекратилась.

    В настройках rigidbody 2d перепробовал много вариантов. И камеру двигал чрез LateUpdate();

    А, не, уже нашел решение :D

    Нужно Fixed Timestep в разы уменьшить.

    Добавлено (25 Февраля 2019, 21:11)
    ---------------------------------------------
    Не работает 2D Raycast;

    hit естественно задаю.

    сам код в Update();
    Код
    hit = Physics2D.Raycast (new Vector2(this.transform.position.x, this.transform.position.y), Vector2.right, 15.0f, 0);
      if (hit)
      {
       Debug.DrawLine(new Vector2(this.transform.position.x, this.transform.position.y), hit.point, Color.green);
      }
      else
      {
       Debug.DrawRay(new Vector2(this.transform.position.x, this.transform.position.y), Vector2.right * 15.0f, Color.red);
      }


    Луч все время красный. Я что только не пробовал, и коллайдер менял, и слой. Уже вс. справку перечекал, даже решения из интернета не помогают. В чем проблема? (Объект пересекающий луч и испускающий на одной высоте z)

    В чем проблема?

    Добавлено (25 Февраля 2019, 21:52)
    ---------------------------------------------
    Сделал самое простое, просмотреть с чем пересекается вообще:

    Код
    hit = Physics2D.Raycast (new Vector2(this.transform.position.x, this.transform.position.y), Vector2.right, RayLenght, 0, -1, 1);
      Debug.Log("Hit with: " + hit.collider.name);


    Полезли ошибки:
    Код
    NullReferenceException: Object reference not set to an instance of an object


    Сообщение отредактировал DonakiDijunk - Понедельник, 25 Февраля 2019, 21:13
    drcrackДата: Вторник, 26 Февраля 2019, 00:22 | Сообщение # 8714
    старожил
    Сейчас нет на сайте
    4 параметр это ж LayerMask, почему 0
    0 значит "игнорировать все слои"
    поставь ~0 или вообще убери он вроде необязательный


    Сообщение отредактировал drcrack - Вторник, 26 Февраля 2019, 00:22
    DonakiDijunkДата: Вторник, 26 Февраля 2019, 00:31 | Сообщение # 8715
    был не раз
    Сейчас нет на сайте
    Цитата drcrack ()
    4 параметр это ж LayerMask, почему 0
    0 значит "игнорировать все слои"
    поставь ~0 или вообще убери он вроде необязательный


    Пробовал уже. Поэтому и отписался.
    drcrackДата: Вторник, 26 Февраля 2019, 01:13 | Сообщение # 8716
    старожил
    Сейчас нет на сайте
    ну в посте у тебя 0, хз где ты отписался )

    Код
    new Vector2(this.transform.position.x, this.transform.position.y)

    кстати можно просто transform.position, зачем эта магия
    pixeyeДата: Вторник, 26 Февраля 2019, 09:42 | Сообщение # 8717
    Red Winter Software
    Сейчас нет на сайте
    Цитата DonakiDijunk ()
    Полезли ошибки:


    Твой рейкаст возвращает структуру типа RaycastHit2D - он ее всегда возвращает независимо от того стукнулся об объект или нет.
    А вот collider - это уже собственно компонент тела об который рейкаст бьется.
    На следующей строчке ты пишешь Debug.Log("Hit with: " + hit.collider.name); так будто бы гарантированно знаешь что столкновение произойдет
    Код

      var hit = Physics2D.Raycast (new Vector2(transform.position.x, transform.position.y), Vector2.right, RayLenght, 0, -1, 1);
        if (hit.collider != null)
         Debug.Log("Hit with: " + hit.collider.name);


    Это на тему твоей ошибки.

    Теперь насчет того в чем проблема луча. Помимо прочего если твои коллайдеры - триггеры то помочь может это
    Queries Hit Triggers -> true в настройках физики2д



    Я бы первоначально не менял слои и не делал никаких доп настроей в рейкасте
    Код
    Physics2D.Raycast (new Vector2(transform.position.x, transform.position.y), Vector2.right); типа такого


    ACTORS - мой фреймворк на Unity
    Until We Die - игра над которой работаю



    Сообщение отредактировал pixeye - Вторник, 26 Февраля 2019, 09:57
    DonakiDijunkДата: Четверг, 28 Февраля 2019, 22:10 | Сообщение # 8718
    был не раз
    Сейчас нет на сайте
    pixeye, переустановил Unity, линукс сборки глючные.

    Код
    Physics2D.Raycast (new Vector2(transform.position.x, transform.position.y), Vector2.right);

    Попробовал вправо, твоим кодом, сделал отображение, но у меня почему-то луч ушел вверх на 45 градусов приблизительно. Хотя объект не повернут никуда. И если перемещать объект, то конец луча уходит в координаты 0,0.

    Цитата drcrack ()
    кстати можно просто transform.position, зачем эта магия

    Магия была нужна, так как обычным методом, как у всех, не работало.

    Похоже мне нужно ждать обновы юнити, ибо рейкаст багует в 2d.
    seamanДата: Четверг, 28 Февраля 2019, 23:16 | Сообщение # 8719
    старожил
    Сейчас нет на сайте
    Ничего он там не багует. По видимому в чем то багуешь ты.

    Например "Хотя объект не повернут никуда". При чем тут поворот объекта, если ты не используешь его поворот в рейкасте. Используется только позиция объекта как начало луча и направляется он вправо.

    Ты бы хоть скрин привел куда надо бить и куда бьет.
    DonakiDijunkДата: Четверг, 28 Февраля 2019, 23:44 | Сообщение # 8720
    был не раз
    Сейчас нет на сайте
    Цитата seaman ()
    По видимому в чем то багуешь ты.

    Первое, минус за оскорбление.

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

    Добавлено (01 Марта 2019, 00:15)
    ---------------------------------------------
    Код

    Код
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class RaycastTest : MonoBehaviour
    {
        RaycastHit2D hitToBite;
        // Start is called before the first frame update
        void Start()
        {
            
        }

        // Update is called once per frame
        void Update()
        {
            hitToBite = Physics2D.Raycast (new Vector2(transform.position.x, transform.position.y), Vector2.right);
      if (hitToBite != null){
       Debug.DrawLine(new Vector2(transform.position.x, transform.position.y), Vector2.right, Color.yellow);
      }
        }
    }


    Скрин



    Добавлено (01 Марта 2019, 00:22)
    ---------------------------------------------
    На официальном форуме юнити так же встречается тема с подобной ошибкой.

    Добавлено (01 Марта 2019, 00:33)
    ---------------------------------------------
    и еще одна тема, проблема с рейкастом так же на официальном форуме.

    Добавлено (01 Марта 2019, 03:40)
    ---------------------------------------------
    DrawRay тот же результат выдает.

    Сообщение отредактировал DonakiDijunk - Пятница, 01 Марта 2019, 00:32
    Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Вопрос-[ответ] по Unity. (Задаём свои вопросы.)
    Поиск:

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