加载服务端发送的模型文件_unity开发进阶

前言

之前我们学习制作的都是离线状态下的东西,今天我们学习制作一个小demo。
内容就是我们用unity请求后台,接受后台发送过来的模型,然后将模型加载到场景中的指定位置上。

一、服务端搭建

既然有请求,那么就得有个服务端,这里我们先用node.js简易的搭建一个可以发送文件的服务,这里不要求很精良,能发送文件用来演示即可。用java、python后端搭建服务也是可以的。

🟠没有安装node的话直接去官网下载,下载完成之后一路傻瓜式安装即可,甚至环境在安装的时候都自动配好了。还是建议去网上搜一下教程,根据教程安装。

🟠node官网: https://nodejs.org/en

安装完成之后在控制台输入node -v出现版本号就表示安装好了,这里我的版本比较老旧,大家可以下载最新20的版本。
在这里插入图片描述

下面直接上node代码:

const http = require('http')
const fs = require('fs');
const server = http.createServer()

server.on('request',(req, res)=>{
    console.log(req.url,req.method);
    const filePath = './data/水车.FBX'; // 传输的文件路径

    fs.readFile(filePath, (err, data) => {
      if (err) {
        res.statusCode = 500;
        res.end('Error reading file');
      } else {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'application/octet-stream'); // 设置响应头,通知客户端下载文件
        const encodedFileName = encodeURIComponent('水车.FBX');
        res.setHeader('Content-Disposition', 'attachment; filename=' + encodedFileName);
        
        res.end(data);
      }
    });
})

server.listen(2000,()=>{
    //服务开启之后的回调函数
    console.log('服务已启动');
})

node代码编辑完成之后,在控制台输入node .\文件名.js然后回车,这里注意路径。
在这里插入图片描述
当出现服务已启动字样之后就可以了,然后可以在网页的地址栏输入http://127.0.0.1:2000/,然后回车,看是否有文件进行下载,如果有文件进行下载,那就没问题了,可以进行下一步了。

🟠这里的模型文件我用的是.fbx格式的文件,模型的文件大家可以去网上自行下载。

二、unity请求文件

服务端有了之后,我们需要在unity上编写脚本进行请求。在资源窗口创建一个Script文件夹,然后创建一个脚本文件http。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using System.IO;
using UnityEditor;

public class http : MonoBehaviour
{
    public void Getxxxx()
    {
    	// 启动协程,协程可以简单理解为等待某个事物完成之后再执行,类似vue中的异步async、await
    	// 具体可以查看阅读我的相关文章
        StartCoroutine(GetRequest("http://127.0.0.1:2000/"));
    }

	//协程方式请求函数
    IEnumerator GetRequest(string uri)
    {
        using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
        {
            // Request and wait for the desired page.
            yield return webRequest.SendWebRequest();

            //Debug.Log(webRequest.SendWebRequest());

            string[] pages = uri.Split('/');
            int page = pages.Length - 1;

            switch (webRequest.result)
            {
                case UnityWebRequest.Result.ConnectionError:
                case UnityWebRequest.Result.DataProcessingError:
                    Debug.LogError(pages[page] + ": Error: " + webRequest.error);
                    break;
                case UnityWebRequest.Result.ProtocolError:
                    Debug.LogError(pages[page] + ": HTTP Error: " + webRequest.error);
                    break;
                case UnityWebRequest.Result.Success:
                    // 保存文件到资源文件夹
                    string savePath = Path.Combine(Application.dataPath, "Fbx/水车.FBX");
                    File.WriteAllBytes(savePath, webRequest.downloadHandler.data);
                    //刷新资源文件
                    AssetDatabase.Refresh();
                    Debug.Log("文件加载完成");
                    // 在资源文件夹中使用文件
                    string modelPath = "Assets/Fbx/水车.fbx";
                    GameObject loadedPrefab = AssetDatabase.LoadAssetAtPath<GameObject>(modelPath);
                    if (loadedPrefab != null)
                    {
                        Vector3 position = new Vector3(0f, 0f, 0f); // 指定模型的位置
                        Quaternion rotation = Quaternion.identity; // 指定模型的旋转

                        GameObject instance = Instantiate(loadedPrefab, position, rotation);
                        
                    }
                    else
                    {
                        Debug.Log("无法加载模型");
                    }
                    break;
            }
        }
    }

}

在脚本挂载之前先创建一个UI,就只有一个button,创建过程就不再阐述了,直接看效果。
在这里插入图片描述

完成之后把脚本挂载到Canvas上,在子级的button中创建一个onClick()

  1. 先点击加号,在把Canvas挂载到对应位置。
    在这里插入图片描述
  2. 然后点击下拉框
    在这里插入图片描述
  3. 选择我们的http脚本,点击脚本中的Getxxxx()方法
    在这里插入图片描述
  4. 这样就完成了,然后运行试验即可。
    在这里插入图片描述
    最后还要创建一个Fbx的文件夹,用来保存服务端传过来的模型文件。
    在这里插入图片描述

三、加载模型

  1. 运行之前记得先开启node服务。
    在这里插入图片描述

  2. 然后点击运行
    在这里插入图片描述

  3. 点击加载模型按钮
    在这里插入图片描述

  4. 就可以看到,后台传过来的模型已经被我们接受并且加载到场景中了。
    在这里插入图片描述
    同时Fbx文件也保存了模型文件
    在这里插入图片描述

结语

demo的逻辑其实跟简单,大致可以分为:向服务端请求模型文件、保存模型、加载模型。

文章到这里就讲完了,哪里有没讲解清楚的,可以评论区或者私聊告诉我。下期见,拜拜!

请添加图片描述

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity脚本进阶可以指的是在使用Unity引擎编写脚本时,掌握更高级的技术和技巧,以实现更复杂的功能和优化游戏性能。 首先,进阶的一个关键点是深入理解Unity的生命周期和事件。理解Unity脚本的生命周期函数(如Start、Update、LateUpdate等)以及事件处理机制可以帮助我们更好地控制对象的行为和与其他对象的交互。 其次,进阶还包括熟悉Unity引擎的API和功能。掌握Unity提供的丰富API,比如处理输入、碰撞检测、物理引擎、动画控制等,能够更灵活地控制游戏对象的行为和状态。此外,了解Unity的功能模块,如UI系统、粒子系统、音频管理等,能够让我们更好地设计和实现游戏中的各种元素。 进阶还包括学习使用Unity的高级特性,如协程、委托、事件等。协程可以帮助我们实现复杂的异步逻辑和动画效果,委托和事件的使用则可以实现对象之间的解耦和监听。 另外,优化游戏性能也是进阶的重要内容。学习使用Unity的Profiler工具和内存管理技巧,可以帮助我们及时发现和解决性能瓶颈,提升游戏的帧率和响应速度。此外,合理使用对象池、批处理和资源管理等技术,也可以减少内存占用和加载时间,提升游戏的整体性能。 总之,Unity脚本进阶不仅仅是学习更多的技术和技巧,更重要的是理解并灵活运用这些知识,以实现更高效、更优秀的游戏体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿松爱睡觉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值