Unity C# 2D 如何将UI Canvas按钮位置设置为与其他GameObject一致
错误原因
Bpos是你当前脚本内定义的私有变量,不属于Unity原生GameObject类的成员,你尝试访问button.Bpos时,编译器找不到对应属性,因此抛出CS1061错误。
修复方案
你已经提前将按钮的RectTransform组件赋值给了Bpos变量,直接修改Bpos的位置属性即可,参考修改后的代码:
// 存储按钮的RectTransform组件 private RectTransform Bpos; // 存储菜单框GameObject public GameObject menu; // 存储按钮GameObject public GameObject button; void Start() { // 提前获取按钮的RectTransform组件,避免后续重复获取损耗性能 Bpos = button.GetComponent<RectTransform>(); // 启动时先同步一次位置 SyncButtonToMenuPos(); } // 封装为独立方法,需要同步位置时直接调用即可 public void SyncButtonToMenuPos() { // 同步世界坐标可以直接赋值position Bpos.position = menu.transform.position; // 如果是同一画布下的UGUI元素,建议用anchoredPosition同步,位置更精准,替换上一行即可 // Bpos.anchoredPosition = menu.GetComponent<RectTransform>().anchoredPosition; }
注意事项
- 如果菜单和按钮都属于UGUI元素,且挂载在同一个Canvas下,优先使用
anchoredPosition做位置同步,避免因为锚点、 pivot设置不同导致的位置偏差 - 如果需要实时跟随框体移动,可在
Update生命周期方法中调用SyncButtonToMenuPos();如果不需要每帧同步,建议仅在菜单位置变动时手动调用,减少性能消耗
内容的提问来源于stack exchange,提问作者Shudaki
相关产品推荐
相关产品推荐

