2015-10-28 2 views
0

В настоящее время я использую следующий код, чтобы сделать объекты придерживаться других геймобжектов:"Stick" gameObject в другой gameObject после столкновения?

void OnCollisionEnter(Collision col) 
{ 
    rb = GetComponent<Rigidbody>(); 
    rb.isKinematic = true; 
    gameObject.transform.SetParent (col.gameObject.transform); 
} 

Он отлично работает, но это вызывает много других проблем. Например, после столкновения он больше не может обнаруживать столкновения.

Есть ли у кого-нибудь альтернатива этому коду (что делает игру-оболочку на другой после столкновения)?

ответ

0

Для вас, пожалуйста, обратите внимание, что это не учитывает поворот, что я уверен, что вы сможете выяснить, правильно? ;)

protected Transform stuckTo = null; 
protected Vector3 offset = Vector3.zero; 

public void LateUpdate() 
{ 
    if (stuckTo != null) 
     transform.position = stuckTo.position - offset; 
} 

void OnCollisionEnter(Collision col) 
{ 
    rb = GetComponent<Rigidbody>(); 
    rb.isKinematic = true; 

    if(stuckTo == null 
     || stuckTo != col.gameObject.transform) 
     offset = col.gameObject.transform.position - transform.position; 

    stuckTo = col.gameObject.transform; 

} 

EDIT: Как и было обещано, вот это более продвинутая версия с вращением во внимание:

Transform stuckTo; 
Quaternion offset; 
Quaternion look; 
float distance; 

public void LateUpdate() 
{ 
    if (stuckTo != null) 
    { 
     Vector3 dir = offset * stuckTo.forward; 
     transform.position = stuckTo.position - (dir * distance); 
     transform.rotation = stuckTo.rotation * look; 
    } 
} 

void OnCollisionEnter(Collision col) 
{ 
    rb = GetComponent<Rigidbody>(); 
    rb.isKinematic = true; 

    if(stuckTo == null 
     || stuckTo != col.gameObject.transform) 
    { 
     Vector3 diff = col.gameObject.transform.position - transform.position; 
     offset = Quaternion.FromToRotation (col.gameObject.transform.forward, diff.normalized); 
     look = Quaternion.FromToRotation (col.gameObject.transform.forward, transform.forward); 
     distance = diff.magnitude; 
     stuckTo = col.gameObject.transform; 
    } 
} 
+0

Я получаю '' ошибка CS0019: Оператор '-» не может быть применен к операндам типа ' UnityEngine.Transform 'и 'UnityEngine.Vector3''' –

+0

В строке' offset = col.gameObject.transform - transform.position; ' –

+0

woops ... fixed. – maksymiuk

Смежные вопросы