After much experimentation and effort, chickens now sync much more smoothly.
This commit is contained in:
@@ -44,7 +44,7 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 14
|
||||
Data: 13
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
@@ -464,70 +464,16 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: _Moving
|
||||
Data: _MovementDirectionDegrees
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 29|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _Moving
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 26
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 26
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 3
|
||||
Data: 1
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 30|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 1
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data: 31|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: _MovementTimer
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 32|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _MovementTimer
|
||||
Data: _MovementDirectionDegrees
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 33|System.RuntimeType, mscorlib
|
||||
Data: 30|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: System.Single, mscorlib
|
||||
@@ -536,7 +482,7 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 33
|
||||
Data: 30
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
@@ -551,13 +497,13 @@ MonoBehaviour:
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 34|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
Data: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 1
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data: 35|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
|
||||
Data: 32|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
@@ -578,25 +524,79 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: _MovementDirectionDegrees
|
||||
Data: _PlayerToFollow
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 33|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _PlayerToFollow
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 34|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: VRC.SDKBase.VRCPlayerApi, VRCSDKBase
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 34
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 6
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 35|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 0
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: _Moving
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 36|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _MovementDirectionDegrees
|
||||
Data: _Moving
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 33
|
||||
Data: 26
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 33
|
||||
Data: 26
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 3
|
||||
Data: 1
|
||||
Entry: 6
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
@@ -608,13 +608,7 @@ MonoBehaviour:
|
||||
Data: 37|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 1
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data: 38|UdonSharp.UdonSyncedAttribute, UdonSharp.Runtime
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
Data: 0
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
@@ -632,25 +626,19 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: _PlayerToFollow
|
||||
Data: _MovementTimer
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 39|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
Data: 38|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _PlayerToFollow
|
||||
Data: _MovementTimer
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 40|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: VRC.SDKBase.VRCPlayerApi, VRCSDKBase
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
Entry: 9
|
||||
Data: 30
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 40
|
||||
Data: 30
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
@@ -665,7 +653,7 @@ MonoBehaviour:
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 41|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
Data: 39|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 0
|
||||
@@ -684,72 +672,18 @@ MonoBehaviour:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: _FollowMode
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 42|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _FollowMode
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 26
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 26
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 6
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 43|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 1
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data: 44|UdonSharp.FieldChangeCallbackAttribute, UdonSharp.Runtime
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: _Animator
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 45|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
Data: 40|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _Animator
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 46|System.RuntimeType, mscorlib
|
||||
Data: 41|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: UnityEngine.Animator, UnityEngine.AnimationModule
|
||||
@@ -758,7 +692,7 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 46
|
||||
Data: 41
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
@@ -773,7 +707,7 @@ MonoBehaviour:
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 47|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
Data: 42|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 0
|
||||
@@ -797,16 +731,16 @@ MonoBehaviour:
|
||||
Data: _WallColliderTimer
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 48|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
Data: 43|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: _WallColliderTimer
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 33
|
||||
Data: 30
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 33
|
||||
Data: 30
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
@@ -821,7 +755,7 @@ MonoBehaviour:
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 49|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
Data: 44|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 0
|
||||
|
||||
+116
-122
@@ -1,11 +1,8 @@
|
||||
|
||||
using System.Threading;
|
||||
using UdonSharp;
|
||||
using UnityEngine;
|
||||
using VRC.Core;
|
||||
using VRC.SDK3.ClientSim;
|
||||
using VRC.SDKBase;
|
||||
using VRC.Udon;
|
||||
using VRC.Udon.Common;
|
||||
|
||||
|
||||
public enum ChickenState
|
||||
@@ -14,7 +11,8 @@ public enum ChickenState
|
||||
Walk,
|
||||
Run,
|
||||
Eat,
|
||||
Held
|
||||
Held,
|
||||
Airborne
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +25,12 @@ public class Chimken : UdonSharpBehaviour
|
||||
[SerializeField] private string _FollowUser = "";
|
||||
|
||||
[UdonSynced, FieldChangeCallback(nameof(AnimationState))] private ChickenState _AnimationState = 0;
|
||||
|
||||
[UdonSynced] private bool _IsBeingHeld = false;
|
||||
[UdonSynced] private bool _Moving = false;
|
||||
[UdonSynced] private float _MovementTimer = 0.0f;
|
||||
[UdonSynced] private float _MovementDirectionDegrees = 0.0f;
|
||||
|
||||
private VRCPlayerApi _PlayerToFollow = null;
|
||||
[FieldChangeCallback(nameof(FollowMode))] private bool _FollowMode = false;
|
||||
private bool _Moving = false;
|
||||
private float _MovementTimer = 0.0f;
|
||||
|
||||
private Animator _Animator = null;
|
||||
|
||||
@@ -42,6 +38,7 @@ public class Chimken : UdonSharpBehaviour
|
||||
|
||||
private const float WALK_SPEED = 0.35f;
|
||||
private const float RUN_SPEED = 1.4f;
|
||||
private const float TURN_LERP_SPEED = 0.15f;
|
||||
|
||||
|
||||
void Start()
|
||||
@@ -51,14 +48,50 @@ public class Chimken : UdonSharpBehaviour
|
||||
|
||||
void FixedUpdate()
|
||||
{
|
||||
if (!_IsBeingHeld)
|
||||
bool Airborne = true;
|
||||
if (Networking.IsOwner(gameObject))
|
||||
{
|
||||
if (FollowMode && _PlayerToFollow != null)
|
||||
{
|
||||
Vector3 PlayerPosition = _PlayerToFollow.GetPosition();
|
||||
Vector3 PlayerPositionLateral = new Vector3(PlayerPosition.x, 0.0f, PlayerPosition.z);
|
||||
Vector3 ChickenPositionLateral = new Vector3(transform.position.x, 0.0f, transform.position.z);
|
||||
RaycastHit HitInfo;
|
||||
|
||||
// Ground collision detection
|
||||
if (_IsBeingHeld)
|
||||
{
|
||||
SetAnimationState(ChickenState.Held);
|
||||
}
|
||||
else if (Physics.Raycast(GroundRayStart.position, GroundRayStart.forward, out HitInfo, GroundRayEnd.localPosition.z))
|
||||
{
|
||||
transform.position = HitInfo.point;
|
||||
Airborne = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
SetAnimationState(ChickenState.Airborne);
|
||||
}
|
||||
|
||||
// Wall collision detection
|
||||
_WallColliderTimer -= Time.fixedDeltaTime;
|
||||
if (_WallColliderTimer <= 0.0f && _Moving)
|
||||
{
|
||||
if (Physics.Raycast(WallRayStart.position, WallRayStart.forward, out HitInfo, WallRayEnd.localPosition.z))
|
||||
{
|
||||
float OldMovementDirection = _MovementDirectionDegrees;
|
||||
Vector3 ReflectedAngle = Vector3.Reflect(WallRayStart.forward, HitInfo.normal);
|
||||
_MovementDirectionDegrees = Vector3.SignedAngle(Vector3.forward, ReflectedAngle, Vector3.up);
|
||||
}
|
||||
_WallColliderTimer = 0.25f;
|
||||
}
|
||||
}
|
||||
|
||||
Vector3 PlayerPosition;
|
||||
Vector3 PlayerPositionLateral;
|
||||
GetFollowPlayerPositions(out PlayerPosition, out PlayerPositionLateral);
|
||||
|
||||
Vector3 ChickenPositionLateral = new Vector3(transform.position.x, 0.0f, transform.position.z);
|
||||
|
||||
if (!Airborne)
|
||||
{
|
||||
if (_PlayerToFollow != null)
|
||||
{
|
||||
float DistanceToPlayer = Vector3.Distance(ChickenPositionLateral, PlayerPositionLateral);
|
||||
if (DistanceToPlayer <= 0.7f)
|
||||
{
|
||||
@@ -66,11 +99,6 @@ public class Chimken : UdonSharpBehaviour
|
||||
}
|
||||
else
|
||||
{
|
||||
float Angle = Vector3.SignedAngle(transform.forward, (PlayerPositionLateral - ChickenPositionLateral).normalized, transform.up);
|
||||
transform.rotation = Quaternion.Euler(
|
||||
transform.eulerAngles.x,
|
||||
Mathf.LerpAngle(transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.y + Angle, 0.1f),
|
||||
transform.eulerAngles.z);
|
||||
|
||||
SetAnimationState(DistanceToPlayer <= 2.75f ? ChickenState.Walk : ChickenState.Run);
|
||||
}
|
||||
@@ -80,78 +108,48 @@ public class Chimken : UdonSharpBehaviour
|
||||
_MovementTimer -= Time.deltaTime;
|
||||
if (_MovementTimer <= 0.0f && Networking.IsOwner(gameObject))
|
||||
{
|
||||
ChickenState NewState = (ChickenState)Random.Range(0, 4);
|
||||
SetAnimationState(NewState);
|
||||
_MovementDirectionDegrees = Random.Range(0.0f, 359.999999999f);
|
||||
|
||||
switch (NewState)
|
||||
{
|
||||
case ChickenState.Idle:
|
||||
_MovementTimer = 4.0f;
|
||||
break;
|
||||
case ChickenState.Walk:
|
||||
_MovementTimer = 4.5f;
|
||||
break;
|
||||
case ChickenState.Run:
|
||||
_MovementTimer = 1.2f;
|
||||
break;
|
||||
case ChickenState.Eat:
|
||||
_MovementTimer = 6.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
transform.rotation = Quaternion.Euler(
|
||||
transform.eulerAngles.x,
|
||||
Mathf.LerpAngle(transform.rotation.eulerAngles.y, _MovementDirectionDegrees, 0.1f),
|
||||
transform.eulerAngles.z);
|
||||
}
|
||||
|
||||
if (_Moving)
|
||||
{
|
||||
switch (_AnimationState)
|
||||
{
|
||||
case ChickenState.Walk:
|
||||
transform.position += (transform.forward * Time.fixedDeltaTime * WALK_SPEED);
|
||||
break;
|
||||
case ChickenState.Run:
|
||||
transform.position += (transform.forward * Time.fixedDeltaTime * RUN_SPEED);
|
||||
break;
|
||||
SetAnimationState((ChickenState)Random.Range(0, 4));
|
||||
}
|
||||
}
|
||||
|
||||
if (Networking.IsOwner(gameObject))
|
||||
{
|
||||
RaycastHit HitInfo;
|
||||
|
||||
// Ground collision detection
|
||||
if (Physics.Raycast(GroundRayStart.position, GroundRayStart.forward, out HitInfo, GroundRayEnd.localPosition.z))
|
||||
{
|
||||
transform.position = HitInfo.point;
|
||||
}
|
||||
|
||||
// Wall collision detection
|
||||
_WallColliderTimer -= Time.fixedDeltaTime;
|
||||
if (_WallColliderTimer <= 0.0f && _Moving)
|
||||
{
|
||||
if (Physics.Raycast(WallRayStart.position, WallRayStart.forward, out HitInfo, WallRayEnd.localPosition.z))
|
||||
{
|
||||
float OldMovementDirection = _MovementDirectionDegrees;
|
||||
Vector3 ReflectedAngle = Vector3.Reflect(WallRayStart.forward, HitInfo.normal);
|
||||
_MovementDirectionDegrees = Vector3.SignedAngle(Vector3.forward, ReflectedAngle, Vector3.up);
|
||||
}
|
||||
_WallColliderTimer = 0.333333333333333f;
|
||||
}
|
||||
|
||||
RequestSerialization();
|
||||
}
|
||||
|
||||
// Reset roll and pitch to zero on every physics update so the chicken stays upright
|
||||
Vector3 Rotation = transform.eulerAngles;
|
||||
Rotation.x = 0.0f;
|
||||
Rotation.z = 0.0f;
|
||||
transform.rotation = Quaternion.Euler(Rotation);
|
||||
}
|
||||
|
||||
if (_Moving)
|
||||
{
|
||||
switch (_AnimationState)
|
||||
{
|
||||
case ChickenState.Walk:
|
||||
transform.position += (transform.forward * Time.fixedDeltaTime * WALK_SPEED);
|
||||
break;
|
||||
case ChickenState.Run:
|
||||
transform.position += (transform.forward * Time.fixedDeltaTime * RUN_SPEED);
|
||||
break;
|
||||
case ChickenState.Airborne:
|
||||
transform.position += (transform.forward * Time.fixedDeltaTime * RUN_SPEED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_Moving && _PlayerToFollow == null)
|
||||
{
|
||||
transform.rotation = Quaternion.Euler(
|
||||
transform.eulerAngles.x,
|
||||
Mathf.LerpAngle(transform.rotation.eulerAngles.y, _MovementDirectionDegrees, TURN_LERP_SPEED),
|
||||
transform.eulerAngles.z);
|
||||
}
|
||||
else
|
||||
{
|
||||
float Angle = Vector3.SignedAngle(transform.forward, (PlayerPositionLateral - ChickenPositionLateral).normalized, transform.up);
|
||||
transform.rotation = Quaternion.Euler(
|
||||
transform.eulerAngles.x,
|
||||
Mathf.LerpAngle(transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.y + Angle, TURN_LERP_SPEED),
|
||||
transform.eulerAngles.z);
|
||||
}
|
||||
|
||||
// Reset roll and pitch to zero on every physics update so the chicken stays upright
|
||||
Vector3 Rotation = transform.eulerAngles;
|
||||
Rotation.x = 0.0f;
|
||||
Rotation.z = 0.0f;
|
||||
transform.rotation = Quaternion.Euler(Rotation);
|
||||
}
|
||||
|
||||
public override void OnPlayerJoined(VRCPlayerApi Player)
|
||||
@@ -159,7 +157,6 @@ public class Chimken : UdonSharpBehaviour
|
||||
if (Player.displayName == _FollowUser)
|
||||
{
|
||||
_PlayerToFollow = Player;
|
||||
SetWanderMode();
|
||||
}
|
||||
|
||||
base.OnPlayerJoined(Player);
|
||||
@@ -170,7 +167,6 @@ public class Chimken : UdonSharpBehaviour
|
||||
if (Player.displayName == _FollowUser)
|
||||
{
|
||||
_PlayerToFollow = null;
|
||||
SetWanderMode();
|
||||
}
|
||||
|
||||
base.OnPlayerLeft(Player);
|
||||
@@ -187,35 +183,21 @@ public class Chimken : UdonSharpBehaviour
|
||||
|
||||
public override void OnDrop()
|
||||
{
|
||||
SetWanderMode();
|
||||
_IsBeingHeld = false;
|
||||
|
||||
base.OnDrop();
|
||||
}
|
||||
|
||||
//public void OnCollisionEnter(Collision Collision)
|
||||
//{
|
||||
// Debug.LogError("[Chimken] Touch!!!");
|
||||
//}
|
||||
|
||||
|
||||
private void SetWanderMode()
|
||||
{
|
||||
if (_PlayerToFollow == null)
|
||||
{
|
||||
FollowMode = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
FollowMode = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void SetAnimationState(ChickenState State)
|
||||
{
|
||||
AnimationState = State;
|
||||
RequestSerialization();
|
||||
if (Networking.IsOwner(gameObject))
|
||||
{
|
||||
AnimationState = State;
|
||||
_MovementDirectionDegrees = Random.Range(0.0f, 360.0f - float.MinValue);
|
||||
|
||||
RequestSerialization();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnStateChanged()
|
||||
@@ -226,21 +208,43 @@ public class Chimken : UdonSharpBehaviour
|
||||
switch (AnimationState)
|
||||
{
|
||||
case ChickenState.Idle:
|
||||
_MovementTimer = 4.0f;
|
||||
break;
|
||||
case ChickenState.Walk:
|
||||
_MovementTimer = 4.5f;
|
||||
_Moving = true;
|
||||
break;
|
||||
case ChickenState.Run:
|
||||
_MovementTimer = 1.2f;
|
||||
_Moving = true;
|
||||
break;
|
||||
case ChickenState.Eat:
|
||||
_MovementTimer = 6.0f;
|
||||
break;
|
||||
case ChickenState.Held:
|
||||
_MovementTimer = 0.0f;
|
||||
break;
|
||||
case ChickenState.Airborne:
|
||||
_MovementTimer = 0.0f;
|
||||
_Moving = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private bool GetFollowPlayerPositions(out Vector3 PlayerPosition, out Vector3 PlayerPositionLateral)
|
||||
{
|
||||
if (_PlayerToFollow != null)
|
||||
{
|
||||
PlayerPosition = _PlayerToFollow.GetPosition();
|
||||
PlayerPositionLateral = new Vector3(PlayerPosition.x, 0.0f, PlayerPosition.z);
|
||||
return true;
|
||||
}
|
||||
|
||||
PlayerPosition = Vector3.zero;
|
||||
PlayerPositionLateral = Vector3.zero;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private ChickenState AnimationState
|
||||
{
|
||||
@@ -252,14 +256,4 @@ public class Chimken : UdonSharpBehaviour
|
||||
|
||||
get => _AnimationState;
|
||||
}
|
||||
|
||||
private bool FollowMode
|
||||
{
|
||||
set
|
||||
{
|
||||
_FollowMode = value;
|
||||
}
|
||||
|
||||
get => _FollowMode;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user