写一写今天的学习心得,保持每天不断的学习,今天写的是人物的换装的技术实现,有关动态材质的动态切换可以参考:
http://bbs.9ria.com/thread-134275-1-1.html这个博客的内容。
这里要换装主要是游戏里面的Mesh和Materials,可以我们从属性菜单中直接给这个赋值,可行方便的一个策略是将所有的模型资源写在一个数组中,然后通过数组的索引获取到对应的贴图就OK了。
人物的换装是游戏开发的一个基本的技术,初来公司,老板就要我学习一下人物换装,也当是给我练练手吧,然后我接到一个需求之后,就要开始学习和搜集资料来实现这一功能,一下是学习心得,接下来我们就一起来学习一下,仅仅供新手参考。
首先 我们将从美工那儿获取到的人物模型资源加载到本地,然后通过写代码挂载到人物模型上面。以下是挂在在模型上面的js代码,也就是换装的脚本:
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
77
|
var
ME1 : Mesh;
//网格
var
MA1 : Material;
//材质
private
var
TK = 0;
var
ME2 : Mesh;
var
MA2 : Material;
private
var
WQ = 0;
var
ME3 : Mesh;
var
MA3 : Material;
private
var
ZJ = 0;
var
ME4 : Mesh;
var
MA4 : Material;
private
var
YJ = 0;
function
OnGUI()
{
GUILayout.Label(
""
);
if
(GUILayout.Button (
"Helm头盔"
))
{
if
(TK == 1)
{
transform.Find(
"group2"
).Find(
"Object02"
).GetComponent(MeshFilter).mesh =
null
;
transform.Find(
"group2"
).Find(
"Object02"
).renderer.material =
null
;
TK = 0;
}
else
{
transform.Find(
"group2"
).Find(
"Object02"
).GetComponent(MeshFilter).mesh = ME1;
transform.Find(
"group2"
).Find(
"Object02"
).renderer.material = MA1;
TK = 1;
}
}
if
(GUILayout.Button (
"Weapon武器"
))
{
if
(WQ == 1)
{
transform.Find(
"group2"
).Find(
"polySurface1"
).GetComponent(MeshFilter).mesh =
null
;
transform.Find(
"group2"
).Find(
"polySurface1"
).renderer.material =
null
;
WQ = 0;
}
else
{
transform.Find(
"group2"
).Find(
"polySurface1"
).GetComponent(MeshFilter).mesh = ME2;
transform.Find(
"group2"
).Find(
"polySurface1"
).renderer.material = MA2;
WQ = 1;
}
}
if
(GUILayout.Button (
"LCollar左肩"
))
{
if
(ZJ == 1)
{
transform.Find(
"group2"
).Find(
"polySurface3"
).GetComponent(MeshFilter).mesh =
null
;
transform.Find(
"group2"
).Find(
"polySurface3"
).renderer.material =
null
;
ZJ = 0;
}
else
{
transform.Find(
"group2"
).Find(
"polySurface3"
).GetComponent(MeshFilter).mesh = ME3;
transform.Find(
"group2"
).Find(
"polySurface3"
).renderer.material = MA3;
ZJ = 1;
}
}
if
(GUILayout.Button (
"RCollar右肩"
))
{
if
(YJ == 1)
{
transform.Find(
"group2"
).Find(
"polySurface4"
).GetComponent(MeshFilter).mesh =
null
;
transform.Find(
"group2"
).Find(
"polySurface4"
).renderer.material =
null
;
YJ = 0;
}
else
{
transform.Find(
"group2"
).Find(
"polySurface4"
).GetComponent(MeshFilter).mesh = ME4;
transform.Find(
"group2"
).Find(
"polySurface4"
).renderer.material = MA4;
YJ = 1;
}
}
}
|
帧数值的js代码,这段是挂在在摄像机上的:
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
|
var
updateInterval = 0.5;
private
var
lastInterval : double;
// Last interval end time
private
var
frames = 0;
// Frames over current interval
private
var
fps : float;
// Current FPS
private
var
sum = 0.0;
private
var
num = 0.0;
function
Start()
{
lastInterval = Time.realtimeSinceStartup;
frames = 0;
}
function
OnGUI ()
{
GUILayout.Label(
"fps:"
+ fps.ToString(
"f0"
) +
" "
+ (sum/num).ToString(
"f0"
));
}
function
Update()
{
transform.RotateAround (Vector3.zero, Vector3.up, 100 * Time.deltaTime);
++frames;
var
timeNow = Time.realtimeSinceStartup;
if
( timeNow > lastInterval + updateInterval )
{
fps = frames / (timeNow - lastInterval);
frames = 0;
lastInterval = timeNow;
sum += fps;
num++;
}
}
|
程序截图:
转眼之间都快到凌晨一点半了,还是可以洗洗睡了!
http://unity3d.9tech.cn/news/2013/1105/38441.html