U3D保存物体位置信息,读取物体位置信息

本文介绍了一个Unity脚本,该脚本能够将场景中指定对象的位置信息保存到本地文件,并能从文件中读取这些信息重新设置对象位置。通过使用FileStream和StreamReader等API,实现了对象位置数据的持久化存储。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO.Ports;
using System.Threading;
using System.IO;
using System;
using System.Text;
using UnityEngine.UI;

public class pos : MonoBehaviour {
    public Transform[] obj;
    private Vector3 o1;
    private Vector3 o2;
    private Vector3 o3;
    private Vector3 o4;

    
    // Use this for initialization
    void Start () {
        // WriteFileByLine("E:\\", "my_newfile1.txt", "");
        Screen.SetResolution(1920,1080,true);
        if (File.Exists("D:\\my_newfile1.txt"))
            Read("D:\\my_newfile1.txt");
    }
	
	// Update is called once per frame
	void Update () {
        o1 = obj[0].position;
       
        o2 = obj[1].position;
        
        o3 = obj[2].position;
        
        o4 = obj[3].position;
        
    }
    public void WriteFileByLine(string file_path, string file_name, string str_info)
    {
        StreamWriter sw;
        if (!File.Exists(file_path + "//" + file_name))
        {
            sw = File.CreateText(file_path + "//" + file_name);//创建一个用于写入 UTF-8 编码的文本
            Debug.Log("文件创建成功!");
        }
        else
        {
              sw = File.AppendText(file_path + "//" + file_name);//打开现有 UTF-8 编码文本文件以进行读取
            // Debug.Log(sw.);
           
        }
        sw.WriteLine("1"+":"+str_info);//以行为单位写入字符串
        sw.Close();
        sw.Dispose();//文件流释放
    }
    public void save()
    {
        WriteFileByLine("D:\\", "my_newfile1.txt", o1.ToString());
        WriteFileByLine("D:\\", "my_newfile1.txt", o2.ToString());
        WriteFileByLine("D:\\", "my_newfile1.txt", o3.ToString());
        WriteFileByLine("D:\\", "my_newfile1.txt", o4.ToString());
    }
    private void Read(string path)
    {
        StreamReader sr = new StreamReader(path, Encoding.Default);
        string line;

        for (int i = 0; i < 4; i++)
        {
            line = sr.ReadLine();
            //Debug.Log(line + "line");
            string[] s = line.Split(':');
            switch (i)
            {
                case 0:
                    obj[0].position = Parse(s[1]);
                    //Debug.Log(s[1] + "s[1]");
                    break;
                case 1:
                    obj[1].position = Parse(s[1]);
                    break;
                case 2:
                    obj[2].position = Parse(s[1]);
                    //Debug.Log(s[1] + "s[2]");
                    break;
                case 3:
                    obj[3].position = Parse(s[1]);
                    //Debug.Log(s[1] + "s[2]");
                    break;
            }
        }
    }

    public static Vector3 Parse(string s)
    {
        s = s.Replace("(", "").Replace(")", "");
        string[] name = s.Split(',');
        return new Vector3(float.Parse(name[0]), float.Parse(name[1]), float.Parse(name[2]));
    }
}

 

### 关于 Unity 3D 模型创建、导入和使用的教程与资源 #### 工具与资源概述 对于需要展示3D模型支持拆装动画的项目,可以利用已有的开源资源来加速开发进程。例如,有一个名为“Unity 3D模型展示与拆装动画”的资源提供了完整的工程模板[^1]。此资源不仅能够用于静态模型展示,还具备动态交互功能,如绕物相机控制、步骤化操作指引等。 #### 模型导入流程 在实际开发中,如果需要从外部引入3D模型,则需了解不同建模软件的支持情况及其导出格式。Unity 支持多种主流3D建模工具生成的内容,推荐使用 `.fbx` 文件作为中间媒介[^2]。以下是几个常见的兼容工具: - **Autodesk Maya**: 商业级解决方案,适合复杂工业设计。 - **Blender**: 开源免费选项,广泛应用于独立开发者社区。 - **Modo 和 Cheetah3D**: 提供特定领域优化的功能集。 #### 自建 vs 导入模型的选择依据 当决定采用哪种方式获取所需资产时,应考虑项目的具体需求和技术背景。通过对比分析可知,内部构建允许更精细调整参数设置;而外部加载则可能带来更高的效率特别是在时间紧迫情况下[^3]: | 特性 | 内部自建 | 外部导入 | |--------------------|-----------------------------|---------------------------| | 制作周期 | 较长 | 更短 | | 定制灵活性 | 高 | 中低 | | 性能表现 | 受限于引擎默认能力 | 或许更好取决于原生质量 | #### 示例代码片段:简单读取FBX文件到场景 下面给出一段基础脚本来演示如何程序化地载入外部 FBX 格式的物体实例至当前活动的游戏对象层次结构下。 ```csharp using UnityEngine; public class ModelLoader : MonoBehaviour { public string pathToModel; // e.g., "Assets/Models/my_model.fbx" void Start() { GameObject modelInstance = Instantiate(Resources.Load<GameObject>(pathToModel)); if (modelInstance != null){ modelInstance.transform.position = Vector3.zero; }else{ Debug.LogError("Failed to load the specified model."); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值