首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity2D轮换问题

Unity2D轮换问题
EN

Stack Overflow用户
提问于 2020-02-05 01:58:29
回答 3查看 60关注 0票数 1

我正在尝试添加一个降落伞在我的游戏中,我需要它旋转45度向右,然后45度左右,并保持交替,图表我需要如何工作在下面

我使用的代码如下所示,但是它只在一侧工作,然后不会返回。

代码语言:javascript
复制
        if (maxRotation <= transform.rotation.eulerAngles.z)
        {
            rotatingRight = false;
        }else if(minRotation <= transform.rotation.eulerAngles.z)
        {
            rotatingRight = true;
        }

        transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);

        if (rotatingRight)
        {
            transform.Rotate(Vector3.forward * 45 * Time.deltaTime);
        }
        else
        {
            transform.Rotate(Vector3.forward * -45 * Time.deltaTime);
        }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-05 02:28:57

正如3Dave在评论中所说,当minRotation大于或等于eulerAngles时,你应该向右旋转。

代码语言:javascript
复制
if (maxRotation <= transform.rotation.eulerAngles.z)
{
    rotatingRight = false;
} else if (transform.rotation.eulerAngles.z <= minRotation)
{
    rotatingRight = true;
}

transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);

if (rotatingRight)
{
    transform.Rotate(Vector3.forward * 45 * Time.deltaTime);
}
else
{
    transform.Rotate(Vector3.forward * -45 * Time.deltaTime);
}

我现在意识到这个答案的前一个版本是不必要的复杂,但现在我不能删除它,因为它已经被接受。这个问题只是由一个打字错误引起的。

票数 1
EN

Stack Overflow用户

发布于 2020-02-05 02:25:57

你的代码可以简化很多。实际上,您不需要使用布尔值来查看是否正确。只需在第一个if中执行,不需要第二个if。还有一个很好的机会,你可以减少错误的数量,就像这里,你的布尔值并不总是你想的那样。

代码语言:javascript
复制
float rotationValue = 45;

if(transform.rotation.eulerAngles.z >= maxRotation)
{
    rotationValue = -45;
}
else if(transform.rotation.eulerAngles.z <= minRotation)
{
    rotationValue = -45;
}

transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);


transform.Rotate(Vector3.forward, rotationValue * Time.deltaTime);
票数 -1
EN

Stack Overflow用户

发布于 2020-02-05 03:43:52

我可以通过这样做来解决这个问题

代码语言:javascript
复制
        if (maxRotation == Math.Round(transform.rotation.eulerAngles.z))
        {
            rotatingRight = false;
        }else if(minRotation == Math.Round(transform.rotation.eulerAngles.z))
        {
            rotatingRight = true;
        }

        transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);

        if (rotatingRight)
        {
            transform.Rotate(Vector3.forward * rotationSpeed * Time.deltaTime);
        }
        else
        {
            transform.Rotate(Vector3.back * rotationSpeed * Time.deltaTime);
        }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60063099

复制
相关文章

相似问题

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