誰もが統一された2Dゲーム用の優れたジャンプスクリプトを持っていますか?私が動作するコードは、まだジャンプにはほど遠い、飛んでいるように見えます。
using UnityEngine;
using System.Collections;
public class movingplayer : MonoBehaviour {
public Vector2 speed = new Vector2(10,10);
private Vector2 movement = new Vector2(1,1);
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
float inputX = Input.GetAxis ("Horizontal");
float inputY = Input.GetAxis ("Vertical");
movement = new Vector2(
speed.x * inputX,
speed.y * inputY);
if (Input.GetKeyDown ("space")){
transform.Translate(Vector3.up * 260 * Time.deltaTime, Space.World);
}
}
void FixedUpdate()
{
// 5 - Move the game object
rigidbody2D.velocity = movement;
//rigidbody2D.AddForce(movement);
}
}
通常、ジャンプする人はRigidbody2D.AddForce
with Forcemode.Impulse
。オブジェクトがY軸に一度押し込まれ、重力により自動的に落下するように見える場合があります。
例:
rigidbody2D.AddForce(new Vector2(0, 10), ForceMode2D.Impulse);
上記の答えは、Unity 5以降では廃止されました。代わりにこれを使用してください!
GetComponent<Rigidbody2D>().AddForce(new Vector2(0,10), ForceMode2D.Impulse);
また、これにより、ジャンプの高さが非常にプライベートになり、スクリプト内でのみ編集可能になるため、これが私がしたことです...
public float playerSpeed; //allows us to be able to change speed in Unity
public Vector2 jumpHeight;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update ()
{
transform.Translate(playerSpeed * Time.deltaTime, 0f, 0f); //makes player run
if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)) //makes player jump
{
GetComponent<Rigidbody2D>().AddForce(jumpHeight, ForceMode2D.Impulse);
これにより、スクリプトに戻ることなく、Unity自体でジャンプの高さを編集できる場所になります。
サイドノート-上記の答えについてコメントしたかったのですが、ここにいるので私はできません。 :)
剛体コンポーネントのAddforce()メソッドを使用し、剛体がオブジェクトに接続され、重力が有効になっていることを確認します。次のようなものです。
gameObj.rigidbody2D.AddForce(Vector3.up * 10 * Time.deltaTime); or
gameObj.rigidbody2D.AddForce(Vector3.up * 1000);
要件と一致する組み合わせと値を確認し、それに応じて使用します。それが役に立てば幸い