Страница 2 из 3

Re: баллистика полет стрелы

СообщениеДобавлено: 22 фев 2010, 13:29
Paul Siberdt
Ну... скрипт там вообще не нужен был... я им просто по-корявому имитировал импульс выстрела.
Вы же стрелу запускаете своими способом.

Да, добавить стреле невидимый тормозящий объект - решение гораздо лучше, чем разбивать стрелу на части :-bd

Чтоб как буйки не стояли - надо вернуть центр масс ближе к центру стрелы. А чтоб втыкались... вам, думаю, нужен на геометрии уровня меш коллайдер, а коллайдеры стрел сделайте триггерами. В момент, когда триггер стрелы ловит столкновение, превращайте стрелу в кинетическую - она замрет на месте.
Можно похитрее поступить и добавить триггер наконечнику, причем, оставив коллайдер стрелы. Причем, если триггер наконечника будет спрятан в объеме коллайдера стрелы, срабатывать он будет (стрела воткнется) лишь на большой скорости.
Можно к тому же трассировать поверхность в момент коллизии триггера, узнавать ее материал и учитывать его в поведении стрелы (от металла отскакивает, в землю втыкается).

Re: баллистика полет стрелы

СообщениеДобавлено: 22 фев 2010, 16:38
Order
Много интересных идей.. надо реализовать.

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

Сделаю мишень попробую в нее втыкать стрелы.

Re: баллистика полет стрелы

СообщениеДобавлено: 22 фев 2010, 19:14
Paul Siberdt
Задевать друг друга могут ригиды, если они утоплены друг в друга или стоят рядом. Чтоб избавится от этого - лучше уменьшить коллайдеры, оставив зазор пошире меж ними. Если у вас стрелы пользуют меш коллайдер - замените его на кубический - сильно облегчите математику, а визуально ничего не поменяется.

Re: баллистика полет стрелы

СообщениеДобавлено: 23 фев 2010, 12:01
Order
как можно сделать чтобы стрелы застревали в подвижных мишенях и двигались с ними ?

Re: баллистика полет стрелы

СообщениеДобавлено: 23 фев 2010, 12:21
gnoblin
При ударе делать strela_go.transform.parent = target_go.transform;

Re: баллистика полет стрелы

СообщениеДобавлено: 23 фев 2010, 14:48
Order
gnoblin

можно поподробнее ?
у меня отскакивают стрелы

Re: баллистика полет стрелы

СообщениеДобавлено: 23 фев 2010, 15:54
Order
это в стреле нужно делать ?

или сделать отдельную стрелу со скриптом, ту что прилетела ударила , удалить и вызвать вторую и прицепить к цели ?

Re: баллистика полет стрелы

СообщениеДобавлено: 23 фев 2010, 17:22
Paul Siberdt
- при ударе отключаем физику флагом isKinetic = true
- привязываем стрелу к объекту, в чей коллайдер она ударилась:
myTransform.parent = myHit.collider.transform;

myTransform - это трансформ стрелы, и сам скрипт срабатывает в ней
myHit - это типа тот RaycastHit, который вы получаете с трассировки или коллизии с ригидом
Сама операция парентит стрелу к объекту, в который она воткнулась.

Re: баллистика полет стрелы

СообщениеДобавлено: 23 фев 2010, 19:27
Order
Синтаксис:
Используется javascript
var timeOut = 10.0;
var myHit : RaycastHit;
var strela_go : Transform;

function Start () {
        rigidbody.centerOfMass = Vector3 (0, 0, 5);
}

function OnCollisionEnter (collision : Collision) {
        rigidbody.isKinematic = true;
        strela_go.transform.parent = myHit.collider.transform;
}

@script RequireComponent (Rigidbody)


физика выключается , стрелы останавливаются, но не цепляются к цели.
как объявить эти переменные и какого они типа.

Re: баллистика полет стрелы

СообщениеДобавлено: 23 фев 2010, 22:01
Paul Siberdt
Что такое myHit? результат трассировщика? Тогда как он обыгрывается в событии коллизии?
У вас ивент коллизии сам по себе содержит указатель на коллайдер препятствия - collider : Collider

вот к его трансформу и цепляйтесь... а еще лучше - поковыряйтесь с документацией, чтоб понять, что там есть что.

Re: баллистика полет стрелы

СообщениеДобавлено: 24 фев 2010, 11:34
Order
Все заработало, выложу рабочий скрипт возможно кому нибудь пригодиться.

Синтаксис:
Используется javascript
//скрипт стрелы, баллистическая траектория+застревание в цели.
var timeOut = 10.0;

function Start () {
        //смещение центра тяжести по оси z
        rigidbody.centerOfMass = Vector3 (0, 0, 5);
}
        // функция проверки столкновения
function OnCollisionEnter (collision : Collision) {
        // отключение физики стрелы включение кинематики
        rigidbody.isKinematic = true;
       // координаты стрелы присоединяются к координатам объекта столкновения.
        transform.parent = collision.transform;
}

@script RequireComponent (Rigidbody)
 

Re: баллистика полет стрелы

СообщениеДобавлено: 24 фев 2010, 11:36
Paul Siberdt
Ну так а где объяснения, как создать баллистическую кривую?
Скрипт только втыкает стрелу :p

Re: баллистика полет стрелы

СообщениеДобавлено: 24 фев 2010, 14:40
Order
В теме есть объяснения как..
Основной смысл тяжелому заскриптованному наконечнику (стреле) прицепить(фикс джоин) невидимый без колайдерный объект с физикой(оперение), с минимальной массой и повышенной тормознутости в среде.
Из за этого наконечник со смещенным центром тяжести вперед, будет клевать носом в землю. :-q
"Оперение" нужно сделать дочерним стреле иначе будет глючить.

Колайдер стрелы смещается ближе к наконечнику.

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

Re: баллистика полет стрелы

СообщениеДобавлено: 24 фев 2010, 14:55
Zaicheg
Order писал(а):К стати стрела при попадании успевает немного отскочить, из за чего выглядит не очень красиво и смещается от точки попадания.. Как с этим можно бороться ? можно как нибудь убрать реакцию стрелы на препятствие, типа заточить :)

Физический материал, свойство Bouncyness и смежные.
http://unity3d.com/support/documentatio ... erial.html

Re: баллистика полет стрелы

СообщениеДобавлено: 10 янв 2011, 03:49
waruiyume
Способ получить желаймое т.е. поворот стрелы по касательной к траектории без плясок с бубном
FixedJoint и смещеня центра масс :-\
(js)
Синтаксис:
Используется javascript
private var rig : Rigidbody;
rig = rigidbody;

private var trans : Transform;
trans = transform;

private var vel : Vector3;
private var pos : Vector3;

private var plu : Vector3;
plu = Vector3(0,0,-2); //-локальная позиия оперения

rig.angularDrag = 0.5;//-чтобы уменьшить раскачивание при выстреле вверх

function Start()
{
        rig.AddForce (trans.forward*50 , ForceMode.VelocityChange);//-типа выстрел:)
}

function FixedUpdate ()
{
        pos = trans.position+trans.TransformDirection(plu);//-мировая позиия оперения
        vel = trans.InverseTransformDirection (rig.velocity);//-локальная скорость снаряда
        vel.z = 0;//-убираем скорось направленную вперед/назад(относительно стрелы)-это ведь не парашют:)
        vel = -vel/1000;//-поворачиваем скорость на 180* (берем ее отрицатьное значение) и уменьшаем(чем больше делитель тем плавнее поворот)
        vel = trans.TransformDirection (vel);//-скорость торможения в мировой системе координат
        rig.AddForceAtPosition(vel,pos,ForceMode.VelocityChange);//-добавляем скорость торможения в позиции оперения
}
 

результат:
\m/ [unity 3D]
Скрытый текст:
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://www.mpfiles.ru/get/?29151&w=640&h=480&t=true&preview=1' height='"+(480+30)+"' width='640' frameborder='0' scrolling='no'></iframe>"); </script>