It is necessary to make so that moving the finger to the right / left switches the scene.
2 answers
You can track svayp this way (taken from here )
private Vector3 fp; //ΠΠ΅ΡΠ²Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΡΠ°Π½ΠΈΡ private Vector3 lp; //ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΡΠ°Π½ΠΈΡ private float dragDistance; //ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ²Π°ΠΉΠΏΠ° private List<Vector3> touchPositions = new List<Vector3>(); //Π₯ΡΠ°Π½ΠΈΠΌ Π²ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΊΠ°ΡΠ°Π½ΠΈΡ Π² ΡΠΏΠΈΡΠΊΠ΅ void Start(){ dragDistance = Screen.height*20/100; //dragDistance ΡΡΠΎ 20% Π²ΡΡΠΎΡΡ ΡΠΊΡΠ°Π½Π° } foreach (Touch touch in Input.touches) //ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΈΠΊΠ» Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ²Π°ΠΉΠΏΠ° { //Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°ΠΊΠΎΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ /*if (touch.phase == TouchPhase.Began) //ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΊΠ°ΡΠ°Π½ΠΈΠ΅ { fp = touch.position; lp = touch.position; }*/ if (touch.phase == TouchPhase.Moved) //Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π½ΠΈΡ Π² ΡΠΏΠΈΡΠΎΠΊ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ { touchPositions.Add(touch.position); } if (touch.phase == TouchPhase.Ended) //ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΏΠ°Π»Π΅Ρ ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Ρ ΡΠΊΡΠ°Π½Π° { //lp = touch.position; //ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΡΠ°Π½ΠΈΡ. Π·Π°ΠΊΠΎΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ fp = touchPositions[0]; //ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΡΠ°Π½ΠΈΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΊΠ°ΡΠ°Π½ΠΈΠΉ lp = touchPositions[touchPositions.Count-1]; //ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΊΠ°ΡΠ°Π½ΠΈΡ //ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ 20% Π²ΡΡΠΎΡΡ ΡΠΊΡΠ°Π½Π° if (Mathf.Abs(lp.x - fp.x) > dragDistance || Mathf.Abs(lp.y - fp.y) > dragDistance) {//ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ //ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΈΠ»ΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΠΌ if (Mathf.Abs(lp.x - fp.x) > Mathf.Abs(lp.y - fp.y)) { //ΠΡΠ»ΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ... if ((lp.x>fp.x)) //ΠΡΠ»ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π²ΠΏΡΠ°Π²ΠΎ { //Π‘Π²Π°ΠΉΠΏ Π²ΠΏΡΠ°Π²ΠΎ Debug.Log("Right Swipe"); } else { //Π‘Π²Π°ΠΉΠΏ Π²Π»Π΅Π²ΠΎ Debug.Log("Left Swipe"); } } else { //ΠΡΠ»ΠΈ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ½ΠΌ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ if (lp.y>fp.y) //ΠΡΠ»ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²Π²Π΅ΡΡ
{ //Π‘Π²Π°ΠΉΠΏ Π²Π²Π΅ΡΡ
Debug.Log("Up Swipe"); } else { //Π‘Π²Π°ΠΉΠΏ Π²Π½ΠΈΠ· Debug.Log("Down Swipe"); } } } } else { //ΠΡΠΎ ΠΎΡΠ²Π΅ΡΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅Π½Π΅Π΅ 20% ΠΎΡ Π²ΡΡΠΎΡΡ ΡΠΊΡΠ°Π½Π° } } } And then load the stage
if ((lp.x>fp.x)) //ΠΡΠ»ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠ°Π²ΠΎ { //Π‘Π²Π°ΠΉΠΏ Π²Π²Π΅ΡΡ
SceneManager.LoadScene(1); } |
Track svayp) for example, when a button is pressed / touched, remember the position when the button is released - read the distance between these points.
If it corresponds to the one in which you want to change the scene, tell SceneManager to load the new scene.
- I have some ideas, could you tell me in what ways it can be traced? - DmitryDAN
- one@DmitryDAN, well, from the most banal. Hang some MonoBehaviour, which in Update checks and whether LMB was pressed in this frame and released. In the first case - we remember the current position of the cursor, in the second we calculate the distance between the current and memorized when pressed, we compare it with the distance you set for the shift. If it is equal or more - load a new scene - M. Green
|