Программирование мяча в арканоиде

Программирование на Юнити.

Программирование мяча в арканоиде

Сообщение nimferus 17 сен 2010, 22:22

Такая проблема: мяч не отбивается от ракеток.
Пример кода брал тут - http://www.flashgametuts.com/tutorials/ ... s3-part-2/
У меня получился такой код:
Синтаксис:
Используется csharp
void Update ()
{
        if (XSpeed >= MaxXSpeed)
        {
            XSpeed = MaxXSpeed;
        }
        if (ZSpeed >= MaxZSpeed)
        {
            ZSpeed = MaxZSpeed;
        }

        if (isStart)
        {
            rigidbody.AddForce(Sign * new Vector3(XSpeed, 1, ZSpeed));
        }
}
void OnCollisionEnter(Collision theCollision)
{
        if (theCollision.gameObject.tag == "Brick")
        {
            isStart = false;
            float ballPosition = gameObject.transform.position.x - theCollision.gameObject.transform.position.x;
            Debug.Log("ballPosition" + ballPosition);
            //hitPercent converts ballPosition into a percent
            //All the way to the left is -.5
            //All the way to the right is .5
            //The center is 0
            float hitPercent = (ballPosition / (theCollision.gameObject.transform.localScale.x - gameObject.transform.localScale.x)) - 0.5f;
            Debug.Log("Hit percent" + hitPercent);
            //Gets the hitPercent and makes it a larger number so the
            //ball actually bounces
            XSpeed = hitPercent * Coefficient;
            Debug.Log("XSpeed" + XSpeed);
            //Making the ball bounce back up
            Debug.Log("ZSpeed" + ZSpeed);
            ZSpeed *= -1;
            Debug.Log("ZSpeed" + ZSpeed);
            rigidbody.AddForce(new Vector3(XSpeed, 1, ZSpeed));
        }
    }
 

Вроде всё считается, но мяч не отскакивает((
В чём проблема? Или , возможно, у кого то есть более лучший алгоритм отскакивания мяча. Мне нужно , чтобы всё было максимально реалистично.
Заранее спасибо. Сильно прошу не пинать, [unity 3D] изучаю только неделю)))

http://rapidshare.com/files/419666090/a ... itypackage
Последний раз редактировалось nimferus 18 сен 2010, 11:32, всего редактировалось 2 раз(а).
nimferus
UNец
 
Сообщения: 19
Зарегистрирован: 07 сен 2010, 18:46

Re: Программирование мяча в арканоиде

Сообщение Paul Siberdt 17 сен 2010, 23:01

Вот не научился я читать скрипты ... а если бы сохранили тестовую сценку в паке (правый клик на сцене, селект депенденсис, экспорт пэкэдж), я б глянул и попробовал помочь :)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Программирование мяча в арканоиде

Сообщение nimferus 17 сен 2010, 23:08

nimferus
UNец
 
Сообщения: 19
Зарегистрирован: 07 сен 2010, 18:46

Re: Программирование мяча в арканоиде

Сообщение Paul Siberdt 18 сен 2010, 03:02

Сорри, отвлекся... уже засыпая, заскочил на форум, а тут "должок"... эх ...

Чтобы шарик отскакивал, надо назначить коллайдеру физический материал, именно в нем хранятся параметры преобразования импульса при столкновениях... Просто выставьте материал, например, Bouncy.

Кстати, очень необычная и интересная четырехсторонняя реализация. :-bd
Успехов с проектом. :ympeace:
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Программирование мяча в арканоиде

Сообщение nimferus 18 сен 2010, 08:57

Спасибо. Я пробовал Bouncy ещё с самого начала, но мяч отскакивает только прямо, и ему не придается сила из скрипта, поэтому после нескольких отталкиваний мяч застывает(
nimferus
UNец
 
Сообщения: 19
Зарегистрирован: 07 сен 2010, 18:46

Re: Программирование мяча в арканоиде

Сообщение Neodrop 18 сен 2010, 10:03

Настройте материал соответственно. Мяч так прыгать будет, что вам ещё его успокаивать придётся.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Программирование мяча в арканоиде

Сообщение nimferus 18 сен 2010, 10:33

Прочитал в доках про физический материал, сделал постоянное движение мячика, путём установления силы трения в 0, но вот как ему поменять угол в зависимости от угла падения и в какую часть ракетки попадает мячик, как в классическом арканоиде , я так и не понял. Да и проблема то в том, что если я стартовые значения задаю в редакторе , то мячик летит в нужном направлении, а когда эти значения задаются через скрипт, то ничего не меняется.
nimferus
UNец
 
Сообщения: 19
Зарегистрирован: 07 сен 2010, 18:46

Re: Программирование мяча в арканоиде

Сообщение Neodrop 18 сен 2010, 11:20

Используйте тег syntax. Нет никакого желания читать этот зелёный листинг. Чесно слово.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Программирование мяча в арканоиде

Сообщение nimferus 18 сен 2010, 11:34

Готово.
nimferus
UNец
 
Сообщения: 19
Зарегистрирован: 07 сен 2010, 18:46

Re: Программирование мяча в арканоиде

Сообщение Neodrop 18 сен 2010, 11:44

Жутко лохматый скрипт...
Но больше всего меня смутила вот эта строчка : float hitPercent = (ballPosition / (theCollision.gameObject.transform.localScale.x - gameObject.transform.localScale.x)) - 0.5f;
Что сие означает? Зачем вы вычитаете локальные размеры объектов? Мне кажется это совершенная бессмыслица. :-?
Тем более, что вы вычитаете их мяча биту... Скорее всего, если Scale у вас стоит в 1.1.1 на обоих объектах, то в результате этой махинации всегда будет -.5f
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Программирование мяча в арканоиде

Сообщение nimferus 18 сен 2010, 12:00

я же написал, что брал код из этого урока - http://www.flashgametuts.com/tutorials/ ... s3-part-2/
и просто перевёл его в код на шарпе, с учётом 3 мерного пространства. Я проверял путём вывода значения hitPercent , значение всегда разное, и XSpeed вычисляется нормальное, но угол мяча не меняется. Если у вас есть другое предложение, как сделать чтобы мяч отскакивал как в обычных арканоидах, я готов полностью пеменять код))
nimferus
UNец
 
Сообщения: 19
Зарегистрирован: 07 сен 2010, 18:46

Re: Программирование мяча в арканоиде

Сообщение Neodrop 18 сен 2010, 12:11

Объясните мне, каким образом, локальные размеры объектов могут влиять на силу или угол удара? Это параметры, которые никак не могут быть применены к такой задаче. Можно клумбы из пассажиров вычесть. Тоже, вероятно, разное число получиться, но куда его применить, я не понимаю.

Вот тут ещё одно недоразумение : rigidbody.AddForce(new Vector3(XSpeed, 1, ZSpeed));
Вы применяете силу так же и по оси Y. Мне кажется в вашей задаче играет роль плоскость, вероятно это излишне.

И ещё один момент - чтобы получить доступ к трансформу объекта, на котором висит ваш скрипт, вовсе не нужно обращаться к gameObject.
Достаточно написать просто transform


А писать код за вас, увы, я не буду. Я только указываю вам возможные ошибки.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Программирование мяча в арканоиде

Сообщение Neodrop 18 сен 2010, 12:17

Примерный алгоритм такой :

[V] Вместе с Collision вы получаете ContactPoints (если память мне не изменяет) - они содержат нормаль удара. В принципе, это почти всё, что вам нужно.
[V] Прикиньте относительную позицию по оси X биты. По ней усильте угол отражения
[V] Рассчитайте вектор отражения, исходя из предыдущих параметров.
[V] Толкните шарик.

З.Ы. Ваш алгоритм скормите Корзине.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Программирование мяча в арканоиде

Сообщение nimferus 18 сен 2010, 12:23

Я вас вроде и не просил писать за меня код, я просто интересовался, нет ли у вас идей, а не готового кода, ведь возможно вы уже с таким сталкивались.
Вот , спасибо, именно это мне и нужно было.
За замечания спасибо, учту.
nimferus
UNец
 
Сообщения: 19
Зарегистрирован: 07 сен 2010, 18:46

Re: Программирование мяча в арканоиде

Сообщение Paul Siberdt 18 сен 2010, 18:04

В классическом арканоиде угол отражения отклоняется в сторону тем больше, чем дальше от центра биты попадает шарик.
Получить набор параметров для рассчетов можно из предложенны советов Нео выше.
Если поначалу возникают трудности с нормалями - создайте профиль биты округлым.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11