Страница 1 из 1

Не правильная работа Vector2.Reflect, или же моя.

СообщениеДобавлено: 16 апр 2022, 13:09
Music_Box
Доброго времени суток. В Unity совсем недавно начал разрабатывать что-то интересное, нежели просто попробовать, но не суть.
Я хочу сделать так, чтобы мой объект отталкивался от стены, словно попрыгунчик. Начала искать решение и наткнулся на Vector2.Reflect. Вполне себе понятная вещь, но почему что она мне не поддается. После столкновения со стеной объект просто к ней прилипает. Можете выругать меня всеми словами, если хотите, но может быть я что-то упустил? Вот код:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Animations;

public class GameScript : MonoBehaviour
{
    public Rigidbody2D coon;
    public float jumpforce;
    public bool arrowCheck = false;
    public Animation arrow;
    public Animation circle;
    public RectTransform Side;
    public Transform CircleSide;
    public Vector2 LastVelocity;

    private void Update()
    {
        if (Input.GetMouseButtonDown(0) && arrowCheck==false)
        {
            arrowCheck = true;
            coon.AddForce(CircleSide.right * jumpforce);
            arrowCheck = true;
            arrow.Stop();
            circle.Stop();
            LastVelocity = coon.velocity;

        }
    }
    private void OnCollisionEnter2D(Collision2D coll)
    {
        Vector2 direction = Vector2.Reflect(LastVelocity, coll.contacts[0].normal);
        coon.AddForce(direction*jumpforce);
        Debug.Log("Yeeee Collision");
    }
}
 


И еще я замечаю в видео постоянное использование GetComponent<RigidBody2d>() например. Это обязательная команда? И для чего она?

Re: Не правильная работа Vector2.Reflect, или же моя.

СообщениеДобавлено: 16 апр 2022, 13:39
Alkos26Rus
тебе наверно лучше использовать coon.velocity = ; нежели coon.AddForce, так как это больше подойдет для такой цели, AddForce не изменит координально направление а лишь добавит силу, поэтому и получается что шарик либо замедляется либо останавливается.

Music_Box писал(а):И еще я замечаю в видео постоянное использование GetComponent<RigidBody2d>() например. Это обязательная команда? И для чего она?

Нет, ссылкой на RigidBody как у тебя лучше

Re: Не правильная работа Vector2.Reflect, или же моя.

СообщениеДобавлено: 17 апр 2022, 13:16
Music_Box
Alkos26Rus писал(а):тебе наверно лучше использовать coon.velocity = ; нежели coon.AddForce, так как это больше подойдет для такой цели, AddForce не изменит координально направление а лишь добавит силу, поэтому и получается что шарик либо замедляется либо останавливается.

Music_Box писал(а):И еще я замечаю в видео постоянное использование GetComponent<RigidBody2d>() например. Это обязательная команда? И для чего она?

Нет, ссылкой на RigidBody как у тебя лучше


Спасибо за то, что рассказали про последнее, но у меня даже с velocity ничего не отталкивается.
Синтаксис:
Используется csharp
 
void OnCollisionEnter2D(Collision2D coll)
    {
       
        var isNormal = coll.contacts[0];
        var direction = Vector2.Reflect(LastVelocity.normalized, isNormal.normal).normalized;
        coon.velocity = direction*Speed;
       
    }


Посмотрел еще пару видосов, код одинаковый у всех, работает у всех одинаково, но всё равно эта зараза не отталкивается.

Re: Не правильная работа Vector2.Reflect, или же моя.

СообщениеДобавлено: 17 апр 2022, 13:24
waruiyume
Попробуйте в FixedUpdate скорость запоминать.

Re: Не правильная работа Vector2.Reflect, или же моя.

СообщениеДобавлено: 17 апр 2022, 13:37
Music_Box
waruiyume писал(а):Попробуйте в FixedUpdate скорость запоминать.


Проблему решил. Сместил скорость из условия. Спасибо за намёк!