【发布时间】:2016-02-24 01:53:39
【问题描述】:
如何正确在碰撞后将游戏对象附加(或“粘贴”)到另一个游戏对象?问题:我希望游戏对象在碰撞后附加,即使它正在改变比例。
“碰撞时附加”代码:
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;
}
此代码使游戏对象在碰撞后完美连接。但是当这个游戏对象改变比例时(当它被附加时),它在视觉上看起来不再附加到它所碰撞的任何东西上。基本上,此代码使游戏对象在碰撞时仅保持原始比例。我怎样才能让游戏对象始终坚持它所碰撞的东西?在这个过程中它有什么规模?我想避免养育:“虽然有点不安全,养育碰撞器可能会导致奇怪的结果,例如随机传送或物体开始疯狂移动和旋转等。” - Samed Tarık ÇETİN:comment.
缩放脚本:
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);
}
}
【问题讨论】:
-
您是否尝试过附加父母而不是这种方式。我从来没有做过这样的事情,但是我在互联网上搜索并发现了与您的情况相似的东西answers.unity3d.com/questions/55068/…。
-
是的,我已经尝试过了,但总是得到意想不到的结果。我想避免为人父母。 “但这有点不安全,育儿对撞机可能会导致奇怪的结果,例如随机传送或物体开始疯狂移动和旋转等。” - Samed Tarık ÇETİN:comment
-
在检测到孩子的对撞机后,您是否尝试仅缩放父级。比如 if (collision condition) {transform.parent.localScale ++} ?
标签: c# unity3d collision-detection collision unity5