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

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

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

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

Unityでの着地判定(CharacterControllerを使用)をとってJumpアニメーションを途中で切る方法

Take.R5426
Take.R5426

総合スコア0

C#

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0評価

0クリップ

10閲覧

投稿2019/11/24 17:06

編集2022/01/12 10:58

現在UnityとC#で3Dアクションゲームを作っています。CharacterControllerを使ってキャラを動かしているのですが、ジャンプの開始の際にCharacterControllerのisGround=trueを使ってしまっているので着地をどうとればいいかわかりません。
(CharacterAnimationスクリプト内のInputButtonのif(isGround)でジャンプをしているが同じisGround内でanim.SetBool("jump",false)と書いてしまうとジャンプアニメーションが再生されないため)
Unityでキャラクターがジャンプ出来るようにするこちらの記事は拝見済みです。
この方法がわかればアニメーションを途中で切ることはできます。
よろしくお願いします。

using

using System.Collections.Generic; using UnityEngine; public class DS4InputManager : MonoBehaviour { protected float Rx, Ry, Lx, Ly =0; protected virtual void Update() { InputJoysticks(); if (Input.anyKeyDown) { InputButton(); } } protected virtual void InputJoysticks() { Rx = Input.GetAxisRaw("Horizontal"); Ry = Input.GetAxisRaw("Vertical"); Lx = Input.GetAxis("LHorizontal"); Ly = Input.GetAxis("LVertical"); Debug.Log("右(" + (int)Rx + "," + (int)Ry+")"); Debug.Log("左(" + (int)Lx + "," + (int)Ly + ")"); } protected virtual void InputButton() { if (Input.GetButtonDown("DS4x")) { Debug.Log("x(space)を押しました。"); } if (Input.GetButtonDown("DS4o")) { Debug.Log("o(enter)を押しました。"); } //追加があればこの下に追加 //if (Input.GetButtonDown("")) //{ //} } }

using

using System.Collections.Generic; using UnityEngine; public class CharacterActionManager : DS4InputManager { private CharacterController C_controller; [SerializeField] private float movespeed; [SerializeField] private float jumppower; private CharacterAnimation C_Animation; private Vector2 direction; private Vector2 jumpdirection; private void Start() { C_controller = gameObject.GetComponent<CharacterController>(); C_Animation = gameObject.GetComponent<CharacterAnimation>(); } protected override void Update() { base.Update(); GroundedCheck(); CharacterMove(); } protected override void InputJoysticks() { base.InputJoysticks(); Debug.Log(Lx); if (Lx != 0) { CharacterdirectionChange(Lx); Lx = Lx * movespeed; direction = new Vector2(Lx, 0); } else { direction = new Vector2(0, 0); } } protected override void InputButton() { base.InputButton(); if (C_controller.isGrounded) { if (Input.GetButtonDown("DS4x")) { jumpdirection.y = jumppower; } } } private void CharacterMove() { jumpdirection.y -= jumppower*2* Time.deltaTime; direction = direction + jumpdirection; C_controller.Move(direction* Time.deltaTime); } private void GroundedCheck() { if (!C_controller.isGrounded) { Debug.DrawLine(gameObject.transform.position, gameObject.transform.position - gameObject.transform.up,Color.green) ; if (Physics.Linecast(gameObject.transform.position, gameObject.transform.position-gameObject.transform.up)) { C_Animation.isGround = true; } else { C_Animation.isGround = false; } } if (C_controller.isGrounded) { C_Animation.isGround = true; } } private void CharacterdirectionChange(double direction) { Vector3 Angle = gameObject.transform.localEulerAngles; if (direction == 0) return; if (direction > 0) { Angle.y = 90f; } if(direction<0) { Angle.y= -90f; } gameObject.transform.localEulerAngles = Angle; } }

using

using System.Collections.Generic; using UnityEngine; public class CharacterAnimation : DS4InputManager { private Animator anim; private bool cananim; private bool stop; public bool isGround; public bool landground; private void Start() { anim = gameObject.GetComponent<Animator>(); cananim = false; stop = false; isGround = false; landground = true; } protected override void InputJoysticks() { base.InputJoysticks(); if (Lx != 0) { if (!anim.GetCurrentAnimatorStateInfo(0).IsName("jump")) { anim.SetBool("run", true); } } else { anim.SetBool("run", false); } } protected override void InputButton() { base.InputButton(); if (!stop) { if (Input.GetButtonDown("DS4o")) { anim.SetTrigger("skill" + 1); Debug.Log("skill" + 1); } } if (isGround) { if (Input.GetButtonDown("DS4x")) { anim.SetBool("jump", true); Debug.Log("JUMP"); } anim.SetBool("jump", false); } } }

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

sakura_hana
sakura_hana

2019/11/25 02:01

「着地をどうとればいいか」の意味が分かりません。 if \(isGround\) { 〜省略〜 } else { anim\.SetBool\("jump", false\); } ではダメなのでしょうか?
Take.R5426
Take.R5426

2019/11/25 06:47

そうするとjumpアニメーション中にスティックの入力があった際にrunアニメーションに切り替わってしまうので、ジャンプ後に着地するまでjumpアニメーションをし続け着地したらrunアニメーションに切り替わるというふうにしたいです。
sakura_hana
sakura_hana

2019/11/25 08:28

であれば「ジャンプ中」を示すフラグ(変数)を追加すればいいかと思います。
Take.R5426
Take.R5426

2019/11/25 09:32

うまくいきました。ありがとうございます。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

C#

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。