PositionOffset









How do I use Position Offset
Below are practical examples compiled from projects for learning and reference purposes

Featured Snippets


File name: PhotonTransformViewPositionControl.cs Copy
54     public Vector3 UpdatePosition( Vector3 currentPosition )
55     {
56         Vector3 targetPosition = GetNetworkPosition() + GetExtrapolatedPositionOffset();
57
58         switch( m_Model.InterpolateOption )
59         {
60         case PhotonTransformViewPositionModel.InterpolateOptions.Disabled:
61             if( m_UpdatedPositionAfterOnSerialize == false )
62             {
63                 currentPosition = targetPosition;
64                 m_UpdatedPositionAfterOnSerialize = true;
65             }
66             break;
67         case PhotonTransformViewPositionModel.InterpolateOptions.FixedSpeed:
68             currentPosition = Vector3.MoveTowards( currentPosition, targetPosition, Time.deltaTime * m_Model.InterpolateMoveTowardsSpeed );
69             break;
70         case PhotonTransformViewPositionModel.InterpolateOptions.EstimatedSpeed:
71             int positionsCount = Mathf.Min( 1, m_OldNetworkPositions.Count );
72             float estimatedSpeed = Vector3.Distance( m_NetworkPosition, GetOldestStoredNetworkPosition() ) / positionsCount;
73             currentPosition = Vector3.MoveTowards( currentPosition, targetPosition, Time.deltaTime * estimatedSpeed );
74             break;
75         case PhotonTransformViewPositionModel.InterpolateOptions.SynchronizeValues:
76             if( m_SynchronizedSpeed.magnitude == 0 )
77             {
78                 currentPosition = targetPosition;
79             }
80             else
81             {
82                 currentPosition = Vector3.MoveTowards( currentPosition, targetPosition, Time.deltaTime * m_SynchronizedSpeed.magnitude );
83             }
84             break;
85         case PhotonTransformViewPositionModel.InterpolateOptions.Lerp:
86             currentPosition = Vector3.Lerp( currentPosition, targetPosition, Time.deltaTime * m_Model.InterpolateLerpSpeed );
87             break;
88         /*case PhotonTransformViewPositionModel.InterpolateOptions.MoveTowardsComplex:
89             float distanceToTarget = Vector3.Distance( currentPosition, targetPosition );
90             float targetSpeed = m_Model.InterpolateSpeedCurve.Evaluate( distanceToTarget ) * m_Model.InterpolateMoveTowardsSpeed;
91
92             if( targetSpeed > m_CurrentSpeed )
93             {
94                 m_CurrentSpeed = Mathf.MoveTowards( m_CurrentSpeed, targetSpeed, Time.deltaTime * m_Model.InterpolateMoveTowardsAcceleration );
95             }
96             else
97             {
98                 m_CurrentSpeed = Mathf.MoveTowards( m_CurrentSpeed, targetSpeed, Time.deltaTime * m_Model.InterpolateMoveTowardsDeceleration );
99             }
100
101             //Debug.Log( m_CurrentSpeed + " - " + targetSpeed + " - " + transform.localPosition + " - " + targetPosition );
102
103             currentPosition = Vector3.MoveTowards( currentPosition, targetPosition, Time.deltaTime * m_CurrentSpeed );
104             break;*/
105         }
106
107         if( m_Model.TeleportEnabled == true )
108         {
109             if( Vector3.Distance( currentPosition, GetNetworkPosition() ) > m_Model.TeleportIfDistanceGreaterThan )
110             {
111                 currentPosition = GetNetworkPosition();
112             }
113         }
114
115         return currentPosition;
116     }
File name: PhotonTransformViewPositionControl.cs Copy
132     public Vector3 GetExtrapolatedPositionOffset()
133     {
134         float timePassed = (float)( PhotonNetwork.time - m_LastSerializeTime );
135
136         if( m_Model.ExtrapolateIncludingRoundTripTime == true )
137         {
138             timePassed += (float)PhotonNetwork.GetPing() / 1000f;
139         }
140
141         Vector3 extrapolatePosition = Vector3.zero;
142
143         switch( m_Model.ExtrapolateOption )
144         {
145         case PhotonTransformViewPositionModel.ExtrapolateOptions.SynchronizeValues:
146             Quaternion turnRotation = Quaternion.Euler( 0, m_SynchronizedTurnSpeed * timePassed, 0 );
147             extrapolatePosition = turnRotation * ( m_SynchronizedSpeed * timePassed );
148             break;
149         case PhotonTransformViewPositionModel.ExtrapolateOptions.FixedSpeed:
150             Vector3 moveDirection = ( m_NetworkPosition - GetOldestStoredNetworkPosition() ).normalized;
151
152             extrapolatePosition = moveDirection * m_Model.ExtrapolateSpeed * timePassed;
153             break;
154         case PhotonTransformViewPositionModel.ExtrapolateOptions.EstimateSpeedAndTurn:
155             Vector3 moveDelta = ( m_NetworkPosition - GetOldestStoredNetworkPosition() ) * PhotonNetwork.sendRateOnSerialize;
156             extrapolatePosition = moveDelta * timePassed;
157             break;
158         }
159
160         return extrapolatePosition;
161     }
File name: OnJoinedInstantiate.cs Copy
10     public void OnJoinedRoom()
11     {
12         if (this.PrefabsToInstantiate != null)
13         {
14             foreach (GameObject o in this.PrefabsToInstantiate)
15             {
16                 Debug.Log("Instantiating: " + o.name);
17
18                 Vector3 spawnPos = Vector3.up;
19                 if (this.SpawnPosition != null)
20                 {
21                     spawnPos = this.SpawnPosition.position;
22                 }
23
24                 Vector3 random = Random.insideUnitSphere;
25                 random.y = 0;
26                 random = random.normalized;
27                 Vector3 itempos = spawnPos + this.PositionOffset * random;
28
29                 PhotonNetwork.Instantiate(o.name, itempos, Quaternion.identity, 0);
30             }
31         }
32     }

PositionOffset 126 lượt xem

Gõ tìm kiếm nhanh...