Unity 运行状态下动态保存 预制体/预制体上脚本参数
Posted 一梭键盘任平生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 运行状态下动态保存 预制体/预制体上脚本参数相关的知识,希望对你有一定的参考价值。
前言:在Unity游戏制作过程中为了方便策划调试保存 通常会让策划可以在游戏运行时直接保存调整好的预制体
在此背景下,出现了以下代码:
一.运行状态下动态保存预制体
代码:
public class ChangePrefabs : MonoBehaviour
public bool Save = false;
public string Name;
private string path;
void Start()
Name = this.gameObject.name;
path = string.Format("Assets/Model/0", Name.Replace("(Clone)", "")) ;
void Update()
if(Save)
Save = false;
PrefabUtility.SaveAsPrefabAsset(this.gameObject, path);
程序运行中修改预制体的上部球体的材质,然后点击Save,停止运行后 可以看到工程里的预制体也同样被改变了
1.把脚本挂在预制体上
2.修改预制体上部球体的材质
修改前:
修改后:
点击Save
3.停止运行后,工程中的预制体 上部球体变成了工程中修改的材质
二.运行状态下动态保存预制体上的脚本参数
代码:
public class ChangePrefabScript : MonoBehaviour
public bool Save = false;
public string path;
public string canChange;
GameObject player;
void Start()
player = Addressables.LoadAssetAsync<GameObject>(path).Result;
// Update is called once per frame
void Update()
if(Save)
Save = false;
SerializedObject thisScript = new SerializedObject(this);
if(player != null)
var oldChangePrefabScript = player.GetComponent<ChangePrefabScript>();
SerializedObject oldScript = new SerializedObject(oldChangePrefabScript);
SerializedProperty serializedProperty = thisScript.FindProperty("canChange");
oldScript.CopyFromSerializedProperty(serializedProperty);
oldScript.ApplyModifiedProperties();
程序运行中修改预制体上的脚本中的CanChange中的内容,然后点击Save,停止运行后 可以看到工程里的预制体上的脚本中的Can Change内容随之改变了
1.把脚本挂在预制体上
2.程序运行时改变Can Change的值 然后点击Save
3.程序停止运行后,找到预制体上的相应脚本查看 Can Change值已经变成修改值
获取某个Unity工程中的所有预制体
参考技术A 在不同的平台上该路径是不同的:在编辑器模式下是Assets目录,即:<path to projectfolder>/Assetsstring path:即游戏数据所在目录
string searchPattern:因要找的是prefab,因此是*.prefab
System.IO.SearchOption searchOption:因要找目录下所有的prefab,包括子孙目录,因此使用AllDirectories(若不在子孙目录中搜索则使用TopDirectoryOnly)
路径从Assets开始,因此移除前面获取到的路径中包含的游戏数据所在目录的部分,但这样就移除了“Assets”,因此再在开头将其加回
将路径中的“\”替换为“/”
因获取所有预制体可能需要较长的时间,因此用进度条显示当前执行进度
移除进度条显示:EditorUtility.ClearProgressBar()
以上是关于Unity 运行状态下动态保存 预制体/预制体上脚本参数的主要内容,如果未能解决你的问题,请参考以下文章