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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Unity3D

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

Q&A

0回答

297閲覧

unity3D ブロックの上に乗っているときもジャンプできるようにする方法が知りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

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

0グッド

0クリップ

投稿2019/04/18 09:36

編集2022/01/12 10:55

画像の紫のブロックの上に乗っているときもジャンプできるようにしたいのですがどすればいいのでしょうか?
Rayを飛ばすました、またDebug.logでisGroundなどの変数をのtrue falseを出力してみましたがわかりません教えてくれますでしょうか?
※ちなみに地面とブロックにはtag: isGroundを設定しています。
イメージ説明

using System.Collections; using System.Collections.Generic; using UnityEngine; public class UnichanController: MonoBehaviour { private Animator anim; private Rigidbody rb; private const float moveSpeed = 3.0f; float inputHorizontal; float inputVertical; float speedx;//加速度x float speedz;//加速度y float speedy; bool isJump = false;//ジャンプ判定 bool isGround = false;//地面判定 RaycastHit hit; // Use this for initialization void Start () { anim = GetComponent<Animator>(); rb = GetComponent<Rigidbody>(); } void FixedUpdate() { // カメラの方向から、X-Z平面の単位ベクトルを取得 Vector3 cameraForward = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized; // 方向キーの入力値とカメラの向きから、移動方向を決定 Vector3 moveForward = (cameraForward * inputVertical) + (Camera.main.transform.right * inputHorizontal); // 移動方向にスピードを掛ける。ジャンプや落下がある場合は、別途Y軸方向の速度ベクトルを足す。 //rb.velocity = (moveForward * moveSpeed) + new Vector3(0, rb.velocity.y, 0); rb.velocity = (moveForward * moveSpeed) + new Vector3(0, rb.velocity.y, 0); // キャラクターの向きを進行方向に if (moveForward != Vector3.zero) { transform.rotation = Quaternion.LookRotation(moveForward); } // Key_Input(); // Debug.Log(rb.velocity.y); Animation_Mng();//アニメ管理 speedy = Mathf.Abs(rb.velocity.y); } //ジャンプ処理管理 void fjump(bool jump,bool ground) { if(jump == true && ground == true) { Debug.Log("jump"); rb.velocity += new Vector3(0,2.0f,0); isGround = false; isJump = false; } } // Update is called once per frame void Update () { ray(); Key_Input(); fjump(isJump, isGround); Debug.Log(isGround); } void ray()//地面判定処理 { Ray ray = new Ray(transform.position, Vector3.down); if (Physics.Raycast(ray,out hit,8.0f)) { if(hit.collider.tag == "isGround") { Debug.Log("ray"); isGround = true; } } } //キー入力管理 void Key_Input() { if (Input.GetKey(KeyCode.Space) && isGround == true) { //Debug.Log("key"); isJump = true; } inputHorizontal = Input.GetAxisRaw("Horizontal"); inputVertical = Input.GetAxisRaw("Vertical"); } //アニメーション管理クラス void Animation_Mng() { if(inputHorizontal != 0) { anim.SetBool("Run",true); } if (inputVertical != 0) { anim.SetBool("Run", true); } if (inputHorizontal == 0 && inputVertical == 0) { anim.SetBool("Run", false); } //anim.speed = moveSpeed; } private void OnCollisionEnter(Collision c) { string name = c.gameObject.tag; //地面判定 if("isGround" == name) { // Debug.Log("地面"); //isGround = true; rb.velocity = new Vector3(0,0,0); } } void CheckGround() { } }

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

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

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

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

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

sakura_hana

2019/04/18 10:38

ソースコードを見る限り、恐らくisGroundがtrueにならないことが原因だと思います。 ありがちなのは ・Rayの始点(transform.position)が地面やブロックの表面より下にあるので衝突していない ・地面やブロック以外のオブジェクトに先にぶつかってif(hit.collider.tag == "isGround")を満たせていない などです。 Debug.Log(hit.collider.tag); とでも入れて確認してみてください。 「うまくできません」にも色々ありますので、他のDebug.Logの表示状況を記載すると回答が付きやすいと思います。
退会済みユーザー

退会済みユーザー

2019/04/18 12:58

文章を編集しました。
退会済みユーザー

退会済みユーザー

2019/04/18 14:05

質問ですがrayの開始地点というのはこの場合キャラクターの中心から↓に伸びてる線?みたいなことでいいのでしょうか?参考サイト: https://www.sejuku.net/blog/83620
stdio

2019/04/19 00:58

if(hit.collider.tag == "isGround") って一文省いたら行けませんか? なんか地面以外に当たっていない気がします。
sakura_hana

2019/04/19 01:07

操作した内容と、Debug.logで出力された内容をそのまま質問内に記載してください。 また、「Debug.Log(hit.collider.tag); とでも入れて確認してみてください。」の部分を検証してください。 >rayの開始地点=線? 線のray.originが開始地点です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問