Ich arbeite an 2D unendlich Runner. Ich habe unter Code, um Eingaben vom Bildschirm wischen, um zu springen, zu gleiten und schnell zu laufen. Ich stelle jumpHeight vom Herausgeber zur Verfügung und Wert ist 500 mit der Rahmenrate von 30. Code funktioniert im Allgemeinen gut, aber manchmal springt Spieler zu hoch für das Aufwischen. Ein ähnlicher Code funktioniert wie erwartet, wenn die Eingabe über Tastatur erfolgt. Warum dies geschieht, übersteigt mein Verständnis von Einheit. Jede Hilfe wird sehr geschätzt.Android wischen und addforce Einheit
using UnityEngine;
public class PlayerControl : MonoBehaviour
{
public float ForwardSpeed = 3.7f; //moves player in forward direction
public float speedOffset = 0.0f; //offset speed of player
public float JumpHeight = 250; //moves player in verticle direction
bool grounded = false; //checks if player is grounded or not
public Transform groundCheck;
float groundCheckRadius = 0.3f; //radius of groundcheck circle to check grounded bool
public LayerMask groundLayer;
Vector2 fingerStart;
Vector2 fingerEnd;
void Update()
{
foreach (Touch touch in Input.touches)
{
if (touch.phase == TouchPhase.Began)
{
fingerStart = touch.position;
fingerEnd = touch.position;
}
if (touch.phase == TouchPhase.Moved)
{
fingerEnd = touch.position;
if (Mathf.Abs(fingerEnd.y - fingerStart.y) > 50)//Vertical swipe
{
if (fingerEnd.y - fingerStart.y > 50)//up swipe
{
Jump();
}
else if (fingerEnd.y - fingerStart.y < -50)//Down swipe
{
//Slide();
}
fingerStart = touch.position;
}
}
if (touch.phase == TouchPhase.Stationary)
{
RunFast();
}
if (touch.phase == TouchPhase.Ended)
{
fingerEnd = touch.position;
if (Mathf.Abs(fingerEnd.y - fingerStart.y) > 50)//Vertical swipe
{
if (fingerEnd.y - fingerStart.y > 50)//up swipe
{
Jump();
}
else if (fingerEnd.y - fingerStart.y < -50)//Down swipe
{
//Slide();
}
}
}
}
if (Input.GetButton("Fire1"))
{
speedOffset = 2.5f;
}
else
{
speedOffset = 0.0f;
}
if (grounded && Input.GetKeyDown(KeyCode.UpArrow))
{
grounded = false;
GetComponent<Rigidbody2D>().AddForce(new Vector2(0, JumpHeight));
}
//check if circle overlaps with ground layer
grounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, groundLayer);
//Debug.Log(grounded);
}
void FixedUpdate()
{
//set players forward velocityto forward speed variable
Vector2 PlayerForwardvelocity = GetComponent<Rigidbody2D>().velocity;
// Vector2 PlayerJumpHeight = GetComponent<Rigidbody2D>().AddForce()
PlayerForwardvelocity.x = ForwardSpeed + speedOffset;
GetComponent<Rigidbody2D>().velocity = PlayerForwardvelocity;
}
void Jump()
{
if (grounded)
{
GetComponent<Rigidbody2D>().AddForce(new Vector2(0, JumpHeight));
speedOffset = 0.0f;
}
}
void RunFast()
{
if (Input.GetButton("Fire1"))
{
speedOffset = 2.5f;
}
else
{
speedOffset = 0.0f;
}
}
}
Laden Sie eine vollständige Version des kompilierenden Codes hoch. Ich brauche es, damit ich es mir durch Debugging ansehe. Sie können andere Funktionen entfernen, die nicht relevant sind. – Programmer
@Programmer Danke für die Antwort. Ich habe den Code bearbeitet. Einfach an ein Spielerobjekt anhängen. Ich habe ein Problem mit verschiedenen Gesten zum Wischen wie ein schneller Wisch, langsamer Ziehen, langer Ziehen. Speziell für einen langen Up-Drag-Spieler springt er sehr hoch. – RxC
Eine Sache kam mir in den Sinn. Bei meinem Projekt habe ich Probleme mit AddForce, ich kann es nicht genau erklären, aber es sieht so aus, als ob Force in falscher Situation hinzugefügt wird, wenn bereits eine Kraft hinzugefügt wurde, könnte es ein Problem geben. Versuchen Sie z. B. zurückzusetzen. Geschwindigkeit auf Y, kurz bevor Sie Sprungkraft hinzufügen. –