关于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
相关产品推荐
相关产品推荐

