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

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

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

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

Unity3D

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

Q&A

解決済

1回答

747閲覧

OnCollisionStay() FxiedUpdate() でどっちが先に実行されるのか知りたい。順序

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity3D

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

0グッド

0クリップ

投稿2020/02/15 12:05

提示コードのFiexedUpdate()とOnCollisionStay()関数の処理の順番が知りたいです。move.yには確実に値が入っているはずなのですが何かの順序?の違いでmove.yが0になってしまっているOnCollisionStay()とFixedUpdate()の実行順序に違いで何か起きているものと考えられるのですが?

質問 コーディングミスなのか順序のよる違いなのか知りたい。

実現するはずの処理内容
コリジョンに当たっているベクトルから平面ベクトルを求めて地面にそって移動するプログラム

using UnityEngine; public class Controller : MonoBehaviour { private float input_h; private float input_v; private Vector3 move; private Rigidbody rb; private float walk_speed;//移動速度 private Animator ani;//移動速度 private Vector3 gravity; private bool isJump = false;//ジャンプしてるかどうかを管理する private Vector3 v; private bool isDush; private Vector3 move_direction;//移動方向 // private CharacterController cc; GameObject ground_ray; /*坂道計算*/ GameObject forward_ray; [SerializeField] float slope_range; [SerializeField] Vector3 slope_direc = new Vector3(0, 0, 0); [SerializeField] Vector3 slope_direc_b = new Vector3(0, 0, 0); GameObject contacts; // [SerializeField] Vector3 slope_pos; // Use this for initialization void Start() { ground_ray = GameObject.Find("GroundCheck"); forward_ray = GameObject.Find("SlopeCheck"); contacts = GameObject.Find("contacts"); // cc = GetComponent<CharacterController>(); forward_ray.transform.position = slope_pos + forward_ray.transform.position; walk_speed = 100; gravity = Vector3.zero; rb = GetComponent<Rigidbody>(); ani = GetComponent<Animator>(); } void Gravity_Mng()//ジャンプ管理 { } void Move_Mng() { input_h = Input.GetAxis("Horizontal"); input_v = Input.GetAxis("Vertical"); Vector3 move_z = new Vector3(); Vector3 move_x = new Vector3(); move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v; move_x = Camera.main.transform.right * input_h; move_direction = move_x + move_z; move_direction.y = 0; move = move_direction * walk_speed; if (move_direction != Vector3.zero) { move_direction.y = 0; transform.rotation = Quaternion.LookRotation(move_direction.normalized); } } float getSpeed() { return Mathf.Abs(Mathf.Sqrt(move.x * move.x + move.z * move.z)); } // Update is called once per frame void Update() { Gravity_Mng(); Move_Mng(); Debug.Log(" update move.y: " + move.y); } ////////////////////////////////////////////////////////////////////////////////////////////// void FixedUpdate() { // rb.AddForce(move.x, move.y, move.z); rb.AddForce(move.x,move.y,move.z); Debug.Log(" Fixed move.y: " + move.y); } ////////////////////////////////////////////////////////////////////////////////////////////// /**/ private void OnCollisionStay(Collision collision) { // Debug.Log("OnCollisionStay: " + collision.contacts[0].point); contacts.transform.position = collision.contacts[0].point; // Debug.Log("あああああ"); Vector3 f = transform.forward; Vector3 vv = collision.contacts[0].normal; Vector3 dir = f - Vector3.Dot(f, vv) * vv; f = dir.normalized * walk_speed;//y軸だけ使う move.y = f.y; Debug.Log("f: " + move.y); } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

自己解決です。 Move_Mng()関数部のコードですが訂正と書かれている部分が間違ていました。
結局自分のコーディングミスでした。自己解決とさせていただきます。

void Move_Mng() { input_h = Input.GetAxis("Horizontal"); input_v = Input.GetAxis("Vertical"); Vector3 move_z = new Vector3(); Vector3 move_x = new Vector3(); move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v; move_x = Camera.main.transform.right * input_h; move_direction = move_x + move_z; move_direction.y = 0; // move = move_direction * walk_speed;//////ここのコード move.x = move_direction.x * walk_speed;//訂正 move.z = move_direction.z * walk_speed;//訂正 if (move_direction != Vector3.zero) { move_direction.y = 0; transform.rotation = Quaternion.LookRotation(move_direction.normalized); } }

投稿2020/02/15 12:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問