Помогите с косяком коллизии объектов - Форум Игроделов
Вс, 09 Фев 2025, 19:00 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Помогите с косяком коллизии объектов
mikemilanskyДата: Пт, 23 Авг 2013, 18:25 | Сообщение # 1
Нет аватара
 
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
Есть пара объектов в 2D плоскости (rot X,Y false, position Z fix) с навешанными rigid body и бокс коллайдерами. На них висит скрипт перетаскивания мышкой. Так вот если один объект сбросить на другой - то все достаточно неплохо и он останется на поверхности второго. Однако если мышкой потянуть 1 объект через 2, то порождаются глюки с неистовым отскакиванием от коллайдера. Крутил min penetration и solver iteration count - не помогает. По прежнему можно протащить насквозь. Какие ошибки я мог допустить?
 
СообщениеЕсть пара объектов в 2D плоскости (rot X,Y false, position Z fix) с навешанными rigid body и бокс коллайдерами. На них висит скрипт перетаскивания мышкой. Так вот если один объект сбросить на другой - то все достаточно неплохо и он останется на поверхности второго. Однако если мышкой потянуть 1 объект через 2, то порождаются глюки с неистовым отскакиванием от коллайдера. Крутил min penetration и solver iteration count - не помогает. По прежнему можно протащить насквозь. Какие ошибки я мог допустить?

Автор - mikemilansky
Дата добавления - 23 Авг 2013 в 18:25
ЛевшаДата: Пт, 23 Авг 2013, 19:54 | Сообщение # 2
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Цитата (mikemilansky)
с навешанными rigid body

Все верно - ты же физику повесил на обьекты, вот она и работает...


X.cor.R (Prologue)
 
Сообщение
Цитата (mikemilansky)
с навешанными rigid body

Все верно - ты же физику повесил на обьекты, вот она и работает...

Автор - Левша
Дата добавления - 23 Авг 2013 в 19:54
mikemilanskyДата: Сб, 24 Авг 2013, 11:13 | Сообщение # 3
Нет аватара
 
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
Не понимаю о чем вы? Берем 2 куба, накидываем rigid body и такой вот скрипт:
Код

using UnityEngine;
using System.Collections;

public class DragAnObject : MonoBehaviour
{
private Vector3 screenPoint;
private Vector3 offset;
private Vector3 curScreenPoint;
private Vector3 curPosition;
private Rigidbody myRigidbody;
public bool freezeRotationOnDrag = true;
private bool freezeRotationSetting;
private bool gravitySetting;
private float Rotate = 0.0f;

// Use this for initialization
void Start ()
{
myRigidbody = rigidbody;
}

// Update is called once per frame
void Update ()
{
}
void OnMouseDown()
{
screenPoint = Camera.main.WorldToScreenPoint(transform.position);
offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
gravitySetting = myRigidbody.useGravity;
freezeRotationSetting = myRigidbody.freezeRotation;
myRigidbody.useGravity = false;
myRigidbody.freezeRotation = freezeRotationOnDrag;
}
void OnMouseDrag()
{
curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
transform.position = curPosition;
}
void OnMouseUp ()
{
myRigidbody.useGravity = gravitySetting;
rigidbody.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezePositionZ ;
}
}

Как избежать прохождения насквозь?
 
СообщениеНе понимаю о чем вы? Берем 2 куба, накидываем rigid body и такой вот скрипт:
Код

using UnityEngine;
using System.Collections;

public class DragAnObject : MonoBehaviour
{
private Vector3 screenPoint;
private Vector3 offset;
private Vector3 curScreenPoint;
private Vector3 curPosition;
private Rigidbody myRigidbody;
public bool freezeRotationOnDrag = true;
private bool freezeRotationSetting;
private bool gravitySetting;
private float Rotate = 0.0f;

// Use this for initialization
void Start ()
{
myRigidbody = rigidbody;
}

// Update is called once per frame
void Update ()
{
}
void OnMouseDown()
{
screenPoint = Camera.main.WorldToScreenPoint(transform.position);
offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
gravitySetting = myRigidbody.useGravity;
freezeRotationSetting = myRigidbody.freezeRotation;
myRigidbody.useGravity = false;
myRigidbody.freezeRotation = freezeRotationOnDrag;
}
void OnMouseDrag()
{
curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
transform.position = curPosition;
}
void OnMouseUp ()
{
myRigidbody.useGravity = gravitySetting;
rigidbody.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezePositionZ ;
}
}

Как избежать прохождения насквозь?

Автор - mikemilansky
Дата добавления - 24 Авг 2013 в 11:13
ЛевшаДата: Сб, 24 Авг 2013, 17:44 | Сообщение # 4
Черный Волк
 
Сообщений: 7257
Награды: 30
Репутация: 3313
Статус: Offline
Цитата (mikemilansky)
Как избежать прохождения насквозь?

Не использовать движение через трансформ - оно игнорирует физику.


X.cor.R (Prologue)
 
Сообщение
Цитата (mikemilansky)
Как избежать прохождения насквозь?

Не использовать движение через трансформ - оно игнорирует физику.

Автор - Левша
Дата добавления - 24 Авг 2013 в 17:44
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025