c# - 如何以编程方式更改 Unity 中 Rect Transform 组件的比例?
问题描述
我想以编程方式修改附加到我的“损坏弹出”游戏对象的 Rect Transform 组件的 Scale 参数(特别是 x Scale),如附图所示;但是,我似乎无法修改这个值。我尝试了几种方法(代码如下所示),但似乎没有任何效果。
非常感谢任何帮助或指导!
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# 的一般工作方式的误解!
这
xScale = 3f;
为字段分配一个新值xScale
。它以前的任何价值现在都被遗忘了,现在已经被遗忘3f
了。一样
rectScale = new Vector3(3f, transform.localScale.y, transform.localScale.z);
为字段分配一个新值rectScale
。它之前的任何向量值都被遗忘了,现在它有了值(3f, transform.localScale.y, transform.localScale.z)
两者都不会改变rectTransform.localScale
or的值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;
推荐阅读
- javascript - Angular 8 - 使用 PublishReplay 缓存 HTTP 请求
- r - 使用 R 循环提取和过滤数据列
- javascript - react-redux 中的调度函数中非常奇怪的事情
- javascript - 在 Meteor js 中初始化和使用 Swup
- r - 如何截断R中的数据?
- android - 使用流(While)控件在kotlin中大于或等于7和更少的音符问题
- html - z-index 和带 alpha 的线性渐变
- html - HTML - 在 div 中包装 td
- python - 嵌套列表列出到新列
- scala - 如何在 Scala 的 JCommander 中使用数组