首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单位中的弹性物体?

单位中的弹性物体?
EN

Stack Overflow用户
提问于 2018-06-28 07:47:12
回答 1查看 389关注 0票数 0

我是Unity的新手,需要一些帮助,如果有任何答案,我将非常感谢!

我正在尝试创建一个弹性平面,我想通过拖动来拉伸它。我想使用ctrl+left鼠标按钮沿x轴拉伸整个平面,使用alt+left鼠标按钮沿y轴拉伸整个平面。然后我想拉伸沿着平面边界的单个多边形,只需使用鼠标左键并向任何方向拖动即可。

到目前为止,我已经使用下面的脚本使用鼠标左键或右键拉伸了整个平面,但我还没有能够限制它可以拉伸的距离,所以我也希望能有任何关于如何做到这一点的提示。对于拉伸单个多边形,我已经查看了cloth修改器,并尝试附加可移动对象,但根本无法使其工作。谢谢你的帮助!

代码语言:javascript
复制
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;
    }
}
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-28 10:07:04

正如Draco所说,Mathf.Clamp对这类事情很有用。

代码语言:javascript
复制
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轴部分。

在进行这种重新缩放时,更有用的是增加百分比而不是固定数量。否则,非常大的平面相对于其大小几乎没有变化。

代码语言:javascript
复制
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)。这可能只适用于这两个方法,但是如果您发现自己定义了一个方法三次或更多次,那么最好使用一个接受额外参数的方法。这样,如果你想改变一些东西,你只需要在一个地方改变它。

我还没有实际运行它们来查看它们是否工作,所以它们可能需要一些小的修改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51072862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档