私のプレーヤーがオブジェクトの前でジャンプするとき、それはちょうどそれを通して突き進んで、私はそれを修正する方法を知らない。私はそれが私のプレーヤーを移動するためにトランスフォームを使用しているためですが、これはジャンプするための最も簡単な方法でしたので、私はそれを変更したくないです。 - あなたが本当に変換によって暗示現在位置から目的地までのルートを計算する必要がある、とプレイヤーがオブジェクトを飛び越さないようにするにはどうすればよいですか?
using UnityEngine;
using System.Collections;
public class MovePlayer : MonoBehaviour
{
private Vector3 newPos;
private Vector3 up = new Vector3 (0, .3f, 0);
private bool jumping = false;
public Rigidbody rigidbody;
void Start(){
rigidbody = GetComponent<Rigidbody>();
}
void Update(){
rigidbody.freezeRotation = true;
if (!jumping) {
if (Input.GetKeyDown (KeyCode.UpArrow)) {
newPos = Vector3.forward + transform.position;
transform.rotation = Quaternion.Euler (0, 0, 0);
transform.position = (newPos);
transform.position = newPos + up;
}
if (Input.GetKeyDown (KeyCode.DownArrow)) {
newPos = Vector3.back + transform.position;
transform.rotation = Quaternion.Euler (0, 180, 0);
transform.position = (newPos);
transform.position = newPos + up;
}
if (Input.GetKeyDown (KeyCode.RightArrow)) {
newPos = Vector3.right + transform.position;
transform.rotation = Quaternion.Euler (0, 90, 0);
transform.position = (newPos);
transform.position = newPos + up;
}
if (Input.GetKeyDown (KeyCode.LeftArrow)) {
newPos = Vector3.left + transform.position;
transform.rotation = Quaternion.Euler (0, -90, 0);
transform.position = (newPos);
transform.position = newPos + up;
}
}
}
void OnCollisionEnter(Collision other)
{
if (other.gameObject.CompareTag ("Ground"))
jumping = false;
}
void OnCollisionExit(Collision other)
{
if (other.gameObject.CompareTag("Ground"))
jumping = true;
}
}
あなたは私はあなたのような何かを行うことができると思い衝突検出 – Stefan
のいくつかの並べ替えをする必要があります...ちょうど
transform.position
でRigidbody
を動かすような役に立たないだろうMovePosition
とMoveRotation
を使用して、他の真/有効にするかである必要がありますあなたはジャンプのために行い、0にそれぞれの方向に "スピード"を設定しました。これは、衝突検出モードを連続に設定する必要があるかもしれません。またはプレーヤーのコライダーを(側面の可能性がある場合は上に)またはオブジェクトを少し増やします。 –