質問編集履歴

4

参考させていただいた、記事のリンクを追加させていただきました。また、画像ではなく、テキストで載せさせていただきました。

2020/08/24 07:20

投稿

ligo
ligo

スコア7

test CHANGED
File without changes
test CHANGED
@@ -22,9 +22,19 @@
22
22
 
23
23
  ネット上で色々な記事を見させていただき、解決法を探しました。そこで以下のような記事を拝見させていただきました。
24
24
 
25
+ 引用元は
26
+
27
+ [https://www.urablog.xyz/entry/2016/09/21/223002](https://www.urablog.xyz/entry/2016/09/21/223002)
28
+
29
+ です。
25
30
 
26
31
 
32
+
33
+ > ただ、シリアライズは自作することが出来ます。
34
+
27
- ![](b0a05ec943f7342ff62da2c634b6897e.png)
35
+  自分でシリアライズ、デシリアライズ関数を作成することで、どんな型でもRPC()関数の引数として使用することが出来ます。
36
+
37
+ 試しにColorのシリアライズを自作してみましょう。
28
38
 
29
39
 
30
40
 

3

質問の題名を変更させていただきました。

2020/08/24 07:20

投稿

ligo
ligo

スコア7

test CHANGED
@@ -1 +1 @@
1
- シリアライズとは何かそして、Unityで自作する方法を知りた
1
+ Unityでシリアライズ自作する方法がわからな
test CHANGED
File without changes

2

一部、ミスがあったので訂正させていただきました。

2020/08/24 07:13

投稿

ligo
ligo

スコア7

test CHANGED
File without changes
test CHANGED
@@ -12,15 +12,15 @@
12
12
 
13
13
  ```
14
14
 
15
- photonView.RPC( "MethodRPC", PhotonTargets.All, transformPos );
15
+ photonView.RPC( "MethodRPC", PhotonTargets.All, transform );
16
16
 
17
17
  コード
18
18
 
19
19
  ```
20
20
 
21
- このようなコードでRPCを呼び出そうと思いました。しかし、Vector3型は対応しておらずエラーが出てしまいました。
21
+ このようなコードでRPCを呼び出そうと思いました。しかし、transform型は対応しておらずエラーが出てしまいました。
22
22
 
23
- もちろんfloat型三つ送っも良のですが毎回ですと面倒なので解決法を探しました。そこで以下のような記事を拝見させていただきました。
23
+ ネット上色々な記事を見させていただき、解決法を探しました。そこで以下のような記事を拝見させていただきました。
24
24
 
25
25
 
26
26
 

1

漠然とした内容ではなく、具体的な内容に変えさせていただきました。

2020/08/24 07:11

投稿

ligo
ligo

スコア7

test CHANGED
File without changes
test CHANGED
@@ -8,14 +8,108 @@
8
8
 
9
9
  疑問:
10
10
 
11
- 1Unityに関しのことなのですが、そもそもシリアライズはどういうことなでしょか?
11
+ Photonを使っボール当たった時に反応させる同期を取るためにPunRPCというを使おと思い
12
+
13
+ ```
14
+
15
+ photonView.RPC( "MethodRPC", PhotonTargets.All, transformPos );
16
+
17
+ コード
18
+
19
+ ```
20
+
21
+ このようなコードでRPCを呼び出そうと思いました。しかし、Vector3型は対応しておらずエラーが出てしまいました。
22
+
23
+ もちろんfloat型で三つ送っても良いのですが毎回ですと面倒なので解決法を探しました。そこで以下のような記事を拝見させていただきました。
12
24
 
13
25
 
14
26
 
15
- 2Unityでシリアライズを自作するにはどうすれば良いのでしょうか?又は、どのようなコードを書けば自作できるのでしょうか?
27
+ ![](b0a05ec943f7342ff62da2c634b6897e.png)
16
28
 
17
29
 
18
30
 
19
- 最後
31
+ その記事載っていた、コードは以下のようなものでした。
20
32
 
33
+
34
+
35
+ ```using UnityEngine;
36
+
37
+
38
+
39
+ public static class ColorSerializer
40
+
41
+ {
42
+
43
+ public static void Register()
44
+
45
+ {
46
+
47
+ ExitGames.Client.Photon.PhotonPeer.RegisterType( typeof( Color ), (byte)'C', SerializeColor, DeserializeColor );
48
+
49
+ }
50
+
51
+
52
+
53
+ private static byte[] SerializeColor( object i_customobject )
54
+
55
+ {
56
+
57
+ Color color = (Color)i_customobject;
58
+
59
+
60
+
61
+ var bytes = new byte[ 4 * sizeof( float ) ];
62
+
63
+ int index = 0;
64
+
65
+ ExitGames.Client.Photon.Protocol.Serialize( color.r, bytes, ref index );
66
+
67
+ ExitGames.Client.Photon.Protocol.Serialize( color.g, bytes, ref index );
68
+
69
+ ExitGames.Client.Photon.Protocol.Serialize( color.b, bytes, ref index );
70
+
71
+ ExitGames.Client.Photon.Protocol.Serialize( color.a, bytes, ref index );
72
+
73
+
74
+
75
+ return bytes;
76
+
77
+ }
78
+
79
+
80
+
81
+ private static object DeserializeColor( byte[] i_bytes )
82
+
83
+ {
84
+
85
+ var color = new Color();
86
+
87
+ int index = 0;
88
+
89
+ ExitGames.Client.Photon.Protocol.Deserialize( out color.r, i_bytes, ref index );
90
+
91
+ ExitGames.Client.Photon.Protocol.Deserialize( out color.g, i_bytes, ref index );
92
+
93
+ ExitGames.Client.Photon.Protocol.Deserialize( out color.b, i_bytes, ref index );
94
+
95
+ ExitGames.Client.Photon.Protocol.Deserialize( out color.a, i_bytes, ref index );
96
+
97
+
98
+
99
+ return color;
100
+
101
+ }
102
+
103
+
104
+
105
+ }
106
+
107
+ ```
108
+
109
+
110
+
111
+ しかしこれを見ても、今の僕には理解することができませんでした。
112
+
113
+
114
+
21
- 非常漠然とした質問訳なです。もしわる方がいらっしゃれば教えていただけると幸いです
115
+ どこが、シリアライズ関わっているころなのか、そて、その部分は何をるの教えていただきたいです