- Home /
Other
Sensitivity Slider Issue
I am trying to make a sensitivity slider so the player can adjust how quickly the character moves. I made a slider and speed variable (that is attached to my player script). The slider moves like it should and the handle value saves, but the speed remains the same. I cannot get the sensitivity to change. I know I am close, but I can't figure out what I need to add or what I could be doing wrong.
Here's my code:
Code 1:
using UnityEngine;
using System.Collections;
using UnityEngine .Audio ;
using UnityEngine .SceneManagement ;
public class Player : MonoBehaviour {
public float speed;
void Update(){
if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Moved) {
Vector2 touchDeltaPosition = Input.GetTouch (0).deltaPosition;
transform.Translate (touchDeltaPosition.x * speed, touchDeltaPosition.y * speed, 0);
//transform.Translate (touchDeltaPosition.x, touchDeltaPosition.y, 0);
if (PausePanel.isPaused == true) {
//Input.GetTouch (0).phase == TouchPhase.Canceled;
transform.Translate (touchDeltaPosition.x * 0, touchDeltaPosition.y * 0, 0);
}
}
}
Code 2:
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class PausePanel : MonoBehaviour {
public Slider sensitivitySlider;
private Player instance;
void Start(){
instance.GetComponent <Player> ();
}
public void SensitivityControl (float sensitivityControl){
instance.speed = sensitivityControl;
PlayerPrefs.SetFloat ("CurSens", instance.speed);
}
}
Answer by Dibbie · Jun 25, 2016 at 07:50 AM
You never set instance.
In your void Start(), you should have
instance.GetComponent <Player> ();
become
instance = GameObject.Find("Player").GetComponent<Player>();
and in the Fine(), youd change the word "Player" to whatever name your player is, in your hierarchy.
If you want to use the method you have now, youd have to make a public GameObject (for example purposes, lets assume you called it "playerReference", then in Start() make it look like:
instance = playerReference.GetComponent<Player>();
Thanks for getting back to me! I tried what you said, but still had no luck. $$anonymous$$y audio slider works perfectly, but the sensitivity is not working. I tried dragging the slider all the way down and all the way up, but the speed is always the same.
Here's my updated code:
Code 1:
using UnityEngine;
using System.Collections;
using UnityEngine .Audio ;
using UnityEngine .Scene$$anonymous$$anagement ;
public class Player : $$anonymous$$onoBehaviour {
public float speed;
void Update()
{
if (!PausePanel.isPaused && Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.$$anonymous$$oved) {
Vector2 touchDeltaPosition = Input.GetTouch (0).deltaPosition;
transform.Translate (touchDeltaPosition.x * speed, touchDeltaPosition.y * speed, 0);
}
if(!PausePanel.isPaused && mySpriteRenderer != null)
{
if(Input.GetTouch (0).deltaPosition .x<0)
{
// flip the sprite
mySpriteRenderer.flipX = true;
}
if(Input.GetTouch (0).deltaPosition.x >0)
{
// flip the sprite
mySpriteRenderer.flipX = false;
}
}
Code 2:
using UnityEngine;
using System.Collections;
using UnityEngine.Scene$$anonymous$$anagement;
using UnityEngine.UI;
public class PausePanel : $$anonymous$$onoBehaviour {
public Slider sensitivitySlider;
void Start(){
if (sensitivitySlider) {
instance.speed = PlayerPrefs.GetFloat ("CurSens");
sensitivitySlider.value = instance.speed;
}
instance = GameObject.Find("Biting Tyson Head").GetComponent <Player> ();
}
public void SensitivityControl (float sensitivityControl){
instance.speed = sensitivityControl;
PlayerPrefs.SetFloat ("CurSens", instance.speed);
}
Hmm... "Instance" may not actually be a reference to anything (ie, Script 1), so try a slightly easier way - in your Script 1, add in the Update() speed = PlayerPrefs.GetFloat("CurSens");
since your setting it anyway as a player pref, just directly access it from Script 1, and let Script 2 set it.
I tried this as well, but it is still not working. I did just realize my instance is set as a private variable. I am doing a build now and will see if this solves anything. Got to figure this out!
Follow this Question
Related Questions
Sensitivity Slider 1 Answer
Cross Platform Input Controller Not Working on Mobile Device 2 Answers
Use touch to spawn a prefab 1 Answer
Different speed on different phones 0 Answers
Sensitivity sliders not working 1 Answer