私はプレイヤーに少し前に飛び乗るように努力してきましたが、私は立ち往生しています。私は他の答えを見て、それらを試してみましたが、私はそれが私がそれを望んでいた方法で動作させることができませんでした。私はいくつかの異なる方法を試しましたが、彼らのどのような方法でも働いている人はいません。ほとんどの場合、バウンスは同じ距離ではなく、プレーヤーが地面に着陸したときに、プレーヤーが前方にスライドします。これは私が望むものではありません。私はCrossy道路のように私のキャラクタージャンプをしたいです。私が試したことが1つあります:どのようにプレイヤーをジャンプさせることができますか?
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;
}
}
ほとんどのジャンプが異なるサイズであり、一貫性が必要なので、これは機能しませんでした。私が試したもう1つのことは次のとおりです。
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));
}
}
}
これはうまくいかず、プレーヤーが着陸したときに前方にスライドしました。私が最後に試したことは、ジャンプとアイドルのあるアニメーションを使用していましたが、なぜそれが動作していなかったのか分からないのですが、それも動作していませんでした。私が知りたいのは、スライドすることなく毎回同じ距離を飛ばすことができない、または私が望むように私の以前のやり方を修正できることです。
私はこれがうまく動作しないように見えますが、なぜこれが動作しなくなるのか知っていますか? –
何が起こっているのですか? –
ちょうど動いていません –