UnityでMMDモデルを用いる際にisGroundedが反応しない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
プラム
記事: 164
登録日時: 6年前
住所: 東海地方

UnityでMMDモデルを用いる際にisGroundedが反応しない

#1

投稿記事 by プラム » 4年前

現在Unityでアクションゲームを制作しているのですが、全く上手くいかずに困っています。
明らかに床についているのに、isGrounde君がfalseを出してきます、普通の球体オブジェクトで同じ処理を試したけっか、球体オブジェクトではうまくいきました。
いろいろと解決方法を探したのですが、全くわからず質問させていただきました。

ソースコード

コード:

using UnityEngine;
using System.Collections;

public class Character : MonoBehaviour {

	public float spd = 0.1f;

	public float JumpPow = 3.0f;

	public int PlayType = 1;

	private CharacterController col;

	float jp;

	Vector3 DefVectle;

	private Animator animator;

	// Use this for initialization
	void Start () {
		col = GetComponent<CharacterController>();
		animator = GetComponent<Animator>();
		 
	}

	// Update is called once per frame
	void Update() {

		Vector3 movevec=Vector3.zero;


		if (jp > -3) {

			jp -= 0.1f;

		}

		/*if (col.isGrounded != true) {
			jp -= 0.1f;
		} else if (jp < 0) {

			jp += 0.1f;

		}*/



		if (PlayType == 2) {
			if (Input.GetKey ("d")) {

				movevec.x += 1.0f;

			}

			if (Input.GetKey ("a")) {

				movevec.x -= 1.0f;
		
			}


			if (col.isGrounded && Input.GetKeyDown ("w")) {
				jp = JumpPow;
				print ("Jump");

			}

		}

		if (PlayType == 1) {
			if (Input.GetKey ("right")) {

				movevec.x += 1.0f;

			}

			if (Input.GetKey ("left")) {

				movevec.x -= 1.0f;

			}

			if (col.isGrounded && Input.GetKeyDown ("up")) {
				jp = JumpPow;
				print ("Jump");
			} 
		}
			
		if (col.isGrounded != true) {
			movevec.y = jp;
		}

		col.Move (movevec*spd);

		if (movevec.x != 0) {
			movevec.y = 0;
			DefVectle = movevec;
			animator.SetBool ("is_moveing", true);
		} else {

			animator.SetBool ("is_moveing", false);

		}
		Quaternion q = Quaternion.LookRotation(DefVectle);          // 向きたい方角をQuaternionn型に直す .
		transform.rotation = Quaternion.RotateTowards(transform.rotation, q, 800 * Time.deltaTime);   // 向きを q に向けてじわ~っと変化させる.

	}
}

			
↓上手くいかないオブジェクトの画像
画像

↓上手くいったオブジェクトの画像
画像

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: UnityでMMDモデルを用いる際にisGroundedが反応しない

#2

投稿記事 by softya(ソフト屋) » 4年前

Unity以外で作成したモデルを利用する場合は、なにか対策しないといけなかった気がしますが、具体的な方法はだいぶ前なので覚えていません。ごめんなさい。
あるいは見えないボックスをモデルと重ねて、そちらに当たり判定させても良いかもしれません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
プラム
記事: 164
登録日時: 6年前
住所: 東海地方

Re: UnityでMMDモデルを用いる際にisGroundedが反応しない

#3

投稿記事 by プラム » 4年前

なるほど、そうやってやってみたのですが、アニメーションなど、いろいろと不都合な部分が多いので、やはりMMDのオブジェクトであたり判定をしたいです。

それか、もうisGroundedを使わずにジャンプさせるか、C言語+DxLibに乗り換えるかしようかと思ってます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: UnityでMMDモデルを用いる際にisGroundedが反応しない

#4

投稿記事 by softya(ソフト屋) » 4年前

「MMDモデル unity 当たり判定」あたりで検索するといろいろ出てくると思いますが単純な手はなくて色々と工夫しないといけないと思います。
複雑な形状の当たり判定は、遅くなるし誤判定も多いんでなるべくしないほうが良いんですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
プラム
記事: 164
登録日時: 6年前
住所: 東海地方

Re: UnityでMMDモデルを用いる際にisGroundedが反応しない

#5

投稿記事 by プラム » 4年前

でもやっぱり欲しい情報はGoogle大先生からじゃ手に入らないんですよね・・・
やっぱり複雑なモデルであたり判定をするのはやめた方がいいですかね・・・
ってことであきらめます、ボックスと重ねてあたり判定をするなりDxLibで作り直すなり、いろいろとほかの方法で試してみようかと思います!

ソフト屋さん、ありがとうございました!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: UnityでMMDモデルを用いる際にisGroundedが反応しない

#6

投稿記事 by softya(ソフト屋) » 4年前

ボックスと言ってもモーションと連動させるなら単純な手はやはり使えません。
格闘などのアクションをするなら手足のボーンなどに、当たり判定ボックス(形状は状況によります)をくっつけてやる必要があるわけです。

下記のようなアセットで付けるとか。
「Unityで3Dモデルの形にCollider(当たり判定)を付ける方法 」
http://movie-impression.com/wp/wp-conte ... A1%8C4.png

単純な単一ボックスで良いのかはゲームの性質を加味して考えないといけません。
地面に沈まないだけなら単一のボックスでも解決できる可能性はあります。
市販のゲームの場合は、当たり判定は地形や人物でシンプルな当たり判定形状と複雑な形状を組み合わせて当たり判定している場合も多いかと思います。
壁との接触なら単純な方が効率的ですが、髪の毛などのあたリ判定が単純すぎると食い込んで違和感が生じるでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る