- Home /
NETWORK TRANSFORM WONT INTERPOLATE MOVEMENT
I keep all the default settings in my network transform component but only rotational interpolation takes place over the network. The rotation alone is smooth but the movement only snaps to the Snap Threshold I set to 5 (default). Tweaking other movement values don't seems to make a difference.
Here is my script:
using UnityEngine; using UnityStandardAssets.CrossPlatformInput;
public class TankMovement : MonoBehaviour { public Transform cameraRig;
public float turnSmoothing = 15f;
public float speedDampTime = 0.1f; public int m_PlayerNumber = 1;
public float m_Speed = 10f;
public float m_TurnSpeed = 180f;
public AudioSource m_MovementAudio;
public AudioClip m_EngineIdling;
public AudioClip m_EngineDriving;
public float m_PitchRange = 0.2f;
private string m_MovementAxisName;
private string m_TurnAxisName;
private Rigidbody m_Rigidbody;
private float m_MovementInputValue;
private float m_TurnInputValue;
private float m_OriginalPitch;
private void Awake() { m_Rigidbody = GetComponent(); } private void OnEnable () { m_Rigidbody.isKinematic = false; m_MovementInputValue = 0f; m_TurnInputValue = 0f; } private void OnDisable () { m_Rigidbody.isKinematic = true; } private void Start() { m_MovementAxisName = "Vertical"; m_TurnAxisName = "Horizontal"; m_OriginalPitch = m_MovementAudio.pitch; }
private void Update() { // Store the player's input and make sure the audio for the engine is playing. EngineAudio (); } private void EngineAudio() { // Play the correct audio clip based on whether or not the tank is moving and what audio is currently playing. if(Mathf.Abs(m_MovementInputValue) < 0.1f && Mathf.Abs(m_TurnInputValue) < 0.1f) { if (m_MovementAudio.clip == m_EngineDriving) { m_MovementAudio.clip = m_EngineIdling; m_MovementAudio.pitch = Random.Range(m_OriginalPitch - m_PitchRange, m_OriginalPitch + m_PitchRange); m_MovementAudio.Play(); } } else { if (m_MovementAudio.clip == m_EngineIdling) { m_MovementAudio.clip = m_EngineDriving; m_MovementAudio.pitch = Random.Range(m_OriginalPitch - m_PitchRange, m_OriginalPitch + m_PitchRange); m_MovementAudio.Play(); } } } private void FixedUpdate() { float h = CrossPlatformInputManager.GetAxis(m_TurnAxisName); float v = CrossPlatformInputManager.GetAxis(m_MovementAxisName); MovementManagement (h, v); } void MovementManagement (float horizontal, float vertical) { // If there is some axis input... if(horizontal != 0f || vertical != 0f) { Vector3 moveVec = new Vector3(horizontal, 0f, vertical) m_Speed; m_Rigidbody.MovePosition (m_Rigidbody.position + moveVec Time.fixedDeltaTime); Rotating (horizontal, vertical); } } void Rotating (float horizontal, float vertical) {
// Create a new vector of the horizontal and vertical inputs.
Vector3 targetDirection = new Vector3(horizontal, 0f, vertical);
// Create a rotation based on this new vector assuming that up is the global y axis.
Quaternion targetRotation = Quaternion.LookRotation(targetDirection, Vector3.up);
// Create a rotation that is an increment closer to the target rotation from the player's rotation.
Quaternion newRotation = Quaternion.Lerp(GetComponent<Rigidbody>().rotation, targetRotation, turnSmoothing * Time.deltaTime);
// Change the players rotation to this new rotation.
m_Rigidbody.MoveRotation(newRotation);
} }
Your answer
Follow this Question
Related Questions
Track User Actions Within Unity 0 Answers
Audio stops playing after a while 0 Answers