Unity学习笔记--自定义文件的处理:Scripted Importers的简单使用

前言

我们知道,当我们把一些Unity支持的一些特定后缀名资源导入到UnityProject中时,点击这个资源,查看Inspector窗口,我们可以修改这个资源的一些属性。

比如我导入了一张图片,在Project窗口点击这个图片,再点击Inspector窗口,就可以看到这些属性。
在这里插入图片描述
但是需要注的是:Unity只会对特定的资源做一些处理。
在这里插入图片描述
那如果是Unity没有进行处理的资源呢,比如后缀名为 .abc.lua。这个时候我们还是想针对于某一个自定义资源做处理该怎么办呢?
这个时候就需要我们的Scripted Importers了。

Scripted Importers基本介绍

让我们来看看Unity官方给我们的介绍。
在这里插入图片描述
简单来说就是Unity不支持的文件,我们可以使用Scripted Importers来解决。

应用实例

假设我们现在有一个后缀名为 .cppp的文件(绝对不是仿照 .cpp!),然后我们想导入到Unity中,对这个资源做一些配置,但是Unity并没有支持 .cppp文件,那么我们就不能直接修改它的值了。这个时候就需要用到Scripted Importers了。

第一步

首先我们在Assets文件夹下新建一个Scripts文件夹,然后再Scripts文件夹下新建一个Editor文件夹。在Editor下面新建一个C# 脚本,类一定要继承ScriptedImporter!!!

using UnityEngine;
using UnityEditor.AssetImporters;
using System.IO;

//如果导入是.cppp文件
[ScriptedImporter(1, ".cppp")]
public class CpppScriptImporter : ScriptedImporter
{
    //AssetImportContext其实就是上下文,具体可以看官方文档
    public override void OnImportAsset(AssetImportContext ctx)
    {
        Debug.Log(".cppp OnImportAsset");
        string cpppTxt = File.ReadAllText(ctx.assetPath);//获取导入资源的路径,并且通过File读取所有的Text
        var assetText = new TextAsset(cpppTxt);//生成一个TextAsset对象
        var material = new Material(Shader.Find("Standard"));//生成一个Material对象(不要问我.cppp为什么有材质,因为这是测试用的!)
        material.color = Color.red;//定义材质的颜色
        ctx.AddObjectToAsset("assetText", assetText);//加入到Asset中(可以显示在Inspector窗口中)
        ctx.AddObjectToAsset("material", material);//同理

        ctx.SetMainObject(assetText);//设置主对象,下方会解释这个方法
    }
}

第二步

新建一个文件,修改后缀名为 .cppp,然后导入到Unity中。

效果

我们发现这个文件可以在Inspector窗口查看了,并且在Console窗口打印了。(你可以把上述代码先注释,看看有没有什么不一样)
在这里插入图片描述
在这里插入图片描述

关于ctx.SetMainObject()

多说无用,直接上不同代码,再看不同效果就很显然了。
基于上述代码。
如果是

ctx.SetMainObject(assetText);

效果是这样的
在这里插入图片描述
如果改成

ctx.SetMainObject(material);

就变成这样了
在这里插入图片描述
我相信你现在应该明白这个方法的意思了。

更多使用方法

更多的使用方法可以参考Unity的官方文档。
官方文档

项目地址

项目地址

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: #提问者没有完整的问题,无法给出全面的回答,请完善问题# 如果您要问的是如何使用Python和Unity进行Socket通信,那么我可以为您提供一些信息。Socket通信是指通过网络连接在不同的计算机上进行数据传输的过程。Python和Unity可以通过Socket协议实现实时的数据传输和通信。 对于Python和Unity之间的Socket通信,Python负责服务器端,Unity负责客户端。Python服务器将数据发送到Unity客户端,Unity客户端接收并解析数据。最常用的Socket协议是TCP(Transmission Control Protocol)协议,它提供了单一的连接,并将数据包使用特殊的数据结构进行编码和解码。 在开始使用Python和Unity进行Socket通信之前,需要安装Python的Socket模块和Unity的网络功能模块。然后,需要编写Python服务器和Unity客户端的代码,实现数据的发送和接收。 Python Socket模块是Python用于网络编程的核心模块。它提供了内置的套接字对象,可用于创建和操作Socket。在此基础上,可以编写一个Python服务器端程序,并绑定到IP地址和端口上。 Unity客户端使用C#,其自带的网络功能模块可以用于发送和接收数据。在Unity中,需要创建网络Socket连接,并进行连接、发送和接收操作。 总的来说,Python和Unity之间的Socket通信需要使用TCP协议,并需要编写Python服务器和Unity客户端的代码,才能实现数据的实时传输和通信。在实际工程中,还需要考虑数据格式、安全性等问题。 ### 回答2: #Python-Unity-Socket通信:Unity (C#)的实现 Python-Unity-Socket通信可以让Python代码与Unity (C#)代码实现良好的互动。通过Socket通信,Python和Unity都可以发送和接收网络数据,实现各种场景和功能。 实现Python-Unity Socket通信的步骤如下: 1. 在Python中建立Socket服务器(Server),等待Unity连接 2. 在Unity中建立Socket客户端(Client),连接到Python Socket服务器 3. Python和Unity互相发送和接收数据 在Python中,建立Socket服务器的代码如下: ``` import socket host = '127.0.0.1' port = 8888 s = socket.socket() s.bind((host, port)) s.listen(1) conn, addr = s.accept() print("连接地址:" + str(addr)) while True: data = conn.recv(1024).decode() if not data: break print("接收数据:" + data) conn.sendall(data.encode()) conn.close() ``` 在Unity中,建立Socket客户端的代码如下: ``` using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Net.Sockets; using System.Net; using System; public class SocketClient : MonoBehaviour { public string host = "127.0.0.1"; public int port = 8888; private TcpClient client; // Use this for initialization void Start () { try { client = new TcpClient(); client.Connect(host, port); } catch (Exception e) { Debug.Log(e); } string message = "Hello Python"; byte[] data = System.Text.Encoding.UTF8.GetBytes(message); NetworkStream stream = client.GetStream(); stream.Write(data, 0, data.Length); data = new byte[1024]; string responseData = string.Empty; int bytes = stream.Read(data, 0, data.Length); responseData = System.Text.Encoding.UTF8.GetString(data, 0, bytes); Debug.Log("收到服务器消息:" + responseData); stream.Close(); client.Close(); } } ``` 以上代码实现了Unity向Python发送一条消息,并接收Python回传的消息。 Python和Unity之间还可以通过Socket发送和接收其他类型的数据,如音频、视频等。需要注意的是,Python和Unity发送和接收数据的格式需要保持一致,可以使用Json、Protobuf等数据格式来统一。 ### 回答3: # 应该题目描述不太准确,这里按照理解给出回答 python-unity-socket-communication,是指使用Python语言和Unity游戏引擎之间进行网络Socket通信。 具体实现中,需要在Unity中编写C#代码,通过Socket连接Python服务器,实现网络通信。 在Unity中,首先需要使用Socket创建一个客户端连接到Python服务器,并通过该连接向Python服务器发送请求和接收响应。同时,需要编写代码来解析Python服务器返回的数据,以便Unity游戏引擎正确地使用它们。 在Python服务器中,需要编写Socket服务器程序,以便监听来自Unity客户端的请求,并对其做出响应。在响应Unity客户端请求时,需要将Python语言中的数据格式转换为Unity游戏引擎所需的格式。 总之,Python-Unity-Socket通信是一种常用且强大的网络通信方式,可以帮助Unity游戏开发人员高效地与Python服务器进行通信,以实现更为复杂的游戏功能和应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就一枚小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值