forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

seaman 11.01.2013 19:00

Ответ: Вопросы от новичка
 
Не знаю насчет джойнтов. Но для того чтобы не дергалось можно уменьшить Fixed TimeStep (осторожнее чтобы не тормозило). Изменить в RigidBody - Inrerpolate/Extrapolate.
Цитата:

только если в Update просто изменять позицию предмета, но о коллизии тогда речи нету
Я тут когда делал арканоид понял, что ну не получается у меня сделать нормальное отбитие шарика битой с использованием физики. Как ни уменьшаешь Fixed TimeStep - иногда шарик отбивается не верхом биты, а серединой, или даже низом. Именно из-за прерывности расчета физики. (Может, конечно, у меня руки кривые, но - увы). Поэтому я сделал атк.
Двигаю шарик не физикой, а изменением позиции. Коллизии рассчитываю пуская вперед по движению шарика луч (Physx Raycast) на расстояние, определяемое скоростью шарика. Это делается каждый кадр - следовательно нет глюков, вызываемых дискретностью расчета физики.
В арканоиде это вполне нормально прошло. В большой игре нужно проверять не начнет и тормозить.

WISHMASTER35 11.01.2013 20:26

Ответ: Вопросы от новичка
 
Цитата:

о для того чтобы не дергалось можно уменьшить Fixed TimeStep
Уменьшать Fixed TimeStep это всегда не выход.
Цитата:

Коллизии рассчитываю пуская вперед по движению шарика луч (Physx Raycast) на расстояние, определяемое скоростью шарика
А Continuous Collision Detection не лучше было бы?

Не знаю физикой или нет двигается объект в Амнезии, но при коллизии он довольно хорошо себя ведет.

seaman 11.01.2013 20:44

Ответ: Вопросы от новичка
 
Цитата:

А Continuous Collision Detection не лучше было бы?
Я все перепробовал и Continuous и Continuous Dynamic. Говорю - или у меня руки кривые, или... Но мячик все-равно иногда отбивается не верхом биты. Кстати очень хорошо видна дискретность, если у камеры сделать ClearFlag - Don'tClear. Тогда на изображении остаются следы от мяча. Видно, что они дискретны, особенно если двигать физикой..

WISHMASTER35 11.01.2013 20:50

Ответ: Вопросы от новичка
 
seaman, если уменьшить timeScale, то тоже хорошо видно дискретность)

seaman 11.01.2013 21:11

Ответ: Вопросы от новичка
 
Я к чему вообще все это писал? К тому, что можно двигать вручную и обрабатывать коллизии. Во всяком случае у простых форм точно.

WISHMASTER35 11.01.2013 23:16

Ответ: Вопросы от новичка
 
Снял маленькое видео http://www.youtube.com/watch?v=Mke9F...ature=youtu.be правда темно получилось.
seaman, вручную так коллизию не обработать. Как видно объекты при коллизии даже вращаются.
А Continuous Dynamic действительно сильно не спасает. Делаю такую жесткую привязку к курсору body.MovePosition( GetTarget() ); но предмет все равно проходит сквозь объекты.

WISHMASTER35 12.01.2013 01:06

Ответ: Вопросы от новичка
 
«Newton» больше акцентирован на физическую точность моделирования, чем на скорость.
Теперь я действительно подумываю, что на PhysX такое не сделаешь.
В Амнезии, кстати, Character реалистично толкает физические объекты. PhysX CharacterController это просто не может сделать.

GooV 12.01.2013 14:26

Ответ: Вопросы от новичка
 
Всем здравствуйте. Хочу написать скрипт чтобы плеер стукаясь о препятствие получал урон. Написал скрипт для урона, все работает.Осталось одна проблема, уже второй день рою интернет в поисках примера для скрипта проверки коллизии, нарыл 2 функции OnTriggerEnter , OnCollisionEnter. И вот не получается задействовать их, уже не питаю надежд разобраться своими силами, прошу помощи или ссылок на понятные примеры использования этих функций.
Вот сам код:

Код:

using UnityEngine;
using System.Collections;

public class colision_of_player : MonoBehaviour {
       
        public GameObject target;
        public int prover;
           


       
        void OnCollisionEnter(Collision collision1) {
     
        if(collision1.gameObject.tag == "Player")
              {
                       
                       
        player_health eh=(player_health)target.GetComponent("player_health");
    eh.defuzhels(-10);
                       
                       
                }
    }
       
       
}


pax 12.01.2013 14:48

Ответ: Вопросы от новичка
 
Если ты используешь CharacterController, то тебе надо использовать http://docs.unity3d.com/Documentatio...lliderHit.html

Я тут когда-то писал урок про змейку. Там есть обработка столкновений с едой.

GooV 12.01.2013 15:27

Ответ: Вопросы от новичка
 
Спасибо за ответ.Я попытался переписать с функцией OnControllerColliderHit, но как-то получилось неважно, + я добавил задержку, чтобы когда осуществляется столкновение то жизни не исчезли моментально .
с этими дополнениями ничего не изменилось, он не реагирует на столкновение никак.
вод код:
Код:

using UnityEngine;
using System.Collections;

public class colision_of_player : MonoBehaviour {
       
        public GameObject target;
        public float time;
        public float maxtime;
        public int prover;
        private bool n;
    //public Collision myCollision;
       
        // Use this for initialization
        void Start () {
        maxtime=2.0f;
                time=maxtime;
               
                       
        }
       
        // Update is called once per frame
        void Update ()
        {
               
                if (time > 0){time-=Time.deltaTime;}
                if (time < 0){time=0;}
                if (time ==0){time=maxtime;n=true;}
        else{n=false;}
               
               
               
       
        }
       
       

       
       
        public void OnControllerColliderHit(ControllerColliderHit hit) {
     
        if(hit.collider.gameObject.tag == "Ships" & n){
                       
                       
        player_health eh=(player_health)target.GetComponent("player_health");
    eh.defuzhels(-10);
                       
                       
                }
    }
       
       
}


GooV 12.01.2013 15:44

Ответ: Вопросы от новичка
 
ураа, разобрался с коллизий, спасибо ещё раз за подсказку.

GooV 12.01.2013 17:00

Ответ: Вопросы от новичка
 
У меня ещё один вопрос, как копировать вектор движения предмета?

pax 12.01.2013 18:36

Ответ: Вопросы от новичка
 
А можно точнее вопрос поставить?

GooV 12.01.2013 20:51

Ответ: Вопросы от новичка
 
Поточнее можно. мне нужно сделать так чтобы плеер вставая на движущийся блок, как на пол, двигался вместе с ним, для этого я проверяю с начало коллизию плеера с этим движущимся блоком, и при её осуществлении должен двигать плеера так же как и движется блок. И пока я не знаю как осуществить это движение.Я предполагал что можно сделать с помощью вектора, скопировав его с блока и применив это движение на плеера.

pax 12.01.2013 21:26

Ответ: Вопросы от новичка
 
В стандартном примере платформера было такое решение http://u3d.as/content/unity-technolo...r-tutorial/3yF


Часовой пояс GMT +4, время: 06:41.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot