我想用C#创建一个物体的螺旋运动,以实现统一
我已经创建了一个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
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;
}
...