Для вас, пожалуйста, обратите внимание, что это не учитывает поворот, что я уверен, что вы сможете выяснить, правильно? ;)
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;
}
}
Я получаю '' ошибка CS0019: Оператор '-» не может быть применен к операндам типа ' UnityEngine.Transform 'и 'UnityEngine.Vector3''' –
В строке' offset = col.gameObject.transform - transform.position; ' –
woops ... fixed. – maksymiuk