You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:27:08