я так и не понял зачем вообще эти проверки почему нельзя просто применять гравитацию каждый кадр? character controller это сам разрулит тока походу у DonakiDijunk неправильно слои настроены или еще какая проблема, раз оно пролетает через коллайдеры
По сути да не нужны) Может для ускорения во время падения? Я сам код перемещения под if убрал, потому что не увидел смысла двигать на нулевой вектор. Да и из-за погрешности (или кривого кода под коробкой в движке) при перемещении на нулевой вектор isGrounded будет туда-сюда между true/false скакать) У меня с его изначальным кодом тоже, кстати, пролетал, но вроде пишет, что Move() он тоже пробовал)
Сообщение отредактировал Irbis - Понедельник, 11 Февраля 2019, 10:13
transform.Translate это перемещение (а не вращение), почему переменные называются Rotate? почему ты не учитываешь deltaTime в ограничении? почему обьект должен стопориться, если ты двигаешь его каждый кадр, пусть и ограничивая скорость?
PS а в репу гадить не надо людям которые бесплатно разбираются в говнокоде чтобы помочь
Ути-пути, какие мы злые здесь, но не в ИРЛ) Вопросы выше не лечится подобным образом, как ты предложил, да и не актуален, с обновой Юни, функция багует. Там костыль нужен был.
Вопрос следующего характера:
Код
if (Input.GetMouseButtonDown (0)){ _anim.SetTrigger("fire"); WeaponAudioSource.PlayOneShot(ShootSound); }else{ _anim.SetTrigger("idle"); }
При единичном нажатии, триггер срабатывает дважды. Как лечится?
// Update is called once per frame void Update() { InputManager(); PositionNew = new Vector2(x*Speed*Time.fixedDeltaTime, y*Speed*Time.fixedDeltaTime); }
void InputManager(){ x = Input.GetAxis("Horizontal"); y = Input.GetAxis("Vertical"); }
При движении вдоль стен, на которых стоит TilemapCollider персонажа трясет. Пробежался по сайтам, все фиксы что есть, пробовал, но тряска так и не прекратилась.
В настройках rigidbody 2d перепробовал много вариантов. И камеру двигал чрез LateUpdate();
А, не, уже нашел решение
Нужно 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
Твой рейкаст возвращает структуру типа 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); типа такого
Physics2D.Raycast (new Vector2(transform.position.x, transform.position.y), Vector2.right);
Попробовал вправо, твоим кодом, сделал отображение, но у меня почему-то луч ушел вверх на 45 градусов приблизительно. Хотя объект не повернут никуда. И если перемещать объект, то конец луча уходит в координаты 0,0.
Цитатаdrcrack ()
кстати можно просто transform.position, зачем эта магия
Магия была нужна, так как обычным методом, как у всех, не работало.
Похоже мне нужно ждать обновы юнити, ибо рейкаст багует в 2d.
Ничего он там не багует. По видимому в чем то багуешь ты.
Например "Хотя объект не повернут никуда". При чем тут поворот объекта, если ты не используешь его поворот в рейкасте. Используется только позиция объекта как начало луча и направляется он вправо.
Ты бы хоть скрин привел куда надо бить и куда бьет.
Второе, используется выражение "не повернут никуда", так как я утверждаю что никаких операций не совершал, кроме простого кода, что привел мне 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