You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:27:03