如果我们将一些float值传递给Vector3Int的参数,它将如何处理?
m_target = new Vector3Int(target.x-speedx/4,target.y,target.z-speedz/4);
因此,如果speedx / 4将浮动,那么它将如何转换为int
Vector3Int(124.66,0,0)将被视为(124,0,0)或(125,0,0)
答案 0 :(得分:1)
在问题注释后添加注释
在您发布的代码中,您正在执行整数除法,发送结果为int(另请参见this answer)。
根据我在评论中看到的内容。
target.x
,target.y
,speedx
和speedz
(还有常数4)都是整数。
另请参见以下示例:
int x = 13 / 4; //this returns int 3
因此,您无需在那里投射。
Float不会隐式转换为int,因此您的代码将无法编译。您需要强制转换。
还要考虑到转换会截断浮点数。
float x = 124.345f;
int y = (int) x; //x will become 124.
在您的特定情况下,您可以像这样转换它。
m_target = new Vector3Int((int) target.x-speedx/4, (int)target.y, (int)target.z-speedz/4);
结果将是(124.0,0.0,0.0)。
如果要获得其他结果,可以检查以下方法。
最终结果将与基本转换相同。浮点数将被截断到较低的int。
float x 124.345;
int y = (int) Mathf.Floor(x); //y will become 124
//or
int z = Mathf.FloorToInt(x); //z will become 124
转化结果
float 124.345f
→转换为int 124
float 124.789f
→转换为int 124
浮点数将被截断为更高的整数。
float x 124.345;
int y = (int) Mathf.Ceil(x); //y will become 125
//or
int z = Mathf.CeilToInt(x); //z will become 125
转化结果
float 124.345f
→转换为int 125
float 124.789f
→转换为int 125
浮点数将四舍五入到更接近的整数。
float x 124.345;
int y = (int) Mathf.Round(x); //y will become 124
//or
int z = Mathf.RoundToInt(x); //z will become 124
转化结果的区别
float 124.345f
→转换为int 124
float 124.789f
→转换为int 125
答案 1 :(得分:1)
它不会编译。
您有多种选择,可以根据需要将值转换为int
。。
但是首先要特别确保speedx
的类型为float
或使用4f
,否则您可能已经进行了 int
除那里使用不正确的结果。
简单的类型转换| FloorToInt
new Vector3Int((int)(target.x - speedx/4f), (int)(target.y), (int)(target.z-speedz/4f));
它只是“切掉”逗号后面的任何内容。因此,它的行为类似于Mathf.FloorToInt
(124.6f, 0, 0)
→(124, 0, 0)
(124.4f, 0, 0)
→(124, 0, 0)
RoundToInt
您可以改用Mathf.RoundToInt
new Vector3Int(Mathf.RoundToInt(target.x-speedx/4f), Mathf.RoundToInt(target.y), Mathf.RoundToInt(target.z-speedz/4f));
用于正确地向上和向下将值四舍五入为有效的int
。
(124.6f, 0, 0)
→(125, 0, 0)
(124.4f, 0, 0)
→(124, 0, 0)
CeilToInt
如果您想总是被遗弃,也可以使用Mathf.CeilToInt
new Vector3Int(Mathf.CeilToInt(target.x-speedx/4f), Mathf.CeilToInt(target.y), Mathf.CeilToInt(target.z-speedz/4f));
(124.6f, 0, 0)
→(125, 0, 0)
(124.4f, 0, 0)
→(125, 0, 0)