Ich habe einen Ball auf einer Plattform stehen und ich habe Code geschrieben, so dass jedes Mal, wenn ich nach oben wische, der Ball von einer Plattform zur anderen springt, abhängig von der Kraft des Wischens. Im Moment sind meine Plattformen nur von mir selbst positioniert und ich habe kein Skript für ihre zufällige Generation. Das einzige Skript, das ich habe, ist auf dem Player zum Wischen und Vorwärtsbewegen.unity So wischen Sie die Sprungbewegung mit Add Force.
Momentan mache ich diese Bewegung durch Hinzufügen von Kraft in zwei Richtungen, nach oben und nach vorne, um die Projektilbewegung zu erzeugen. Es funktioniert wie es auch angenommen wird, aber die Bewegung ist zu langsam. Ich möchte, dass es sich schneller bewegt. Ich habe versucht, mit den Kräften und der Masse des Balls zu spielen. Sie machen einen Unterschied, aber ich möchte immer noch, dass sich der Ball etwas schneller bewegt.
Ist das Hinzufügen von Kraft der beste Weg, dies zu tun? Oder würdest du einen anderen Weg empfehlen?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SwipeScript : MonoBehaviour {
public float maxTime;
public float minSwipeDist;
float startTime;
float endTime;
Vector3 startPos;
Vector3 endPos;
float swipeDistance;
float swipeTime;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began)
{
startTime = Time.time;
startPos = touch.position;
}
else if (touch.phase == TouchPhase.Ended)
{
endTime = Time.time;
endPos = touch.position;
swipeDistance = (endPos - startPos).magnitude;
swipeTime = endTime - startTime;
if (swipeTime < maxTime && swipeDistance > minSwipeDist)
{
swipe();
}
}
}
}
public void swipe()
{
Vector2 distance = endPos - startPos;
if (Mathf.Abs(distance.y) > Mathf.Abs(distance.x))
{
Debug.Log("Swipe up detected");
jump();
}
}
private void jump()
{
Vector2 distance = endPos - startPos;
GetComponent<Rigidbody>().AddForce(new Vector3(0, Mathf.Abs(distance.y/5), Mathf.Abs(distance.y/5)));
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Cube (1)") {
Debug.Log("collision!");
GetComponent<Rigidbody>().velocity = Vector3.zero;
GetComponent<Rigidbody>().angularVelocity = Vector3.zero;
}
}
}
Nur ein kurzer Tipp zum Thema: Speichern Sie Ihren Rigidbody in 'Start()', damit Sie GetComponent nicht jedes Mal verwenden müssen, wenn Sie es verwenden möchten, was nicht sehr optimiert ist. Es wird auch Ihren Code sauberer machen. 'Starrkörper rb; Start() {rb = GetComponent (); } 'und dann rb anstelle von GetComponent im Rest des Skripts verwenden. Sie könnten theoretisch die Zeitskala ('Time.timeScale = 2') erhöhen, um die Geschwindigkeit zu verdoppeln. Aber ich empfehle es nicht. Wenn Sie möchten, dass sich der Ball schneller bewegt, fügen Sie mehr Kraft hinzu und erhöhen den Widerstand. https://docs.unity3d.com/ScriptReference/Rigidbody-drag.html – Maakep
Wenn irgendeine Antwort Ihr Problem löste, denken Sie bitte darüber nach, es als das Richtige zu akzeptieren. _ (Annahme einer Antwort hilft zukünftigen Besuchern, auf diese Seite zu kommen) _ – Kardux