質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

983閲覧

unityでジャンプを一定量の上昇にしたい

sasami_unity

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/03/29 17:51

unityのジャンプの挙動が変なので直したいです。今はスペースキーを少しだけ押すと上にわずかに上がるのですが、押したら押した時間に関係なく一定量上がるようにしたいです。
あとスマホ用に画面のボタンを押すとジャンプする関数を作りたいのですが、 色々試しましたがうまく実装できませんでした。
isGroundedの接地判定が平面でもfalseになるので、キャラクターの下にPhysics.RayCastを飛ばして判定を取得しています。
よろしくお願いします。
void Start()
{
if (myPV.IsMine) //自キャラであれば実行
{
//MainCameraのtargetにこのゲームオブジェクトを設定
mainCam = Camera.main;
mainCam.GetComponent<CCameraScript>().target = this.gameObject.transform;
}
}
// Update関数は1フレームに1回実行される
void Update()
{
if (!myPV.IsMine)
{
return;
}
moveControl(); //移動用関数
RotationControl(); //旋回用関数
//最終的な移動処理
//(これが無いとCharacterControllerに情報が送られないため、動けない)
controller.Move(moveDirection * Time.deltaTime);
}
void moveControl()
{
//★進行方向計算
//キーボード入力を取得
float v = Input.GetAxisRaw("Vertical"); //InputManagerの↑↓の入力
float h = Input.GetAxisRaw("Horizontal"); //InputManagerの←→の入力
Debug.Log("v==============" + v);
h = PlayerManager.playerx;
v = PlayerManager.playery;
//カメラの正面方向ベクトルからY成分を除き、正規化してキャラが走る方向を取得
Vector3 forward = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized;
Vector3 right = Camera.main.transform.right; //カメラの右方向を取得
//カメラの方向を考慮したキャラの進行方向を計算
targetDirection = h * right + v * forward;
//真下にレイを飛ばして接地判定
rayPosition = transform.position + new Vector3(0.0f, 0.1f, 0.0f);
ray = new Ray(rayPosition, Vector3.down);
isGrounded = Physics.Raycast(ray, rayDistance);
//Debug.Log("isGrounded==============" + isGrounded);
//★地上にいる場合の処理
if (isGrounded)
{
//移動のベクトルを計算
moveDirection = targetDirection * speed;
//Jumpボタンでジャンプ処理
if (Input.GetButton("Jump"))
{
//animator.SetBool("is_jumping", true);
Debug.Log("ジャンプ処理");
moveDirection.y = jumpSpeed;
}
}
else //空中操作の処理(重力加速度等)
{
//animator.SetBool("is_jumping", false);
float tempy = moveDirection.y;
//(↓の2文の処理があると空中でも入力方向に動けるようになる)
//moveDirection = Vector3.Scale(targetDirection, new Vector3(1, 0, 1)).normalized;
//moveDirection *= speed;
moveDirection.y = tempy - gravity * Time.deltaTime;
}

//★走行アニメーション管理 if (v > .1 || v < -.1 || h > .1 || h < -.1) //(移動入力があると) { animator.SetBool("is_running", true); //animator.SetFloat("Speed", 1f); //キャラ走行のアニメーションON } else //(移動入力が無いと) { animator.SetBool("is_running", false); // animator.SetFloat("Speed", 0f); //キャラ走行のアニメーションOFF } } void RotationControl() //キャラクターが移動方向を変えるときの処理 { Vector3 rotateDirection = moveDirection; rotateDirection.y = 0; //それなりに移動方向が変化する場合のみ移動方向を変える if (rotateDirection.sqrMagnitude > 0.01) { //緩やかに移動方向を変える float step = rotateSpeed * Time.deltaTime; Vector3 newDir = Vector3.Slerp(transform.forward, rotateDirection, step); transform.rotation = Quaternion.LookRotation(newDir); } } public void Onjump() {

//ここにジャンプ処理を追加したいです
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ayousanz

2021/04/01 10:14 編集

コードが見にくいので,質問の書き方にそってコードがシンタックスハイライトされるようにしてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問