raycast matlab,关于如何在 Unity 的 UI 菜单中默认创建出的控件 Raycast Target 属性默认为 false...

最近发现通过反射来修改unity源代码很方便,记录学习下。

// Add by yaukey(https://github.com/yaukeywang) at 2017-10-11.

// Extend default ui menu.

using UnityEngine;

using UnityEngine.UI;

using UnityEditor;

using UnityEditor.UI;

using System.Collections;

using System.Collections.Generic;

using System;

using System.IO;

using System.Reflection;

[InitializeOnLoad]

static internal class UIMenuOptionsExtend

{

// The reflected dafault methods.

private static MethodInfo m_miGetDefaultResource = null;

private static MethodInfo m_miPlaceUIElementRoot = null;

static UIMenuOptionsExtend()

{

Initialize();

}

private static void Initialize()

{

// Get all loaded assemblies.

Assembly[] allAssemblies = AppDomain.CurrentDomain.GetAssemblies();

Assembly uiEditorAssembly = null;

foreach (Assembly assembly in allAssemblies)

{

AssemblyName assemblyName = assembly.GetName();

if ("UnityEditor.UI" == assemblyName.Name)

{

uiEditorAssembly = assembly;

break;

}

}

// Check if we find ui assembly.

if (null == uiEditorAssembly)

{

Debug.LogError("Can not find assembly: UnityEditor.UI.dll");

return;

}

// Get things we need.

Type menuOptionType = uiEditorAssembly.GetType("UnityEditor.UI.MenuOptions");

m_miGetDefaultResource = menuOptionType.GetMethod("GetStandardResources", BindingFlags.NonPublic | BindingFlags.Static);

m_miPlaceUIElementRoot = menuOptionType.GetMethod("PlaceUIElementRoot", BindingFlags.NonPublic | BindingFlags.Static);

}

[MenuItem("GameObject/UI/Text", false, 2000)]

static public void AddText(MenuCommand menuCommand)

{

GameObject go = DefaultControls.CreateText((DefaultControls.Resources)m_miGetDefaultResource.Invoke(null, null));

m_miPlaceUIElementRoot.Invoke(null, new object[] { go, menuCommand });

// Remove raycast target.

Text text = go.GetComponent();

text.raycastTarget = false;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值