Физика падения предмета!

Общие вопросы о Unity3D

Физика падения предмета!

Сообщение berserk95 10 янв 2012, 18:27

Всем здрасьте! Имею два скрипта: один чтобы двигать игроком с определенной силой которая устанавливается - предметы. Второй - чтобы курсором поднимать эти самые предметы.
На скрипт поднятия предмета (DragRigidbody) влияет масса объекта. Т.е объект массой 1 кг легче поднять, нежели объект массой 100 кг. Другой скрипт позволяет игроку при соприкосновении с физ-объектом толкать его. НО: будь это объект массой 1 кг, или 100500 кг - одинаково его толкает. Каким образом можно это изменить?
1) Пробовал изменять параметры Drag, но в этом случае предмет начинает себя вести так же, как если бы оказался в невесомости.
2) Пробовал увеличивать гравитацию - предмет падает значительно быстрее, но все равно игрок не ощущает усилий при его толкании.
3) Пробовал подключать к объекту Constant Force - ничего путного не вышло.
4) Ну и наконец - пробовал задавать объекту материал, в котором серьезно увеличил трение. Как объект себя вел при этом, думаю и так понятно.

С нетерпением жду Ваших решений!
berserk95
UNITрон
 
Сообщения: 278
Зарегистрирован: 21 ноя 2011, 08:18
Откуда: Удомля, Тверская обл.
  • Сайт

Re: Физика падения предмета!

Сообщение IDoNotExist 10 янв 2012, 19:19

Два вопроса:
1) Чем толкаете, rigidbody.AddForce() ? Если да, то как рассчитываете силу толкания?
2) Ваш Player - это CharacterController или физический объект состоящий из коллайдеров?
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Физика падения предмета!

Сообщение berserk95 10 янв 2012, 21:49

1) Нет, толкание производится другим способом. Вот скрипт.
Синтаксис:
Используется javascript
var pushPower = 2.0;
function OnControllerColliderHit (hit : ControllerColliderHit) {
    var body : Rigidbody = hit.collider.attachedRigidbody;
    // no rigidbody
    if (body == null || body.isKinematic)
        return;
       
    // We dont want to push objects below us
    if (hit.moveDirection.y < -0.3)
        return;
   
    // Calculate push direction from move direction,
    // we only push objects to the sides never up and down
    var pushDir : Vector3 = Vector3 (hit.moveDirection.x, 0, hit.moveDirection.z);

    // If you know how fast your character is trying to move,
    // then you can also multiply the push velocity by that.
   
    // Apply the push
    body.velocity = pushDir * pushPower;
}


2) Игрок - CharacterController
berserk95
UNITрон
 
Сообщения: 278
Зарегистрирован: 21 ноя 2011, 08:18
Откуда: Удомля, Тверская обл.
  • Сайт

Re: Физика падения предмета!

Сообщение IDoNotExist 11 янв 2012, 04:41

Не очень хороший способ модифицировать velocity. Как я уже говорил лучше использовать rigidbody.AddForce().

Синтаксис:
Используется javascript
var pushPower = 2.0;
function OnControllerColliderHit (hit : ControllerColliderHit) {
    var body : Rigidbody = hit.collider.attachedRigidbody;
    // no rigidbody
    if (body == null || body.isKinematic)
        return;
       
    // We dont want to push objects below us
    if (hit.moveDirection.y < -0.3)
        return;
   
    // Calculate push direction from move direction,
    // we only push objects to the sides never up and down
    var pushDir : Vector3 = Vector3 (hit.moveDirection.x, 0, hit.moveDirection.z);

    // If you know how fast your character is trying to move,
    // then you can also multiply the push velocity by that.
   
    // Apply the push
    body.AddForce(pushDir * pushPower);
}
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Физика падения предмета!

Сообщение berserk95 11 янв 2012, 05:04

Большое спасибо! Теперь работает на ура! \m/
berserk95
UNITрон
 
Сообщения: 278
Зарегистрирован: 21 ноя 2011, 08:18
Откуда: Удомля, Тверская обл.
  • Сайт

Re: Физика падения предмета!

Сообщение berserk95 13 янв 2012, 06:29

Некоторые вопросы по доработке скрипта:
1) Когда поднимаешь предмет и идешь, то предмет не успевает за игроком и остается за спиной, лишь через некоторое время приходит обратно в положение перед игроком.
2) Если зажать клавишу подборки предмета и идти, то можно отойти и на 100 метров, а предмет будет за тобой все еще ползти, и догонять. Ощущение, что у игрока очень длинные руки :)
3) Как можно крутить предмет?
4) Как можно его бросать?

Вот все, что необходимо доработать!
berserk95
UNITрон
 
Сообщения: 278
Зарегистрирован: 21 ноя 2011, 08:18
Откуда: Удомля, Тверская обл.
  • Сайт

Re: Физика падения предмета!

Сообщение DanielDem 13 янв 2012, 06:37

Попробуй использовать фиксированое соединение (FixedJoint)
Да прибудет с Вами сила...
Аватара пользователя
DanielDem
UNITрон
 
Сообщения: 174
Зарегистрирован: 07 янв 2010, 13:27
Откуда: Россия
  • ICQ


Вернуться в Общие вопросы

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

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