将旋转对象缩小到点

问题描述 投票:0回答:1

我有一个物体(橙色),它绑在铰链关节(黑色)上并且可以围绕它旋转。在某些时候,当我检测到与其他物体发生碰撞时,我必须将其剪切到那里(红色)。为了做到这一点,我想缩小这些点(黑色和红色)之间的对象,但我需要它保持与铰链关节的连接并保持其宽度。 enter image description here

void OnCollisionEnter2D(Collision2D collision)
{
    GameObject obj = collision.gameObject;
    Vector3 endPos =collision.contacts[0].point;
    float scaleX = Vector3.Distance(new Vector3(startPos.x, 0, 0), new Vector3(endPos.x, 0, 0));
    float scaleY = Vector3.Distance(new Vector3(0, startPos.y, 0), new Vector3(0, endPos.y, 0));
    Vector3 newScale = new Vector3(scaleX,scaleY, 1);
    obj.transform.parent.transform.localScale = obj.transform.TransformPoint(newScale);
}

起始位置由铰链关节的位置初始化:

startPos = GameObject.Find("hair").GetComponent<HingeJoint2D>().transform.position;

我将对象包裹在父对象中并缩放它,因为我在某处读到,然后它会保留在原处:

enter image description here

我尝试了很多方法,但我无法让它保持在适当的位置并保持正确的尺寸。 我该如何正确实施?

unity-game-engine 2d coordinates sprite scaling
1个回答
0
投票

如果将父变换的枢轴(位置)移动到铰链,然后将 localScale 应用于父对象,您将获得所需的结果。

enter image description here

示例:

private float scale = 3;

然后:

transform.parent.transform.localScale = new Vector3(transform.parent.transform.localScale.x, transform.parent.transform.localScale.y, scale);
© www.soinside.com 2019 - 2024. All rights reserved.