Unity C#出现Cannot convert from double to float报错如何解决?
报错原因
C#语法规定不带后缀的小数字面量默认是double类型,而Unity的Vector3构造函数所有入参都要求为float类型。你代码中的1.29属于double类型,和同为float的target.position.y运算后结果仍为double,传入Vector3构造函数时就会触发隐式类型转换报错。
解决方法
直接给小数字面量添加f后缀,明确指定其为float类型即可,该操作不会损失你需要的数值精度,修改后的对应代码行如下:
Vector3 targetPosition = new Vector3(target.position.x, target.position.y + 1.29f, transform.position.z);
如果需要使用显式强转写法,效果完全一致:
Vector3 targetPosition = new Vector3(target.position.x, target.position.y + (float)1.29, transform.position.z);
补充说明
Unity引擎绝大多数API的数值参数都使用float类型,日常开发书写小数字面量时统一添加f后缀即可避免同类报错。同时float的精度对Unity游戏场景的坐标运算、位移计算等场景完全够用,不会出现精度损失问题。
修改后的完整代码示例:
public Transform target; public float smoothTime = 0.2f; private Vector3 _velocity = Vector3.zero; void LateUpdate() { Vector3 targetPosition = new Vector3( target.position.x, target.position.y + 1.29f , transform.position.z); transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref _velocity, smoothTime); }
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

