Unity中使用Ugui将一个UI的Component复制粘贴到另一个UI上的两种方法

第一种方法是使用Editor里的按钮

 

 

第二种是使用代码来实现这个过程

需要注意的是:将其按钮放在Hieracrchy下的右键扩展里时会像windows注册表右键扩展那样,你选择了几个obj就会执行几次 

你可以将按钮放在上方菜单栏里,这样就可以只会执行一次,或者你可以自行判断去把另外几个return

 

public class EditorHelper:EditorWindow{
    [MenuItem("GameObject/CopyPaste",false,-1)]
    public static void CopyPaste(){
       Uobj[] o = Selection.objects;
       if(o.Length == 2) {
            // 获取第一个物体的RectTransform
            RectTransform rtf1 = (o[0] as GameObject).GetComponent<RectTransform>();
            
            RectTransform rtf2 = (o[1] as GameObject).GetComponent<RectTransform>();

            //复制第一个组件
            UnityEditorInternal.ComponentUtility.CopyComponent(rtf1); 
            //粘贴到第二个组件中
            UnityEditorInternal.ComponentUtility.CopyComponent(rtf2); 
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity实现MVVM模式的UI系统,可以使用Unity自带的UI系统uGUI,并结合MVVM框架来实现。以下是一个简单的示例: 1. 创建一个View类,用于显示UI界面,包含需要绑定的UI元素。 ```csharp using UnityEngine; using UnityEngine.UI; public class ExampleView : MonoBehaviour { // 绑定的UI元素 public Text nameLabel; public Text descLabel; // 设置数据 public void SetData(ExampleData data) { nameLabel.text = data.name; descLabel.text = data.desc; } } ``` 2. 创建一个ViewModel类,用于处理UI界面的数据逻辑,包含需要绑定的数据属性和命令。 ```csharp using System.ComponentModel; using UnityEngine; using UnityEngine.UI; public class ExampleViewModel : INotifyPropertyChanged { // 数据属性 private string name; private string desc; public event PropertyChangedEventHandler PropertyChanged; public string Name { get { return name; } set { name = value; NotifyPropertyChanged(nameof(Name)); } } public string Desc { get { return desc; } set { desc = value; NotifyPropertyChanged(nameof(Desc)); } } // 命令 public RelayCommand SaveCommand { get; private set; } public ExampleViewModel() { // 初始化命令 SaveCommand = new RelayCommand(Save); } // 保存数据 private void Save() { // TODO: 保存数据逻辑 } // 通知属性变化 private void NotifyPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ``` 3. 创建一个继承自MonoBehaviour的绑定类,用于将View和ViewModel进行绑定,并处理UI元素和数据属性的更新。 ```csharp using UnityEngine; using UnityEngine.UI; public class ExampleBinding : MonoBehaviour { // 绑定的View和ViewModel public ExampleView view; public ExampleViewModel viewModel; private void Start() { // 绑定ViewModel的属性和View的UI元素 view.nameLabel.text = viewModel.Name; view.descLabel.text = viewModel.Desc; // 监听ViewModel的属性变化,更新UI元素 viewModel.PropertyChanged += (sender, args) => { switch (args.PropertyName) { case nameof(ExampleViewModel.Name): view.nameLabel.text = viewModel.Name; break; case nameof(ExampleViewModel.Desc): view.descLabel.text = viewModel.Desc; break; } }; } } ``` 4. 在Unity创建UI界面,将View和ViewModel绑定到UI元素上。 使用uGUI创建UI界面,并将ExampleView作为子对象添加到UI界面上。在ExampleBinding上将view和viewModel属性分别拖拽到uGUI上绑定的UI元素上。 5. 在代码使用ViewModel设置数据,并触发UI更新。 ```csharp public class ExampleController : MonoBehaviour { // 绑定类 public ExampleBinding binding; private void Start() { // 设置数据 binding.viewModel.Name = "Example"; binding.viewModel.Desc = "This is an example."; // 更新UI binding.view.SetData(new ExampleData(binding.viewModel.Name, binding.viewModel.Desc)); } } ``` 以上是一个简单的在Unity实现MVVM模式的UI系统的示例,通过绑定类将View和ViewModel进行绑定,并使用ViewModel处理UI界面的数据逻辑,实现了UI界面和数据的分离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值