首页 > 解决方案 > 如何以编程方式更改 Unity 中 Rect Transform 组件的比例?

问题描述

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

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

Unity 中的 Rect Transform 组件(图片): 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.y, transform.localScale.z); //this doesn't work
    xScale = *any number* //this doesn't work
}

标签: c#unity3dtransformscalerect

解决方案


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

xScale = 3f; 

为字段分配一个新值xScale。它以前的任何价值现在都被遗忘了,现在已经被遗忘3f了。一样

rectScale = new Vector3(3f, transform.localScale.y, transform.localScale.z);

为字段分配一个新值rectScale。它之前的任何向量值都被遗忘了,现在它有了值(3f, transform.localScale.y, transform.localScale.z)

两者都不会改变rectTransform.localScaleor的值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;

推荐阅读