SentPickup
How do I use Sent Pickup
Below are practical examples compiled from projects for learning and reference purposes
Featured Snippets
Line | Code | Ex.. |
---|---|---|
93 | if (this.SentPickup) | 1 |
127 | if (msgInfo.sender.isLocal) this.SentPickup = false; | 2 |
29 | if (this.SentPickup) | 3 |
44 | if (this.SentPickup && msgInfo.sender.isLocal) | 4 |
File name: PickupItem.cs
Copy
91 public void Pickup()
92 {
93 if (this.SentPickup)
94 {
95 // skip sending more pickups until the original pickup-RPC got back to this client
96 return;
97 }
98
99 this.SentPickup = true;
100 this.photonView.RPC("PunPickup", PhotonTargets.AllViaServer);
101 }
File name: PickupItem.cs
Copy
124 public void PunPickup(PhotonMessageInfo msgInfo)
125 {
126 // when this client's RPC gets executed, this client no longer waits for a sent pickup and can try again
127 if (msgInfo.sender.isLocal) this.SentPickup = false;
128
129
130 // In this solution, picked up items are disabled. They can't be picked up again this way, etc.
131 // You could check "active" first, if you're not interested in failed pickup-attempts.
132 if (!this.gameObject.GetActive())
133 {
134 // optional logging:
135 Debug.Log("Ignored PU RPC, cause item is inactive. " + this.gameObject + " SecondsBeforeRespawn: " + SecondsBeforeRespawn + " TimeOfRespawn: " + this.TimeOfRespawn + " respawn in future: " + (TimeOfRespawn > PhotonNetwork.time));
136 return; // makes this RPC being ignored
137 }
138
139
140 // if the RPC isn't ignored by now, this is a successful pickup. this might be "my" pickup and we should do a callback
141 this.PickupIsMine = msgInfo.sender.isLocal;
142
143 // call the method OnPickedUp(PickupItem item) if a GameObject was defined as callback target
144 if (this.OnPickedUpCall != null)
145 {
146 // you could also skip callbacks for items that are not picked up by this client by using: if (this.PickupIsMine)
147 this.OnPickedUpCall.SendMessage("OnPickedUp", this);
148 }
149
150
151 // setup a respawn (or none, if the item has to be dropped)
152 if (SecondsBeforeRespawn <= 0)
153 {
154 this.PickedUp(0.0f); // item doesn't auto-respawn. must be dropped
155 }
156 else
157 {
158 // how long it is until this item respanws, depends on the pickup time and the respawn time
159 double timeSinceRpcCall = (PhotonNetwork.time - msgInfo.timestamp);
160 double timeUntilRespawn = SecondsBeforeRespawn - timeSinceRpcCall;
161
162 //Debug.Log("msg timestamp: " + msgInfo.timestamp + " time until respawn: " + timeUntilRespawn);
163
164 if (timeUntilRespawn > 0)
165 {
166 this.PickedUp((float)timeUntilRespawn);
167 }
168 }
169 }
File name: PickupItemSimple.cs
Copy
27 public void Pickup()
28 {
29 if (this.SentPickup)
30 {
31 // skip sending more pickups until the original pickup-RPC got back to this client
32 return;
33 }
34
35 this.SentPickup = true;
36 this.photonView.RPC("PunPickupSimple", PhotonTargets.AllViaServer);
37 }
File name: PickupItemSimple.cs
Copy
40 public void PunPickupSimple(PhotonMessageInfo msgInfo)
41 {
42 // one of the messages might be ours
43 // note: you could check "active" first, if you're not interested in your own, failed pickup-attempts.
44 if (this.SentPickup && msgInfo.sender.isLocal)
45 {
46 if (this.gameObject.GetActive())
47 {
48 // picked up! yay.
49 }
50 else
51 {
52 // pickup failed. too late (compared to others)
53 }
54 }
55
56 this.SentPickup = false;
57
58 if (!this.gameObject.GetActive())
59 {
60 Debug.Log("Ignored PU RPC, cause item is inactive. " + this.gameObject);
61 return;
62 }
63
64
65 // how long it is until this item respanws, depends on the pickup time and the respawn time
66 double timeSinceRpcCall = (PhotonNetwork.time - msgInfo.timestamp);
67 float timeUntilRespawn = SecondsBeforeRespawn - (float)timeSinceRpcCall;
68 //Debug.Log("msg timestamp: " + msgInfo.timestamp + " time until respawn: " + timeUntilRespawn);
69
70 if (timeUntilRespawn > 0)
71 {
72 // this script simply disables the GO for a while until it respawns.
73 this.gameObject.SetActive(false);
74 Invoke("RespawnAfter", timeUntilRespawn);
75 }
76 }
SentPickup 128 lượt xem
Gõ tìm kiếm nhanh...