如何在发生碰撞后让游戏对象正确地附加(或“粘贴”)到另一个游戏对象上呢?问题在于,即使它正在改变比例,我也希望游戏对象在碰撞后能够附加。
“碰撞附加”代码:
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;
}
这段代码可以让GameObject在碰撞后完美附着。但是,当该GameObject更改比例时(在其附着时),它在视觉上不再看起来与其碰撞的物体附着在一起。基本上,这段代码使GameObject仅与碰撞时的原始比例粘在一起。如何使GameObject始终附着于其所碰撞的物体?并在整个过程中保持任何比例?我想避免使用父对象:"虽然有点不安全,将碰撞器作为父对象可能会导致奇怪的结果,例如随机传送或物体开始疯狂移动和旋转等。" - Samed Tarık ÇETİN:评论。
缩放脚本:
public Transform object1; //this is the object that my future-scaling GameObject collided with.
public Transform object2; //another object, the same scale as object1, somewhere else
//(or vice versa)
void Update ()
{
float distance = Vector3.Distance (object1.position, object2.position);
float original_width = 10;
if (distance <= 10)
{
float scale_x = distance / original_width;
scale_x = Mathf.Min (scale_x, 3.0f);
transform.localScale = new Vector3 (scale_x * 3.0f, 3.0f / scale_x, 3.0f);
}
}