У меня есть шар, стоящий на платформе, и я написал код, чтобы каждый раз, когда я прокручивал мяч, прыгает с одной платформы на другую в зависимости от силы салфетки. На данный момент мои платформы просто помещены в мою позицию, и у меня нет сценария для их случайного генерации. Единственный сценарий, который у меня есть, - это игрок для прокрутки и продвижения вперед.Единство Как прокрутить движение прыжка, используя силу добавления.
В настоящее время я делаю это движение, добавляя силу в двух направлениях, вверх и вперед, чтобы создать движение снаряда. Его работа, как и его предполагалось, но движение слишком медленное. Я хочу, чтобы он стал двигаться быстрее. Я попытался сыграть с силами, а также с массой мяча. Они действительно имеют значение, но я все равно хочу, чтобы мяч двигался быстрее, чем быстрее.
Является ли добавление силы лучшим способом для этого? Или вы порекомендовали бы другой способ?
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;
}
}
}
Просто быстрый совет: сохраните Rigidbody в 'Start()', поэтому вам не нужно использовать GetComponent каждый раз, когда вы хотите его использовать, что не очень оптимизировано. Это также сделает ваш код более чистым. 'Rigidbody rb; Start() {rb = GetComponent (); } ', а затем используйте rb вместо GetComponent в остальной части скрипта. Вы могли бы теоретически увеличить временные рамки ('Time.timeScale = 2'), чтобы сделать все вдвое больше скорости. Но я не рекомендую. Если вы хотите, чтобы мяч двигался быстрее, вы добавляете больше силы и увеличиваете сопротивление. https://docs.unity3d.com/ScriptReference/Rigidbody-drag.html – Maakep
Если какой-либо ответ решает вашу проблему, подумайте о том, чтобы принять его как правильный. _ (Принятие ответа помогает будущим посетителям, выходящим на эту страницу) _ – Kardux