2024-06-07 Unity 编辑器开发之编辑器拓展8 —— Scene 窗口拓展

文章目录

  • 1 Handles 类
    • 1.1 Scene 响应函数
    • 1.2 自定义窗口中监听 Scene
    • 1.3 Handles 常用 API
      • 2.2.1 颜色控制
      • 2.2.2 文本
      • 2.2.3 线段
      • 2.2.4 虚线
      • 2.2.5 圆弧
      • 2.2.6 圆
      • 2.2.7 立方体
      • 2.2.8 几何体
      • 2.2.9 移动、旋转、缩放
      • 2.2.10 自由移动 / 旋转
  • 2 Scene 窗口中显示 GUI
  • 3 HandleUtility
  • 4 Gizmos
    • 4.1 Gizmos 响应函数
    • 4.2 常用 API
      • 4.2.1 颜色控制
      • 4.2.2 立方体
      • 4.2.3 视锥
      • 4.2.4 贴图
      • 4.2.5 图标
      • 4.2.6 线段
      • 4.2.7 网格
      • 4.2.8 射线
      • 4.2.9 球体
      • 4.2.10 网格线

1 Handles 类

​ Handles 类提供在 Scene 窗口中绘制的自定义内容,和 GUI、EditorGUI 类似,但专门提供给 Scene 窗口使用。

​ 要在 Scene 窗口中显示自定义内容,可大致分为 3 步。其中,前两个步骤和自定义 Inspector 窗口显示内容一致。

1.1 Scene 响应函数

  1. 单独为某一个脚本实现一个自定义脚本,并且脚本需要继承 Editor。
    一般该脚本命名为:“自定义脚本名 + Editor”。

  2. 在该脚本前加上特性。

    • 命名空间:UnityEditor
    • 特性名:CustomEditor(想要自定义脚本类名的 Type)
  3. 在该脚本中实现 void OnSceneGUI() 方法。
    该方法会在我们选中挂载自定义脚本的对象时自动更新。
    **注意:**只有选中时才会执行,没有选中不执行。

using UnityEditor;
using UnityEngine;[CustomEditor(typeof(Lesson26))]
public class Lesson26Editor : Editor
{private Lesson26 _obj;private void OnEnable() {_obj = target as Lesson26;}private void OnSceneGUI() {Debug.Log("OnSceneGUI");}
}

target:获取到拓展的组件对象(Editor 基类中的成员)。

​ 在场景中创建空物体 Lesson26,并将 “Lesson26.cs” 脚本挂在该物体上。选中该物体后,将鼠标拖动至 Scene 窗口内,便会打印信息 “OnSceneGUI”。

image-20240607152207007

1.2 自定义窗口中监听 Scene

​ 通过添加监听事件,使自定义窗口能够监听 Scene 窗口的变化。

using UnityEditor;
using UnityEngine;public class Lesson26Window : EditorWindow
{[MenuItem("Unity 编辑器拓展/Lesson26/打开 Scene 拓展窗口")]public static void OpenLesson26() {Lesson26Window win = GetWindow<Lesson26Window>();win.Show();}private void OnEnable() {SceneView.duringSceneGui += SceneUpdate;}private void OnDisable() {SceneView.duringSceneGui -= SceneUpdate;}private void SceneUpdate(SceneView view) {Debug.Log("SceneUpdate");}
}

1.3 Handles 常用 API

2.2.1 颜色控制

​ 在调用 Handles 中的绘制 API 之前设置颜色即可。

Handles.color = Color.red;

2.2.2 文本

​ 文本控件的颜色不受 Handles.color 影响,而是通过 GUIStyle 控制。

public static void Label(Vector3 position, string text);
public static void Label(Vector3 position, Texture image);
public static void Label(Vector3 position, GUIContent content);
public static void Label(Vector3 position, string text, GUIStyle style);
public static void Label(Vector3 position, GUIContent content, GUIStyle style);

​ 示例:

image-20240607153917272
private void OnSceneGUI() {var trans = _obj.transform;Handles.Label(trans.position, "Hello World");
}

2.2.3 线段

​ 注意,DrawLines 提供的 Vector3[] 元素个数必须为偶数,因为是成对划线。

public static void DrawLine(Vector3 p1, Vector3 p2);
public static void DrawLine(Vector3 p1, Vector3 p2, [DefaultValue("0.0f")] float thickness);public static void DrawLines(Vector3[] lineSegments);
public static void DrawLines(Vector3[] points, int[] segmentIndices);

​ 示例:

image-20240607155313175
private void OnSceneGUI() {var trans = _obj.transform;Handles.color = Color.red;Handles.DrawLine(trans.position, trans.position + trans.forward * 5f, 1f);Handles.color = Color.blue;Handles.DrawLines(new[] {trans.position,trans.position + trans.right,trans.position + trans.right + trans.forward,trans.position + trans.forward});
}

2.2.4 虚线

public static void DrawDottedLine(Vector3 p1, Vector3 p2, float screenSpaceSize);public static void DrawDottedLines(Vector3[] lineSegments, float screenSpaceSize);
public static void DrawDottedLines(Vector3[] points, int[] segmentIndices, float screenSpaceSize)

​ 示例:

image-20240607155705001
private void OnSceneGUI() {var trans = _obj.transform;Handles.color = Color.red;Handles.DrawDottedLine(trans.position, trans.position + trans.forward * 5f, 1f);Handles.color = Color.blue;Handles.DrawDottedLines(new[] {trans.position,trans.position + trans.right,trans.position + trans.right + trans.forward,trans.position + trans.forward}, 1f);
}

2.2.5 圆弧

// 弧线
public static void DrawWireArc(Vector3 center,Vector3 normal,Vector3 from,float angle,float radius);
public static void DrawWireArc(Vector3 center,Vector3 normal,Vector3 from,float angle,float radius,[DefaultValue("0.0f")] float thickness);// 实心圆弧
public static void DrawSolidDisc(Vector3 center, Vector3 normal, float radius);
public static void DrawSolidArc(Vector3 center,Vector3 normal,Vector3 from,float angle,float radius);

​ 示例:

image-20240607160007683
private void OnSceneGUI() {var trans = _obj.transform;Handles.color = Color.red;Handles.DrawWireArc(trans.position, trans.up, trans.forward, 30, 3f);Handles.color = Color.blue;Handles.DrawSolidArc(trans.position, trans.up, trans.forward, 30, 2f);
}

2.2.6 圆

// 圆(无填充)
public static void DrawWireDisc(Vector3 center, Vector3 normal, float radius);
public static void DrawWireDisc(Vector3 center, Vector3 normal, float radius, [DefaultValue("0.0f")] float thickness);// 圆(填充)
public static void DrawSolidDisc(Vector3 center, Vector3 normal, float radius);

​ 示例:

image-20240607160501746
private void OnSceneGUI() {var trans = _obj.transform;Handles.color = Color.red;Handles.DrawWireDisc(trans.position, trans.up, 3f);Handles.color = Color.blue;Handles.DrawSolidDisc(trans.position, trans.up, 2f);
}

2.2.7 立方体

public static void DrawWireCube(Vector3 center, Vector3 size);

​ 示例:

image-20240607160751296
private void OnSceneGUI() {var trans = _obj.transform;Handles.color = Color.red;Handles.DrawWireCube(trans.position, Vector3.one * 2f);
}

2.2.8 几何体

// 方法名中的 AA 表示抗锯齿
public static void DrawAAConvexPolygon(params Vector3[] points);

​ 示例:

image-20240607161541195
private void OnSceneGUI() {var trans = _obj.transform;Handles.color = Color.red;Handles.DrawAAConvexPolygon(trans.position, trans.position + Vector3.forward,trans.position + Vector3.up,trans.position + Vector3.right);
}

2.2.9 移动、旋转、缩放

​ 作用是在 Scene 窗口中一直显示控制柄,而不需要点击对应的按钮才能显示。

// 绘制移动控制柄
// position:控制柄的位置
// rotation:控制柄的旋转
public static Vector3 DoPositionHandle(Vector3 position, Quaternion rotation); // 老版本 API
public static Vector3 PositionHandle(Vector3 position, Quaternion rotation);   // 新版本 API
public static Vector3 PositionHandle(Handles.PositionHandleIds ids,Vector3 position,Quaternion rotation);// 绘制旋转控制柄
public static Quaternion DoRotationHandle(Quaternion rotation, Vector3 position);
public static Quaternion RotationHandle(Quaternion rotation, Vector3 position);
public static Quaternion RotationHandle(Handles.RotationHandleIds ids,Quaternion rotation,Vector3 position);// 绘制缩放控制柄
public static Vector3 DoScaleHandle(Vector3 scale,Vector3 position,Quaternion rotation,float size);
public static Vector3 ScaleHandle(Vector3 scale, Vector3 position, Quaternion rotation);
public static Vector3 ScaleHandle(Vector3 scale,Vector3 position,Quaternion rotation,float size);

​ 示例:可以看到,左侧选中的是手部按钮(上方第一个),但三个控制柄都一直在 Scene 窗口中显示。

image-20240607162652171
private void OnSceneGUI() {var trans = _obj.transform;trans.position   = Handles.PositionHandle(trans.position, trans.rotation);trans.rotation   = Handles.RotationHandle(trans.rotation, trans.position);trans.localScale = Handles.ScaleHandle(trans.localScale, trans.position, trans.rotation);
}

2.2.10 自由移动 / 旋转

// 自由移动
// snap:移动步进值(按住 ctrl 键时会按该单位移动)
// capFunction:渲染控制手柄的回调函数
public static Vector3 FreeMoveHandle(Vector3 position,float size,Vector3 snap,Handles.CapFunction capFunction);
public static Vector3 FreeMoveHandle(int controlID,Vector3 position,float size,Vector3 snap,Handles.CapFunction capFunction);// 自由旋转
public static Quaternion FreeRotateHandle(Quaternion rotation, Vector3 position, float size);
public static Quaternion FreeRotateHandle(int id,Quaternion rotation,Vector3 position,float size);

​ 渲染控制手柄的常用回调函数:

  • Handles.RectangleHandleCap:一个矩形形状的控制手柄,通常用于表示一个平面的控制面。
  • Handles.CircleHandleCap:一个圆形的控制手柄,通常用于表示一个球体的控制面。
  • Handles.ArrowHandleCap:一个箭头形状的控制手柄,通常用于表示方向。

​ 示例:

image-20240607163615813
private void OnSceneGUI() {var trans = _obj.transform;trans.position = Handles.FreeMoveHandle(trans.position,HandleUtility.GetHandleSize(trans.position),Vector3.one,Handles.RectangleHandleCap);trans.rotation = Handles.FreeRotateHandle(trans.rotation,Vector3.zero, HandleUtility.GetHandleSize(trans.position));
}

更多内容:https://docs.unity3d.com/ScriptReference/Handles.html

2 Scene 窗口中显示 GUI

​ 在 OnSceneGUI() 函数中直接写 GUI 控件即可,就像直接在 OnGUI() 函数中一样。

​ 唯一的区别是需要使用两行代码进行包裹:

private void OnSceneGUI() {Handles.BeginGUI();... // GUI 控件Handles.EndGUI();
}

  • SceneView.currentDrawingSceneView:获取当前 Scene 窗口信息。

    继承自 EditorWindow,因此通过 position 即可得到窗口的大小。

​ 示例:

image-20240607165143018
private void OnSceneGUI() {Handles.BeginGUI();var pos = SceneView.currentDrawingSceneView.position;GUILayout.BeginArea(new Rect(pos.width - 200, pos.height - 100, 200, 100));GUILayout.Label("Hello World");if (GUILayout.Button("Click Me")) {Debug.Log("Clicked");}GUILayout.EndArea();Handles.EndGUI();
}

3 HandleUtility

​ HandleUtility 是 Unity 中的一个工具类,用于处理场景中的编辑器句柄(Handles)以及其他一些与编辑器交互相关的功能。
​ HandleUtility 提供一系列静态方法,用于处理编辑器中的鼠标交互、坐标转换以及其他与 Handles 相关的功能。

  1. GetHandleSize()
public static float GetHandleSize(Vector3 position);

​ 获取在场景中给定位置的句柄的合适尺寸。

​ 通常用于根据场景中对象的距离来调整句柄的大小,以便在不同的缩放级别下保持合适的显示大小。

  1. WorldToGUIPoint()
public static Vector2 WorldToGUIPoint(Vector3 world);

​ 将世界坐标转换为 GUI 坐标。

​ 通常用于将场景中的某个点的位置转换为屏幕上的像素坐标,以便在 GUI 中绘制相关的信息。

  1. GUIPointToWorldRay()
public static Ray GUIPointToWorldRay(Vector2 position);

​ 将屏幕上的像素坐标转换为射线。

​ 通常用于从屏幕坐标中获取一条射线,用于检测场景中的物体或进行射线投射。

  1. DistanceToLine()
public static float DistanceToLine(Vector3 p1, Vector3 p2);

​ 计算场景中一条线段与鼠标光标的最短距离。

​ 可以用来制作悬停变色等功能。

  1. PickGameObject()
public static GameObject PickGameObject(Vector2 position, bool selectPrefabRoot);
public static GameObject PickGameObject(Vector2 position, out int materialIndex);
...

​ 在编辑器中进行对象的拾取。

​ 通常用于根据鼠标光标位置获取场景中的对象,以实现对象的选择或交互操作。

更多内容:https://docs.unity3d.com/ScriptReference/HandleUtility.html

4 Gizmos

​ Gizmos 和 Handles 一样,作用都是拓展 Scene 窗口。
​ Gizmos 专注于绘制辅助线、图标、形状等。
​ Handles 主要用来绘制编辑器控制手柄等。

4.1 Gizmos 响应函数

​ 在继承 MonoBehaviour 的脚本中实现以下函数,便可在其中使用 Gizmos 来进行图形图像的绘制。其执行类似生命周期函数,Unity 会自动执行。

  1. OnDrawGizmos()

    每帧调用,绘制的内容随时可以在 Scene 窗口中看见。

  2. OnDrawGizmosSelected()

    仅当脚本依附的 GameObject 被选中时才会每帧调用绘制相关内容。

​ 在场景中创建空物体 Lesson34,并将脚本 “Lesson34.cs” 挂在该物体上。

using UnityEngine;public class Lesson34 : MonoBehaviour
{private void OnDrawGizmos() { }private void OnDrawGizmosSelected() { }
}

4.2 常用 API

4.2.1 颜色控制

​ 在调用 Gizmos 中的绘制 API 之前设置颜色即可。

Gizmos.color = Color.red;

4.2.2 立方体

// 实心立方体
public static void DrawCube(Vector3 center, Vector3 size);// 空心立方体
public static void DrawWireCube(Vector3 center, Vector3 size);

​ 示例:

image-20240607171917409
private void OnDrawGizmosSelected() {Gizmos.color = Color.red;Gizmos.DrawCube(transform.position, Vector3.one);Gizmos.color = Color.blue;Gizmos.DrawWireCube(transform.position + transform.forward, Vector3.one);
}

4.2.3 视锥

public static void DrawFrustum(Vector3 center, // 绘制中心float fov,      // FOV(Field of View,视野)角度float maxRange, // 远裁切平面float minRange, // 近裁切平面float aspect);  // 屏幕长宽比

​ 示例:

image-20240607172633309
private void OnDrawGizmosSelected() {Gizmos.matrix = transform.localToWorldMatrix; // 改变绘制矩阵Gizmos.color = Color.red;Gizmos.DrawFrustum(transform.position, 30, 50, 0.5f, 1.7f);Gizmos.matrix = Matrix4x4.identity; // 还原绘制矩阵
}

4.2.4 贴图

public static void DrawGUITexture(Rect screenRect, Texture texture);
public static void DrawGUITexture(Rect screenRect, Texture texture, [DefaultValue("null")] Material mat);
...

​ 由于只能在 xy 平面内绘制,因此有很大的局限性,使用较少。

4.2.5 图标

​ 图标需要放置在固定文件夹 “Assets/Gizmos/” 下。

public static void DrawIcon(Vector3 center, string name);

​ 示例:准备一张图片,放在文件夹 “Assets/Gizmos/” 下,并开启 Scene 窗口中的 Gizmos 显示按钮。

image-20240607174602110
private void OnDrawGizmosSelected() {Gizmos.DrawIcon(transform.position, "icon-disc");
}

4.2.6 线段

// 绘制一条线段
public static void DrawLine(Vector3 from, Vector3 to);// 绘制多条线段,0-1,2-3,4-5,...,绘制点的个数需为偶数
public static unsafe void DrawLineList(ReadOnlySpan<Vector3> points);// 绘制多条线段,01-,1-2,2-3,...
public static unsafe void DrawLineStrip(ReadOnlySpan<Vector3> points, bool looped);

​ 示例:

image-20240607184356143
private void OnDrawGizmosSelected() {Gizmos.color = Color.red;Gizmos.DrawLine(transform.position, transform.position + transform.forward * 2f);var forward = Vector3.forward;var right = Vector3.right;var startPos = transform.position + Vector3.left;Gizmos.color = Color.blue;Gizmos.DrawLineList(new[] {startPos,startPos - right,startPos - right + forward,startPos + forward});startPos = transform.position + Vector3.right;Gizmos.color = Color.green;Gizmos.DrawLineStrip(new[] {startPos,startPos + right,startPos + right + forward,startPos + forward}, true);
}

4.2.7 网格

public static void DrawMesh(Mesh mesh);
public static void DrawMesh(Mesh mesh, Vector3 position);
public static void DrawMesh(Mesh mesh, Vector3 position, Quaternion rotation);
public static void DrawMesh(Mesh mesh, [DefaultValue("Vector3.zero")] Vector3 position, [DefaultValue("Quaternion.identity")] Quaternion rotation, [DefaultValue("Vector3.one")] Vector3 scale);
...

4.2.8 射线

public static void DrawRay(Ray r);
public static void DrawRay(Vector3 from, Vector3 direction);

​ 示例:

image-20240607185136047
private void OnDrawGizmosSelected() {Gizmos.color = Color.red;Gizmos.DrawRay(transform.position, transform.forward);
}

4.2.9 球体

// 实心球体
public static void DrawSphere(Vector3 center, float radius);// 空心球体(网格)
public static void DrawWireSphere(Vector3 center, float radius);

​ 效果不是很好。

​ 示例:

image-20240607185406489
private void OnDrawGizmosSelected() {Gizmos.color = Color.red;Gizmos.DrawSphere(transform.position, 2f);Gizmos.color = Color.blue;Gizmos.DrawWireSphere(transform.position, 3f);
}

4.2.10 网格线

public static void DrawWireMesh(Mesh mesh);
public static void DrawWireMesh(Mesh mesh, Vector3 position);
public static void DrawWireMesh(Mesh mesh, Vector3 position, Quaternion rotation);
...

更多内容:https://docs.unity3d.com/ScriptReference/Gizmos.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 将CSV文件转为PDF文件

CSV文件通常用于存储大量的数据&#xff0c;而PDF文件则是一种通用的文档格式&#xff0c;便于与他人共享和打印。将CSV文件转换成PDF文件可以帮助我们更好地管理和展示数据。本文将介绍如何通过Python编程将CSV文件导出为PDF文件。 Python Excel库安装及介绍 在 Python 中&am…

GIGE 协议摘录 —— GVSP 协议(三)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现&#xff08;一&#xff09; GIGE 协议摘录 —— GVCP 协议&#xff08;二&#xff09; GIGE 协议摘录 —— GVSP 协议&#xff08;三&#xff09; GIGE 协议摘录 —— 引导寄存器&#xff08;四&#xff09; GIGE 协议…

华为面经整理

文章目录 实习第一面准备提问相关算法相关 第一面结果提问环节 总结 实习 第一面准备 提问相关 操作系统有哪些功能 进程管理&#xff1a; 进程调度、进程同步和通信、多任务处理 内存管理&#xff1a; 内存分配、虚拟内存技术、内存保护 文件系统管理&#xff1a; 文件存储…

基础概念解析:SOCKS5代理究竟是什么?SOCKS5代理ip使用场景有哪些?

在当今数字化时代&#xff0c;网络安全和隐私保护已成为我们日常生活中不可忽视的问题。随着网络攻击手段的日益复杂&#xff0c;如何安全地访问互联网资源成为了一个亟待解决的问题。SOCKS5代理作为一种先进的网络协议&#xff0c;为我们提供了解决这一问题的有效方案。 本文…

活动预热丨在 AGI Playground 2024 遇见一群 RTE+AI 的 Builders

6 月 22、23 日&#xff0c;北京。 AGI Playground 2024&#xff0c;这个夏日最火热的 AGI 盛会。 王小川、杨植麟等 AGI 创业者悉数参加。 RTE 开发者社区的 builders 和 RTE Open Day 也将在现场&#xff01; 我们将为大家呈现两大板块&#xff1a; 01 实时开发挑战 Wor…

OpenCV-最小外接圆cv::minEnclosingCircle

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 函数原型 void minEnclosingCircle(InputArray points, Point2f& center, float& radius); 参数说明 InputArray类型的…

从openstack环境中将服务器镜像导出的简单办法

1 登录openstack的页面&#xff0c;找到计划导出的主机信息。 通过实例名称&#xff0c; IP地址&#xff0c;找到对应的记录。点击实例名称&#xff0c;进入详情页。 在这里主要可以知道&#xff0c;当前主机在服务器上的文件ID&#xff0c;可以按这个ID去找对应的目录。 还可…

Nvidia Jetson/Orin/算能 +FPGA+AI大算力边缘计算盒子:无人机自主飞行软件平台

案例简介 所主导开发的 Generalized Autonomy Aviation System (GAAS) 是为无人机以及城市空中交通 (UAM, Urban Air Mobility) 所设计的开源无人机自主飞行框架。通过 SLAM、路径规划和 Global Optimization Graph 等功能为无人机提供在无 GPS 与外部通信情况下的自主飞行功…

【经典设计】构建业务架构的3大视图

在软件设计过程中&#xff0c;架构设计、功能设计和数据设计是三个不同层次的设计工作。而业务架构是系统整体规划中重要的基础工作&#xff0c;通常用业务架构图来表达业务架构。 业务架构定义了企业的治理结构、业务能力、业务流程、业务数据。业务能力说明企业做什么&#x…

想不到,AI爆发的趋势下,我会这么快被AI替代...

大家好&#xff0c;我是向阳 AI横空出世后&#xff0c;不少行业受到了冲击。第一批因AI失业的人&#xff0c;也已经出现了&#xff01; 他们是游戏设计师、原画设计师、服装设计师……社交媒体上&#xff0c;不断能看到这样的新闻&#xff1a;引入AI后&#xff0c;某游戏公司…

<microros> 如何自定义uROS2数据类型

如何自定义数据类型 在microros中&#xff0c;我们可以看到&#xff0c;官方给我们提供了很多数据类型。 如果我们在实际使用的时候&#xff0c;这些类型无法满足我们的传输要求怎么办呢&#xff1f; 官方也提供了自定义数据类型的办法。 参考&#xff1a; https://github…

【活动通知 — 线上 Meetup】:ES|QL 及 B 站 Elasticsearch 平台实践 - 6 月 19 日

会议时间 2024年6月19日 19:00 — 21:00 参与方式 线上直播&#xff1a;Elastic 中国社区官方博客&#xff0c;elasticstack B 站号。链接请参考下面的报名地址。 活动议程 19:00-19:50 主题演讲&#xff1a;Elasticsearch 简单而高效的管道查询语言 - ES|QL 讲师&#xff…

想要提升地推效果吗?试试Xinstall数据查看功能,让您事半功倍!

在如今竞争激烈的移动互联网时代&#xff0c;地推作为一种直接有效的推广方式&#xff0c;受到了越来越多企业和品牌的青睐。然而&#xff0c;地推过程中产生的数据如何高效地收集、整理和分析&#xff0c;成为了摆在推广者面前的一大难题。Xinstall作为一款专业的App推广工具&…

AWS S3存储桶中如何下载文件

AWS S3存储桶中如何下载文件 1.单个下载 AWS S3 控制台提供了下载单个文件的功能&#xff0c;但是不支持直接在控制台中进行批量下载文件。您可以通过以下步骤在 AWS S3 控制台上下载单个文件&#xff1a;   1.1登录 AWS 管理控制台。   1.2转到 S3 服务页面。   1.3单击…

将web项目打包成electron桌面端教程(二)vue3+vite+ts

说明&#xff1a;我用的demo项目是vue3vitets&#xff0c;如果是vue2/cli就不用往下看啦&#xff0c;建议找找其他教程哦~下依赖npm下载不下来的&#xff0c;基本换成cnpm/pnpm/yarn就可以了 一、项目准备 1、自己新创建一个&#xff0c;这里就不过多赘述了 2、将需要打包成…

docker构建java项目镜像

资料参考 参考自黑马教程&#xff1a;10.Docker基础-自定义镜像_哔哩哔哩_bilibili 初步准备 打包好java项目jar包&#xff0c;和Dockerfile文件一起放到指定目录下&#xff0c;后续操作都是在该目录下操作&#xff0c; 我这边是&#xff1a;/usr/local/src/train-ticket/ …

【git】TortoiseGitPlink Fatal Error 解决方法

背景 使用 TortoiseGit报错&#xff1a; TortoiseGitPlink Fatal Error No supported authentication methods available (server sent: publickey) 解决方法 1、有很多是重置git的秘钥解决的 2、重置ssh工具

AI-知识库搭建(一)腾讯云向量数据库使用

一、AI知识库 将已知的问答知识&#xff0c;问题和答案转变成向量存储在向量数据库&#xff0c;在查找答案时&#xff0c;输入问题&#xff0c;将问题向量化&#xff0c;匹配向量库的问题&#xff0c;将向量相似度最高的问题筛选出来&#xff0c;将答案提交。 二、腾讯云向量数…

路由器设置桥接(作为网络扩展器)

下面提到的路由器都是家用路由器 一、原理图(使用交换模式&#xff0c;有线连接) 二、无线连接 &#xff08;副路由器的无线信号 连接 主路由器的无线信号&#xff09; 三、注意事项 1、路由器之前配置过怎么办&#xff1f; 长按重置键7秒&#xff0c;重置路由器 2.副路由…

python脚本打包为exe并在服务器上设置定时执行

python脚本打包为exe并在服务器上设置定时执行 1. Python脚本打包2. 将打包好的Python脚本放入服务器3. 在服务器上设置其定时执行 1. Python脚本打包 首先&#xff0c;下载pyinstaller 键盘winR打开终端&#xff0c;输入命令&#xff1a;pip install pyinstaller&#xff0c;…