Unity 错误解决方案记录

问题1

问题描述

错误 CS8357 指定的版本字符串中包含与确定性不兼容的通配符。从版本字符串删除通配符,或者禁用此编译的确定性

解决方案

C#脚本中版本号中使用了通配符,如1.0.*与确定性不兼容,将通配符改成具体的版本号就可以。

问题2

问题描述

No cloud project ID was found by the Analytics SDK. This means Analytics events will not be sent. Please make sure to link your cloud project in the Unity editor to fix this problem.

解决方案:

在Unity的 Services菜单中找到配置,填写一些信息后就可以了,用现有的License创建一个project Id

问题3

问题描述

Deterministic compilation failed. You can disable Deterministic builds in Player Settings

解决方案

确定性编译失败。您可以在播放器设置中禁用确定性构建。Edit->Project Setting,左边找到Player,然后右边Other Setting,进度条拖动到最底部,Use deterministic compilation 取消勾选即可

问题4

问题描述

下载了一个可在Windows、Mac以及Android跑的demo,想更改下build设置跑起来看看下过,结果发现切换到Android平台是,右下方的build and run不可点击

解决方案

先点击switch platform,然后等切换编译完成后,build and run即可点击

问题5

问题描述

导入模型显示不对,过黑过于黯淡

解决方案

原因就是模型使用的Shader在Unity版本升级后被自动替换了,需要找到这个模型,然后找到合适的Shader进行替换,也可以用下面的脚本进行批量替换

Unity批量替换材质 Shader 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
public class ChangeShader : EditorWindow
{
[MenuItem("*Tool*/Change Shader")]
public static void ShowWindow()
{
EditorWindow editorWindow = GetWindow(typeof(ChangeShader));
editorWindow.autoRepaintOnSceneChange = false;
}

//当前shader
public Shader currentShader;
//目标shader
public Shader changeShader;
public HashSet<Material> mat = new HashSet<Material>();

private void OnGUI()
{
currentShader = EditorGUILayout.ObjectField("查找 shader", currentShader, typeof(Shader),false) as Shader;
changeShader = EditorGUILayout.ObjectField("替换 shader", changeShader, typeof(Shader), false) as Shader;
if (GUILayout.Button("Change"))
{
Change();
}

if (mat.Count > 0)
{
//界面中显示被替换的材质球
EditorGUILayout.LabelField("替换掉的材质:");
foreach (var material in mat)
{
if (material != null)
EditorGUILayout.ObjectField(material, typeof(Material), false);
}

if (GUILayout.Button("Clear"))
mat.Clear();
}
}

public void Change()
{
mat.Clear();
// 加载的路径需要加后缀名
if (currentShader == null || changeShader == null)
{
return;
}

var allfiles = Directory.GetFiles("Assets/", "*.mat", SearchOption.AllDirectories);
var length = allfiles.Length;
var count = 0;
for (var i = 0; i < length; i++)
{
var file = allfiles[i];
//显示替换进度
if (EditorUtility.DisplayCancelableProgressBar("Changing", file, i / (float) length))
{
break;
}
//根据地址读取材质球
Material tempMat = AssetDatabase.LoadAssetAtPath<Material>(file);
if (tempMat.shader == currentShader)
{
tempMat.shader = changeShader;
mat.Add(tempMat);
// Debug.Log($"Change {tempMat.name} from {currentShader.name} to {changeShader.name}");
count++;
}
}

AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
EditorUtility.ClearProgressBar();
EditorUtility.DisplayDialog("一共修改:" + count + "个材质", "就绪", "OK");
}
}

知乎

Unity有哪些适合拿来练手的游戏项目?

Unity技术交流

官方入门教程