zoukankan      html  css  js  c++  java
  • 【Unity】拖动图片生成对应Image

    写在前面

    • 拼UI时会用到多个Image,一般操作是:①新建一个Image,②拖入Image用到的图片,③SetNativeSize,④关闭不必要的raycastTarget 。为了能尽快拼完UI,我写了个工具替我完成以上①②③步。因为原先Unity就有拖动图片到对象上自动生成对应Sprite的操作,这个工具覆盖了这个操作,现在拖动图片会生成对应Image,自动SetNativeSize,自动关闭raycastTarget
    • 本工具脚本名为CreateImage.cs,不一定要放在Editor文件夹下。

    完整代码

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEditor;
    using UnityEngine;
    using UnityEngine.UI;
    using Object = UnityEngine.Object;
    
    /// <summary>
    /// 从Project窗口拖动图片到Canvas下任意层级,自动生成对应Image
    /// 会覆盖原生成Sprite操作
    /// </summary>
    public class CreateImage
    {
        /// <summary>
        /// 总开关
        /// </summary>
        public static bool Switch = true;
    
        private static bool isTrigger = false;
    
        [InitializeOnLoadMethod]
        private static void Init()
        {
            if (!Switch)
            {
                return;
            }
            EditorApplication.projectWindowItemOnGUI += ProjectWindowItemOnGui;
            EditorApplication.hierarchyWindowChanged += HierarchyWindowChanged;
    
        }
    
        private static void ProjectWindowItemOnGui(string guid, Rect selectionRect)
        {
            if (!Switch)
            {
                return;
            }
            // 拖动图片出Project窗口时
            if (Event.current.type == EventType.DragPerform || Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragExited)
            {
                isTrigger = true;
            }
           
        }
    
        private static void HierarchyWindowChanged()
        {
            if (!Switch)
            {
                return;
            }
            if (!isTrigger)
            {
                return;
            }
            // 此时Unity会默认创建Sprite并定位到该GameObject上
            GameObject go = Selection.activeGameObject;
            if (go == null)
            {
                return;
            }
    SpriteRenderer spriteRenderer
    = go.GetComponent<SpriteRenderer>(); if (spriteRenderer == null) { return; } go.name = "Image"; RectTransform rt = go.AddComponent<RectTransform>(); rt.localPosition = Vector3.zero; rt.localScale = Vector3.one; Image image = go.AddComponent<Image>(); image.raycastTarget = false; image.sprite = spriteRenderer.sprite; Object.DestroyImmediate(spriteRenderer); image.SetNativeSize(); isTrigger = false; } }
  • 相关阅读:
    WSDL2Java操作指南
    LVM 學習筆記 转载 
    TAR 的使用
    常用12种密码破解方法,一旦忘了密码可以补救,不要搞破坏
    ADAMS软件简介
    PPT演讲稿如何制作?
    window sp3第三方主题使用,改变主题,任务栏不变
    安装 Microsoft AppLocale 后出现的 Install Shield 安装界面乱码问题的解决办法
    K700C 港行的一般的设置,包括(GPRS上网设置,彩信设置,QQ设置等等)
    虚拟三维建模中的FSt格式文件介绍
  • 原文地址:https://www.cnblogs.com/caiger-blog/p/14720026.html
Copyright © 2011-2022 走看看