Question by
Lukicaa · Apr 07, 2021 at 09:35 PM ·
2d gameif-statementscontrols
Can somebody help me out? How can I refresh the script with right/left arrow?
I already tried while loop(probably i use it in the wrong way.)
public class ReadableBook : MonoBehaviour
{
public Transform player;
public Transform book;
public GameObject PressE;
public GameObject glowingBook;
//public GameObject openedBook;
public float minRange;
public float maxRange;
public GameObject[] pages;
int broj = 0;
int pressEmath = 0;
// Start is called before the first frame update
void Start()
{
glowingBook.SetActive(false);
PressE.SetActive(false);
//openedBook.SetActive(false);
//pages.enabled = false;
pages[0].SetActive(false);
pages[1].SetActive(false);
pages[2].SetActive(false);
}
// Update is called once per frame
void Update()
{
if((Vector3.Distance(player.position, book.position) >= minRange) && (Vector3.Distance(player.position, book.position) <= maxRange))
{
if(Input.GetKeyDown(KeyCode.RightArrow))
{
broj++;
Debug.Log(broj);
}
if(Input.GetKeyDown(KeyCode.LeftArrow) && broj > 0)
{
broj--;
Debug.Log(broj);
}
glowingBook.SetActive(true);
PressE.SetActive(true);
if(Input.GetKeyDown(KeyCode.E))
{
if((Vector3.Distance(player.position, book.position) >= minRange) && (Vector3.Distance(player.position, book.position) <= maxRange))
{
if(Input.GetKeyDown(KeyCode.RightArrow))
{
broj++;
Debug.Log(broj);
}
if(Input.GetKeyDown(KeyCode.LeftArrow) && broj > 0)
{
broj--;
Debug.Log(broj);
}
pages[0].SetActive(true);
Debug.Log("pocetak");
if(broj == 0)
{
Debug.Log("stranica 0");
pages[0].SetActive(true);
pages[1].SetActive(false);
pages[2].SetActive(false);
}
else if(broj == 1)
{
Debug.Log("stranica 1");
pages[1].SetActive(true);
pages[0].SetActive(false);
pages[2].SetActive(false);
}
else if(broj == 2)
{
Debug.Log("stranica 2");
pages[2].SetActive(true);
pages[1].SetActive(false);
pages[0].SetActive(false);
}
}
}
if(Input.GetKeyDown(KeyCode.Backspace) && (Vector3.Distance(player.position, book.position) >= minRange) & (Vector3.Distance(player.position, book.position) <= maxRange))
{
//openedBook.SetActive(false);
}
}
else
{
glowingBook.SetActive(false);
PressE.SetActive(false);
//openedBook.SetActive(false);
}
}
}
Comment
I think that is better to create a separate method that enable a certain page when certain number is given, I made it to do a loop, so u can just increase or decrease brog in the Start()
method without care about the limits here using a for loop with a if nested to identify the one to enable
public void EnablePage(int brog){
//create a loop from pages for any integer given
int index = brog%pages.Length;
//invert negative value
if (index < 0)
index = pages.Length + index;
//print page to enable
Debug.Log("stranica " + index.ToString());
for (int i = 0; i < pages.Length; i++){
if(index != i)
pages[i].SetActive(false);
else
pages[i].SetActive(true);
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220613031858im_/https://answers.unity.com/themes/thub/images/avi.jpg)