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