问题描述
我想以编程方式修改附加到我的“损坏弹出”游戏对象的矩形变换组件的缩放参数(特别是 x 缩放),如附图所示;但是,我似乎无法修改此值。我尝试了几种方法(如下所示的代码),但似乎没有任何效果。
非常感谢任何帮助或指导!
Unity中的Rect Transform组件(图片):
Vector3 rectScale;
RectTransform rectTransform;
float xScale;
// Start is called before the first frame update
void Start()
{
rectTransform = GetComponent<RectTransform>();
rectScale = rectTransform.localScale;
rectScale = new Vector3(3f,transform.localScale.y,transform.localScale.z); //this doesn't work
xScale = rectTransform.localScale.x;
xScale = *any number*; // this doesn't work
}
void Update()
{
rectScale = new Vector3(3f,transform.localScale.z); //this doesn't work
xScale = *any number* //this doesn't work
}
解决方法
这里的问题似乎更像是对 c# 一般工作方式的误解!
xScale = 3f;
为字段 xScale
分配一个新值。它以前的任何价值现在都被遗忘了,现在是 3f
。与
rectScale = new Vector3(3f,transform.localScale.y,transform.localScale.z);
为字段 rectScale
分配一个新值。它之前的任何向量值都被遗忘了,现在它的值是 (3f,transform.localScale.z)
两者都不会改变 rectTransform.localScale
或 rectTransform.localScale.x
的值!
您宁愿为 rectTransform.localScale
分配一个新值,例如
recTransform.localScale = new Vevtor3 (3f,rectTransform.localScale.y,rectTransform.localScale.z);
或者在不多次访问同一属性的情况下更高效
var scale = rectTransform.localScale;
scale.x = 3f;
recTransform.localScale = scale;
顺便说一句,专门针对 RectTransform
,您可能更愿意使用 sizeDelta
来缩放实际的 rect
。使用 localScale
会导致内容和任何子项看起来拉伸!
var scale = rectTransform.sizeDelta:
scale.x = 3f;
recTransform.sizeDelta = scale;