如何以编程方式更改 Unity 中矩形变换组件的比例?

-1 c# transform rect scale unity-game-engine

我想以编程方式修改附加到“损坏弹出”游戏对象的矩形变换组件的“缩放”参数(特别是 x 缩放),如附图所示;但是,我似乎无法修改这个值。我尝试了几种方法(代码如下所示),但似乎没有任何效果。

非常感谢任何帮助或指导!

Unity中的矩形变换组件(图像): Unity中的矩形变换组件(图片)

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.y, transform.localScale.z); //this doesn't work
    xScale = *any number* //this doesn't work
}
Run Code Online (Sandbox Code Playgroud)

der*_*ugo 11

这里的问题似乎更多的是对 C# 一般工作方式的误解!

xScale = 3f; 
Run Code Online (Sandbox Code Playgroud)

为该字段分配一个新值xScale。无论它以前有什么价值,现在都被遗忘了,而且3f现在也被遗忘了。与

rectScale = new Vector3(3f, transform.localScale.y, transform.localScale.z);
Run Code Online (Sandbox Code Playgroud)

为该字段分配一个新值rectScale。无论它以前拥有什么向量值,它都会被忘记,现在它具有该值(3f, transform.localScale.y, transform.localScale.z)

rectTransform.localScale两者都不会改变or的值rectTransform.localScale.x

您宁愿为rectTransform.localScalelike 分配一个新值,例如

recTransform.localScale = new Vevtor3 (3f, rectTransform.localScale.y, rectTransform.localScale.z);
Run Code Online (Sandbox Code Playgroud)

或者更高效,无需多次访问同一属性

var scale = rectTransform.localScale;
scale.x = 3f;
recTransform.localScale = scale;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,专门针对RectTransform您可能更想使用sizeDelta实际缩放比例的rect. 使用localScale会导致内容和任何孩子看起来很拉长

var scale = rectTransform.sizeDelta:
scale.x = 3f;
recTransform.sizeDelta = scale;
Run Code Online (Sandbox Code Playgroud)