нечеткое столкновение стрелы.
Добавлено: 20 июл 2013, 21:49
Всем привет. Проблема такая, есть стрела, которая вылетает вперед под воздействием Velocity , но при попадании в объект не всегда происходит столкновение особенно, когда угол между и стрелой и объектом около 90 градусов, стрела становится просто бесплотным призраком. пытался решить проблему следующими способами:
1) RigidBody->Collision Detection->Continious Dynamic
2)
Edit -> Project Settings -> Physics -> Min Penetration For Penalty.
Чем это значение меньше, тем точнее коллизии.
Edit -> Project Settings -> Physics -> Solver Iteration Count
Чем это значение выше, тем точнее расчёт коллизий.
Edit -> Project Settings -> Time -> Fixed Timestep
Чем это значение меньше, тем чаще вызывается цикл обработки физики.
К сожалению мои махинации не принесли успеха, вот скрипт, который прикреплен к стреле, если это имеет значение.
Подскажите пожалуйста, что делать
1) RigidBody->Collision Detection->Continious Dynamic
2)
Edit -> Project Settings -> Physics -> Min Penetration For Penalty.
Чем это значение меньше, тем точнее коллизии.
Edit -> Project Settings -> Physics -> Solver Iteration Count
Чем это значение выше, тем точнее расчёт коллизий.
Edit -> Project Settings -> Time -> Fixed Timestep
Чем это значение меньше, тем чаще вызывается цикл обработки физики.
К сожалению мои махинации не принесли успеха, вот скрипт, который прикреплен к стреле, если это имеет значение.
Синтаксис:
Используется javascript
var arrow:GameObject;
function Update () {
var direction = transform.TransformDirection(Vector3.forward);
var hit : RaycastHit;
if (Physics.Raycast(transform.position, direction,hit,10)&&(hit.collider.gameObject.name != ("TRIGGER_AGR")))
{
var instantiatedArrow : GameObject = Instantiate (arrow, hit.point, transform.rotation);
//Quaternion.FromToRotation(Vector3.back, hit.normal)
instantiatedArrow.transform.parent = hit.collider.gameObject.transform;
Destroy( gameObject );
instantiatedArrow.transform.Translate(0,0,-0.5);
if (hit.collider.gameObject.name == ("Cube")||hit.collider.gameObject.name == ("Cube(Clone)") )
{
var s : sledovanie = hit.collider.gameObject.GetComponent(sledovanie);
s.hp--;
}
}
}
function Update () {
var direction = transform.TransformDirection(Vector3.forward);
var hit : RaycastHit;
if (Physics.Raycast(transform.position, direction,hit,10)&&(hit.collider.gameObject.name != ("TRIGGER_AGR")))
{
var instantiatedArrow : GameObject = Instantiate (arrow, hit.point, transform.rotation);
//Quaternion.FromToRotation(Vector3.back, hit.normal)
instantiatedArrow.transform.parent = hit.collider.gameObject.transform;
Destroy( gameObject );
instantiatedArrow.transform.Translate(0,0,-0.5);
if (hit.collider.gameObject.name == ("Cube")||hit.collider.gameObject.name == ("Cube(Clone)") )
{
var s : sledovanie = hit.collider.gameObject.GetComponent(sledovanie);
s.hp--;
}
}
}
Подскажите пожалуйста, что делать