Я пытался заставить своего игрока немного ускориться вперед, и я застрял. Я посмотрел на другие ответы и попробовал их, но потом я не мог заставить его работать, как я этого хотел. Я пробовал несколько разных способов, но никто из них не работает, как они должны. Большую часть времени отскоки были не одинаковыми, и иногда, когда игрок садится на землю, игрок продвигается вперед, что не то, что я хочу. Я хочу, чтобы мой персонаж прыгнул, как на дороге Кросси. Вот одна вещь, которую я пробовал:Как я могу заставить своего игрока прыгать?
using UnityEngine;
using System.Collections;
public class MovePlayer : MonoBehaviour
{
Vector3 endPos;
int numBackwards = 0;
bool jumping = false;
public Rigidbody rigidBody;
//public Collider theCollider;
void Start()
{
rigidBody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
rigidBody.freezeRotation = true;
endPos = gameObject.transform.position;
if (!jumping)
{
if (Input.GetButtonDown("up") && gameObject.transform.position == endPos) {
if (numBackwards < 0)
{
numBackwards++;
}
else
{
UpdateScore.score++;
}
transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
transform.Translate(Vector3.forward * 110 * Time.deltaTime, Space.World);
}
else if (Input.GetButtonDown("down") && gameObject.transform.position == endPos)
{
transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
transform.Translate(-Vector3.forward * 110 * Time.deltaTime, Space.World);
numBackwards--;
}
else if (Input.GetButtonDown("left") && gameObject.transform.position == endPos)
{
transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
transform.Translate(Vector3.left * 110 * Time.deltaTime, Space.World);
}
else if (Input.GetButtonDown("right") && gameObject.transform.position == endPos)
{
transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World);
transform.Translate(Vector3.right * 110 * Time.deltaTime, Space.World);
}
}
}
void OnCollisionEnter(Collision other)
{
if (other.gameObject.CompareTag("Ground"))
jumping = false;
}
void OnCollisionExit(Collision other)
{
if (other.gameObject.CompareTag("Ground"))
jumping = true;
}
}
Это не сработало, потому что почти все прыжки были разные размеры, и мне нужно, чтобы они были последовательными. Еще одна вещь, которую я пробовал:
public float distance;
public float fspeed;
public float uspeed;
//PRIVATE
private Rigidbody rigidBody;
void Awake()
{
rigidBody = GetComponent<Rigidbody>();
rigidBody.freezeRotation = true;
}
void FixedUpdate()
{
if (Physics.Raycast(transform.position, -Vector3.up, distance + 0.1F))
{
if (Input.GetKeyDown(KeyCode.UpArrow))
{
rigidBody.AddForce(new Vector3(0, uspeed, fspeed));
}
if (Input.GetKeyDown(KeyCode.DownArrow))
{
rigidBody.AddForce(new Vector3(0, uspeed, -fspeed));
}
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
rigidBody.AddForce(new Vector3(fspeed, uspeed, 0));
}
if (Input.GetKeyDown(KeyCode.RightArrow))
{
rigidBody.AddForce(new Vector3(-fspeed, uspeed, 0));
}
}
}
Это не сработало, и когда игрок приземлился, он продвинулся бы вперед. Последнее, что я пробовал, это использовать анимацию с прыжком и бездействием, которые я не мог понять, почему она не работает, но это тоже не работает. То, что я хотел бы знать, - это лучший способ, с помощью которого я не могу заставить своего игрока каждый раз прыгать на одинаковое расстояние без скольжения или как я могу исправить свои предыдущие способы заставить их работать, как я этого хочу.
Я не могу заставить это работать, вы знаете, почему это приведет к тому, что это не сработает? –
Что происходит? –
Это просто не движется. –