Вы do't изменить его на основе, где он ударил веслом. Чтобы изменить направление мяча, все, что вам нужно сделать, это перевернуть цифры в противоположном направлении. Таким образом, умножение значения x и y на жесткое тело на -1 и применение его к шару должно сделать именно это.
если шар сталкивается с веслом, умножьте скорость шара Rigidbody по всей оси на -1, для оси г или оси х, за исключением (в зависимости от того, как вы настроите вашу сцены. Это может эфир г или х оси, но оси уMUST умножить на -1 в другом, чтобы идти в другом направлении.
Вы можете иметь speedVariable, что увеличивает скорость мяча каждый раз, когда он попадет в весло.
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "ball")
{
Vector3 tempVect = new Vector3(collision.rigidbody.velocity.x * -1, collision.rigidbody.velocity.y * -1, collision.rigidbody.velocity.z);
collision.rigidbody.velocity = tempVect;
}
}
Чтобы определить, куда попал мяч, самый простой способ, о котором я знаю, это использовать крошечные коллайдеры.
Создать по-крайней мере 24 коллайдеров коробки. Назовите их detector1 к detector24 (detector1, detector2, detector3, detector4, detector5 .....)
МаркisTrigger
из 24 box colliders true так, чтобы они не сталкивались с мячом.
Создатьслой называется «detectorLayer» и убедитесь, что эти 24 коробки коллайдера находятся в слое «detectorLayer».
Создать другой слой под названием "ballLayer" и сделать уверен, чтослой шара является установить в "ballLayer".
Приложитьколлайдер к веслом называется. Изменить Ваше имя Игрового объекта вашего paddle на "Paddle". Создать новый слой называется "PaddleLayer" и убедитесь, что "Paddle" GameObject находится в слое под названием "PaddleLayer".
Позиция эти 24 коллайдеров из оставили в праве в порядке близко к веслу, но убедитесь, что они не прикасаясь веслом или коллайдер весла. Ниже приведенное изображение поможет вам понять, что я делаю.
Написание кода должен быть кусок кусок пирога.
bool firstColision = false;
Проверить Если мяч сталкивается с Paddle с OnCollisionEnter
. firstColision = true;
Сразупроверки какие из 24- коллайдеров мяча трогательных с функцией OnTriggerEnter
. Внутри функции OnTriggerEnter
, убедитесь, что firstColision
является верно перед тем проверки, какой из 24 box colliders
трогает мяч.
Первый коробчатый коллайдер под названием «детектор1» расположен на самой левой стороне, в то время как последний коллайдер коробки, называемый «детектором24», расположен с правой стороны пакера. Вы можете использовать оператор if if или оператор switch todetect, который вызывает коллайдер шарика. 24/2 = 12 так коробка коллайдер под названием «detector24» должен быть расположен в средней и следует считать средней весла.
(ДЕЙСТВИЕ) После обнаружения которых поле номера мяч попал из с OnTriggerEnter
, теперь вы можете делать все, что вы хотите. Например, заберите мяч слева или . Вы можете иметь постоянные значения, которые диктует как далеко движение мяч для каждого ящика коллайдераобнаружен. Это зависит от вас. Теперь вы делаете свои собственные правила.
НаборfirstColision
к false
, чтобы сбросить его.
ПРИМЕЧАНИЕ: Это не обязательно должно быть 24 полевых коллайдера. Это может быть , но чем больше у вас есть, тем лучше.
Если все работает, как и ожидалось, вы можете сделать заключительную часть, которая должна перейти к Edit ->Настройки проекта ->физики и убедитесь, что верно следующее:
A. detectorLayer не может столкнуться с detectorLayer.
B. PaddleLayer не может столкнуться с detectorLayer.
Это улучшит производительность мобильных устройств.
AddForce() взять вектор в качестве параметра, почему addForce() с параметром типа float? – attolee
oops, извините, у меня есть вектор3 в коде, он должен быть rb.addForce (dist, 0,0); –