团结问题

时间:2019-12-01 05:25:25

标签: unity3d

pic

我首先为变量hh分配了float,但是unity给我一个错误,因为向量使用浮点数,它无法将double转换为float。考虑到我已经将其命名为float,这真的很奇怪。因此,我尝试将hh分配为双精度型,然后将其更改回float3的vector3参数中。令人惊讶的是,由于它在技术上是同一件事,因此它根本没有任何意义。

1 个答案:

答案 0 :(得分:1)

做到

private float hh = -6.74f;

注意f,它告诉c#这是一个float值。参见Floating-point numeric types (C# reference)。否则,-6.74是一个double,它不能隐式分配给float字段/变量,但需要显式强制转换(float)

由于double的精度高于float,因此无法隐式转换。相反,可以隐式完成此操作,因为您不会丢失任何信息。

因此,由于Unity始终以float的形式提供所有信息,因此使用double与转换信息进行比较和计算是没有意义的。


稍后为您使用的载体

(float)hh

这肯定不是不是 technically the same thing。这是一个明确的类型转换,您可以在分配值时也可以完成

private float hh = (float)-6.74;

在做之前

transform.position.x < -6.74

之所以可行,是因为这里的-6.74不会转换为float,而是相反:transform.position.xfloat可以被隐式转换为更精确的double。因此,隐式发生的实际上是

(double)transform.position.x < -6.74

使用double比较运算符<

这些

(float)transform.position.y

完全是多余的,因为transform.position.y已经float


最后:您知道,只需使用

,您就可以缩短代码编写时间
var getaxis = Input.GetAxis("Horizontal");
var position = transform.position;
position.x = Mathf.Max(-6.74f, position.x + getaxis * Time.deltaTime * movementspeed);
transform.position = position;