Физика?

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

Физика?

Сообщение Hagrael 30 май 2012, 13:45

Здравствуйте! Я изучаю Unity не так давно, и не совсем понимаю, как в нем правильно работать с физикой, а особенно путают столкновения.
1) Я так понял, для того, чтобы тела могли сталкиваться с данным телом, ему обязательно нужен какой-то Collider. Но если мы хотим, чтобы объект сам подчинялся законам физики, то мы должны добавить ему компонент Rigidbody, это так?
2) У меня какой-то жуткий глюк получается. Есть кубик, который стоит на плоскости. К нему прикреплена камера. Кубик по нажатию кнопок вперед, назад, влево, вправо перемещается в соответственную сторону напрямую через компонент Transform. У кубика есть компонент Box Collider, у плоскости - Mesh Collider, фигура которого - плоскость. Так вот, когда я нажимаю вперед или назад или вправо или влево, фигура движется в соответствующем направлении, но она периодически принимает различные углы поворота. Углы незначительные, но т. к. к фигуре напрямую присоединена камера, тряска очень чувствуется. В чем причина такого поведения и как его устранить?

Заранее благодарен.
Последний раз редактировалось Hagrael 31 май 2012, 12:59, всего редактировалось 1 раз.
Hagrael
UNец
 
Сообщения: 19
Зарегистрирован: 29 май 2012, 09:50

Re: Физика?

Сообщение Hagrael 30 май 2012, 14:11

Вот проект, о котором я говорил во 2-м вопросе: http://rghost.ru/38372056
Hagrael
UNец
 
Сообщения: 19
Зарегистрирован: 29 май 2012, 09:50

Re: Физика?

Сообщение Black_hole 30 май 2012, 14:23

1) да
2) проект не смотрел. Попробуйте банально приподнять кубик
Black_hole
UNец
 
Сообщения: 24
Зарегистрирован: 18 апр 2011, 09:28

Re: Физика?

Сообщение DDDENISSS 30 май 2012, 15:16

Если на объекте нет RigidBody, то объект не должен сам изменять углы. Если есть у заморозь углы вращения у RigidBody.
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: Физика?

Сообщение Hagrael 30 май 2012, 15:34

1) ОК, понятно, спасибо :)
2) Даже если я ставлю кубик гораздо выше плоскости, то пока он в воздухе он не трясется, если я нажимаю на стрелки, а когда он падает, то при нажатии на стрелки его снова начинает мотать из стороны в сторону.
DDDENISSS, а если мне не нужно замораживать углы? В смысле если мне нужно, чтобы под действием некоторых сил кубик все-таки вращался?
Hagrael
UNец
 
Сообщения: 19
Зарегистрирован: 29 май 2012, 09:50

Re: Физика?

Сообщение Hagrael 31 май 2012, 13:00

2) Никто не сталкивался с такой проблемой? Тут наверняка дело в конфликте физ. движка и... и какого-то другого, который отвечает за метод .Translate(), но в чем именно проблема, я не понимаю.
Hagrael
UNец
 
Сообщения: 19
Зарегистрирован: 29 май 2012, 09:50

Re: Физика?

Сообщение AndreyMust19 31 май 2012, 13:42

В каких методах вы обрабатываете перемещение кубика? Попробойте погонять этот код из функций Update и FixedUpdate и обратно.
Еще повесьте флаг isKinematic на Rigidbody.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Физика?

Сообщение Hagrael 31 май 2012, 14:16

В каких методах вы обрабатываете перемещение кубика?

В методе Update().
Попробойте погонять этот код из функций Update и FixedUpdate и обратно.

По-моему, от этого не было вообще никакого эффекта: тряска как была, так и осталась.
Еще повесьте флаг isKinematic на Rigidbody.

А вот это помогло! Но ведь это отключает действие физических законов на тело, так? А мне нужно, чтобы тело могло совершать прыжок и потом под действием гравитации падать. А при отключении действия физ. законов на тело я не смогу этого добиться. Да и в любом случае, почему происходит тряска?
Вот код:
Синтаксис:
Используется javascript
// математические функции
private var Atan2 = Mathf.Atan2;
private var Sin = Mathf.Sin;
private var Cos = Mathf.Cos;
private var pi = Mathf.PI;

// здесь все о камере
var cam : GameObject;
var camDistance : float = 4.0f;
var camAngle : float = -1.1f;
private var camNewAngle : float;

// скорости перемещения и вращения
var speed : float = 5.0f;
var jumpSpeed : float = 10.0f;
var rotationSpeed : float = 1.0f;

function Start () : void {
        // устанавливаем камеру в начальное положение
        cam.transform.localPosition.y = Cos(camAngle)*camDistance;
        cam.transform.localPosition.z = Sin(camAngle)*camDistance;
        cam.transform.eulerAngles.x = 0;
        cam.transform.Rotate((camAngle+pi/2)*180/pi, 0, 0);
}

function Update () : void {
        // двигаем наш кубик
        transform.Translate(Input.GetAxis("Horizontal")*speed*Time.deltaTime, 0, 0);
        transform.Translate(0, 0, Input.GetAxis("Vertical")*speed*Time.deltaTime);
        transform.Rotate(0, Input.GetAxis("Mouse X")*rotationSpeed, 0);
       
        // поворачиваем кубик и камеру
        camNewAngle = camAngle+Input.GetAxis("Mouse Y")*rotationSpeed*Time.deltaTime;
        if (camNewAngle > -pi && camNewAngle < 0) {
                cam.transform.localPosition.y = Cos(camNewAngle)*camDistance;
                cam.transform.localPosition.z = Sin(camNewAngle)*camDistance;
                cam.transform.Rotate((camNewAngle-camAngle)*180/pi, 0, 0);
                camAngle = camNewAngle;
        }
}

function FixedUpdate () : void {
        if (Input.GetKeyDown("space")) {
                rigidbody.velocity.y = 10;
        }
}
Hagrael
UNец
 
Сообщения: 19
Зарегистрирован: 29 май 2012, 09:50

Re: Физика?

Сообщение TbIK-DbIM 31 май 2012, 16:43

я сам делаю только первые шаги в юнити(правда уже не один месяц ))))) вот ты хочешь чтобы куб подчинялся встроенной физике и при этом одновременно заставляешь его совершать манипуляции не имеющие к этой самой физике никакого отношения, вот постав себя на место движка... что ему делать? воздействовать на куб назначенной тобой физикой или двигать его транслейтами и ротатами(то есть тупо переносить в указанную точку и также им вертеть, какая уж тут физика)? движок то глупый может только то што может, вот и смешивает все в кашу малашу :) ну вот как то так приблизительно, спецы может получше объяснят
Последний раз редактировалось TbIK-DbIM 31 май 2012, 17:13, всего редактировалось 1 раз.
TbIK-DbIM
UNец
 
Сообщения: 26
Зарегистрирован: 25 апр 2012, 15:35

Re: Физика?

Сообщение AndreyMust19 31 май 2012, 16:56

Попробуй тогда двигать куб физикой (AddForce), а не меняя его координаты.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Физика?

Сообщение nolisten 31 май 2012, 17:20

Я конечно тоже новичок но...
Прыжки и падения тоже можно реализовать через трансформ. Тогда is Kinematic не помешает.
В стандартном ФПСконтроллере если не ошибаюсь так и сделано.

Тряска...
Бокс колайдер прямой и вполне может цепляться за все подряд загогулины при движении,если качается пола - помоему вообще неудобно для персонажа (в случае с машиной она касается земли колайдерами колёс а не плоскостью куба).
Меш колайдер мне совсем не понравился.
Применяя его без Convex я получал такое количество "дыр" (думаю куб вполне может за них цепляться из за того и вращаясь) что страшно.
Большой объект через них конечно не проходит, а маленький вполне, вероятно и колайдер куба может цепляться за них углами.
nolisten
UNец
 
Сообщения: 16
Зарегистрирован: 25 апр 2012, 12:57

Re: Физика?

Сообщение Hagrael 31 май 2012, 17:34

Всем спасибо за ответы!
Просто странно, что перемещение вызывает еще и это вращение. Непонятно, почему это происходит. Но да ладно. А если ставлю Convex = true, то тогда куб вообще совершает чрезвычайно странные движения. Но да ладно. Значит, будем перемещать куб физикой. Но с физикой тоже мне не все понятно: можно ли установить силу трения равной нулю?
Hagrael
UNец
 
Сообщения: 19
Зарегистрирован: 29 май 2012, 09:50

Re: Физика?

Сообщение nolisten 31 май 2012, 18:09

Convex = true на плоскости по кторой движетесь надеюсь?
Конверкс делает колайдер без выемок, выпуклым.
nolisten
UNец
 
Сообщения: 16
Зарегистрирован: 25 апр 2012, 12:57

Re: Физика?

Сообщение Hagrael 03 июн 2012, 07:17

Да, Convex = true у поверхности, по которой движется куб.
Hagrael
UNец
 
Сообщения: 19
Зарегистрирован: 29 май 2012, 09:50


Вернуться в Почемучка

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

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