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

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

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

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

Q&A

1回答

2623閲覧

Unity3D ジャンプ中に壁にぶつかりながら走る時もキャラが落下するプログラムを組みたい(画像提示)

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

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

0グッド

0クリップ

投稿2019/04/18 15:35

画像のようにジャンプ中で壁に向かって走ると画像のようになりキャラが落下しません。
個別で落下する処理を書きましたがうまく動作しないので質問しました
どうすれば実装できるのか教えてくれますでしょうか?
イメージ説明

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); } //ジャンプ処理管理 int i = 0; void fjump(bool jump,bool ground) { if(jump == true && ground == true) { Debug.Log("jump"); rb.velocity = new Vector3(0,4.0f,0); isGround = false; isJump = false; i = 1; } if (jump == false && ground == false && i == 1)//落下 { rb.velocity = new Vector3(0,-1f,0); } i = 0; } // Update is called once per frame void Update () { Key_Input(); ray(); fjump(isJump, isGround); //Debug.Log(isGround); } void ray()//地面判定処理 { Ray ray = new Ray(transform.position, Vector3.down); if (Physics.Raycast(ray, out hit, 0.1f)) { if (hit.collider.tag == "isGround") { Debug.Log("ray"); isGround = true; isJump = false; } } } //キー入力管理 void Key_Input() { if (Input.GetKey(KeyCode.Space) && isGround == true) { //Debug.Log("key"); isJump = true; } inputHorizontal = Input.GetAxisRaw("Horizontal"); inputVertical = Input.GetAxisRaw("Vertical"); } void object_collision()//ブロック等に衝突してるときに進んだ場合の処理 { } //アニメーション管理クラス 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); } } private void OnCollisionEnter(Collision c) { string name = c.gameObject.tag; //地面判定 if("isGround" == name) { // Debug.Log("地面"); // isGround = true; rb.velocity = new Vector3(1,0,1); } } void CheckGround() { } }

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

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

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

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

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

guest

回答1

0

スクリプトだけでは確定できないので推測ですが、症状から察するに

C#

1private void OnCollisionEnter(Collision c) 2 { 3 string name = c.gameObject.tag; 4 5 //地面判定 6 if("isGround" == name) 7 { 8 // Debug.Log("地面"); 9 // isGround = true; 10 11 rb.velocity = new Vector3(1,0,1); 12 13 } 14 }

ここで壁にぶつかった場合も地面にぶつかったと判定されているんじゃないかと思われます。

投稿2019/04/19 01:16

Swordroot_M

総合スコア36

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問