我想用C#创建一个物体的螺旋运动,以实现统一

我想用C#创建一个物体的螺旋运动,以实现统一,c#,unity3d,math,C#,Unity3d,Math,我已经创建了一个C#脚本来定义三维平面中对象的形状 using System.Collections; using System.Collections.Generic; using UnityEngine; public class spiralanti : MonoBehaviour { float angles; float radiuss; float angleSpeed; float rSpeed; // Start is called be

我已经创建了一个C#脚本来定义三维平面中对象的形状

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class spiralanti : MonoBehaviour
{
    float angles;
    float radiuss;
    float angleSpeed;
    float rSpeed;
    // Start is called before the first frame update
    void Start()
    {
        angles = 0;
        radiuss = 10;
        angleSpeed = 150;
        rSpeed = 0.7f;
        angles = Mathf.Max(0, Mathf.PI);
        radiuss = Mathf.Max(0, radiuss);

        //float x = 0;
        // float y = 0;
        // float z = 0;
    }

    // Update is called once per frame
    void Update()
    {
        angles += Time.deltaTime * angleSpeed;
        radiuss -= Time.deltaTime * rSpeed;
        if (radiuss == 0)
        {
            float x = 0;
            float y = 0;
            float z = 0;

            transform.position = new Vector3(x, y, z);
        }

        else
        {
            float x = radiuss * Mathf.Cos(Mathf.Deg2Rad * angles);
            float z = radiuss * Mathf.Sin(Mathf.Deg2Rad * angles);
            float y = 0;

            transform.position = new Vector3(x, y, z);
        }


        }

 }
物体的螺旋很好,但我想让它在到达原点时停止并停留在那里。我尝试了代码中给出的if-else语句,但它没有停止。相反,它从一个向内的螺旋变成了一个向外的螺旋


请帮我查一下密码

首先:切勿使用
==
比较两个
浮点值

由于该值可能与另一个值不完全匹配,即使在逻辑上您会这样认为

Unity使用if

10f / 10f != 1f
因为有时这可能类似于
1.00000001
0.99999999

如果要检查精确值,请使用

基本上等于

if(Mathf.Abs(a-b) <= Mathf.Epsilon)
允许超调,因此,如果在运行此操作之前,
半径
已经是
,则最终得到的负值不完全是
==0
,但可能小于或等于
-0.0000000 1
,因此您永远不会进入
if


所以你可以简单地使用

if(radius <= 0)
{
   transform.position = Vector3.zero;
}
...

您的意思是将
if(radiuss==0)
更改为此
if(radius),因为舍入错误,半径可能永远不会精确到零。请尝试将检查更改为
if(radius)
radiuss -= Time.deltaTime * rSpeed;
if(radius <= 0)
{
   transform.position = Vector3.zero;
}
...
radius = Mathf.Max(0, radius);
if(Mathf.Approximately(radius, 0))
{
    transform.position = Vector3.zero;
}
...