我是Unity的新手,需要一些帮助,如果有任何答案,我将非常感谢!
我正在尝试创建一个弹性平面,我想通过拖动来拉伸它。我想使用ctrl+left鼠标按钮沿x轴拉伸整个平面,使用alt+left鼠标按钮沿y轴拉伸整个平面。然后我想拉伸沿着平面边界的单个多边形,只需使用鼠标左键并向任何方向拖动即可。
到目前为止,我已经使用下面的脚本使用鼠标左键或右键拉伸了整个平面,但我还没有能够限制它可以拉伸的距离,所以我也希望能有任何关于如何做到这一点的提示。对于拉伸单个多边形,我已经查看了cloth修改器,并尝试附加可移动对象,但根本无法使其工作。谢谢你的帮助!
public GameObject elasticobject;
public float sizingFactor = 0.1f;
private GameObject lastSpawn = null;
private float startSize;
private float startX;
void Update()
{
if (Input.GetMouseButton(0))
{
Vector3 size = elasticobject.transform.localScale;
size.x = startSize + (Input.mousePosition.x - startX) * sizingFactor;
elasticobject.transform.localScale = size;
}
if (Input.GetMouseButton(1))
{
Vector3 size = elasticobject.transform.localScale;
size.y = startSize + (Input.mousePosition.y - startX) * sizingFactor;
elasticobject.transform.localScale = size;
}
}
}发布于 2018-06-28 10:07:04
正如Draco所说,Mathf.Clamp对这类事情很有用。
public GameObject elasticobject;
public float sizingFactor = 0.1f;
private GameObject lastSpawn = null;
private float startSize;
private float startX;
private float limitX;
private float limitY;
void Update()
{
if (Input.GetMouseButton(0))
{
Vector3 size = elasticobject.transform.localScale;
size.x = Mathf.Clamp(
startSize + (Input.mousePosition.x - startX) * sizingFactor,
0, limitX);
elasticobject.transform.localScale = size;
}
if (Input.GetMouseButton(1))
{
Vector3 size = elasticobject.transform.localScale;
size.y = Mathf.Clamp(
startSize + (Input.mousePosition.y - startX) * sizingFactor,
0, limitY);
elasticobject.transform.localScale = size;
}
}我为你添加了一些X和Y的限制。我不太明白你到底在做什么,StartX的用法有点让人费解,特别是在Y轴部分。
在进行这种重新缩放时,更有用的是增加百分比而不是固定数量。否则,非常大的平面相对于其大小几乎没有变化。
private float multFactor = 0.01f;
void Update()
{
if (Input.GetMouseButton(0))
{
Vector3 size = elasticobject.transform.localScale;
size.x = Mathf.Clamp(
size.x *= 1 + multFactor,
0, limitX);
elasticobject.transform.localScale = size;
}
if (Input.GetMouseButton(1))
{
Vector3 size = elasticobject.transform.localScale;
size.x = Mathf.Clamp(
size.y *= 1 + multFactor,
0, limitY);
elasticobject.transform.localScale = size;
}
}这里要注意的另一件事是,您在本质上定义了相同的方法,但在两个不同的区域中略有不同(一个用于X,一个用于Y)。这可能只适用于这两个方法,但是如果您发现自己定义了一个方法三次或更多次,那么最好使用一个接受额外参数的方法。这样,如果你想改变一些东西,你只需要在一个地方改变它。
我还没有实际运行它们来查看它们是否工作,所以它们可能需要一些小的修改。
https://stackoverflow.com/questions/51072862
复制相似问题