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

关于C#构造函数的疑问:Unity中new Vector2(2,5)未赋值变量为何可用?

关于Unity中直接调用构造函数传递实例的解释

首先纠正你示例代码里的小错误:正确的Vector2实例化写法应该是Vector2 v2_values = new Vector2(1.0f, 2.0f);——调用构造函数时不需要写float x, float y,那是定义构造函数的语法,不是调用的方式。

你疑惑的new Vector2(2,5)其实是创建了一个临时匿名实例,它不需要赋值给变量就能使用,原因很简单:

  • rd2d.AddForce()方法需要接收一个Vector2类型的参数来指定力的方向和大小,我们不需要把这个Vector2实例保存下来供后续代码复用,所以没必要额外赋值给变量。
  • 直接在参数位置创建实例并传递,方法内部会直接接收并使用这个实例的数值;当方法执行完毕后,这个临时实例不再被任何代码引用,会被.NET的垃圾回收器自动清理。

这种写法在C#(包括Unity开发)里非常常见,类似的场景比如:

  • 给UI组件设置位置时写transform.position = new Vector3(0, 0, 0);
  • 调用Instantiate时直接传递新的位置参数Instantiate(prefab, new Vector3(1, 2, 3), Quaternion.identity);

回到你的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoverScript : MonoBehaviour
{
    void Start()
    {
        Rigidbody2D rd2d = GetComponent<Rigidbody2D>();
        rd2d.AddForce(new Vector2(2,5), ForceMode2D.Impulse);
    }
}

这里的new Vector2(2,5)就是一次性给AddForce方法传递所需的力参数,完全符合C#语法规则,是高效且简洁的写法。

内容的提问来源于stack exchange,提问作者Rohan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:40:36