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

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

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

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

受付中

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

削除済ユーザー
削除済ユーザー

総合スコア0

Unity3D

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

1回答

0評価

0クリップ

1772閲覧

投稿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() { } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Unity3D

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