写在前面

  • 拼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; } }

【Unity】拖动图片生成对应Image的更多相关文章

  1. Unity UGUI实现鼠标拖动图片

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...

  2. thinkphp3.2与phpexcel带图片生成 完美案例

    thinkphp3.2与phpexcel完美案例 // 导出exl public function look_down(){ $id = I('get.id'); $m = M ('offer_goo ...

  3. phpcms v9图片生成缩略图变成黑色解决方法

    今天客户反映,上传的图片生成缩略图有的图片变成黑色,出现问题就百度了一下,有不少网友也遇到这样的问题,但是官方论坛也没有给出解决办法,那还得靠自己解决了,于是就研究phpcms v9 图片压缩代码.打 ...

  4. 验证码图片生成工具类——Captcha.java

    验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. 源码如下:(点击下载  Captcha.java) import java. ...

  5. CSS3鼠标移入移出图片生成随机动画

    今天分享使用html+css3+少量jquery实现鼠标移入移出图片生成随机动画,我们先看最终效果图(截图为静态效果,做出来可是动态的哟) 左右旋转 上下移动 缩放 由于时间关系我就不一步步解析各段代 ...

  6. Unity 截取图片并且显示出来

    Unity 截取图片并且显示出来 近期用到了unity的截图,并且把他显示出来,摸索了很多! 讲解一个东西,android可以存储一些文件在本地,比如配置文件等! 对于不同的系统,方法不一! if ( ...

  7. Android BaseAdapter Gallery 画廊视图 (左右拖动图片列表拖至中间时图片放大显示)

    画廊视图使用Gallery表示,能够按水平方向显示内容,并且可以手指直接拖动图片和移动,一般用来浏览图片,,被选中的选项位于中间,并且可以响应事件显示信息.在使用画廊视图时,首先在屏幕上添加Galle ...

  8. Android长方形图片生成正圆形,以及矩形图片生成圆角

    一般要做正圆形图片,只能是正方形的基础上才能实现,否则就变成椭圆了,下面说说如何使长方形的图片生成正圆形图片 废话不多说,没图没真相,先上图吧: 原图:  变成正圆后:  下面上代码: public ...

  9. java 图片生成缩略图后,转化成流

    功能:图片生成缩略图后,转化成流 public class ImageUtils { /** * * @param in1 * 文件流 * @param uploadFileName * 文件名称 * ...

  10. js 选择图片生成base64数据

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...

随机推荐

  1. SQL in查询字段为Guid拼接处理办法

    场景一:在我们写SQL脚本执行普通的Id 为Int,Long 类型查询为 譬如: select *from Table where id in (1,2,3); 场景二:SQL in 查询,当查询字段 ...

  2. Sup, inf convolution for convex functions

    Let $\Omega$ be a bounded convex domain in $\mathbb{R}^n$. $f:\Omega\rightarrow\mathbb{R}^n$. If $f$ ...

  3. Flutter中的路由 路由替换 返回到根路由

    一.Flutter 中返回到上一级页面 Navigator.of(context).pop(); 二.Flutter 中替换路由 比如我们从用户中心页面跳转到了 registerFirst 页面,然后 ...

  4. Ubuntu16.04系统语言设置为中文以及搜狗输入法的安装

    特别声明:本文是在操作完才做的记录,不是特别详细,见谅哈! 虚拟机安装的Ubuntu16.04结果语言设置只有英文...起初没啥影响,后来发现自己的脚本注释显示全乱码,而且直接影响脚本运行(其实可能是 ...

  5. Kettle初使用

    Kettle的使用还是比较简单,但使用过程中会遇到一些问题: 1.mysql8以上版本连接数据库的时候汇报如下错误: 解决方法:参考链接:https://www.cnblogs.com/wuzaipe ...

  6. linux改变用户属主

    将test文件的属主改为root:sudo chown root test 改变所在组:sudo chgrp root test 同时改变属主和所在组:sudo chown root.root tes ...

  7. Django 之 Form

    forms组件 1. 校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(ma ...

  8. TypeScript - 构造函数 constructor

    class Dog { // 需要先定义,才能在constructor中this指向 name: string; age: number; // 构造函数,会在对象创建时调用 // new Dog() ...

  9. Docker学习——Docker 三剑客(七)

    Docker Compose 简介 Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责arg>...] [options] [COMMAND] ...

  10. C#之List、Queue、Stack使用EnsureCapacity方法预设数组大小

    简介 List.Queue 和 Stack 集合中的 EnsureCapacity方法预设数组大小. 为什么以及何时使用EnsureCapacity 方法 这里我们将首先了解为什么需要使用这种方法以及 ...