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

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

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

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

Q&A

1回答

9751閲覧

坂道を下るときに坂道にくっついて移動したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

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

0グッド

0クリップ

投稿2019/10/12 10:14

編集2019/10/12 11:51

坂を上って下るときに地面この場合は坂道に張り付いて移動したいです、坂道を下るときに空中に浮いてから落下してしまい気持ちよくありません。重力はこれ以上強くしたくないので困っています。どうすればいいのでしょうか?

法線ベクトルを使って見舞いしたが変わりません。

※参考サイト: http://nnana-gamedev.hatenablog.com/entry/2017/12/19/223948#Vector3ProjectOnPlaneVector3-vector-Vector3-planeNormal%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95

※プレイヤースクリプトです、下記
イメージ説明

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { private Vector3 gravity; private Vector3 move; private Vector3 input; private Rigidbody rb; private const float gravity_speed = -10.0f; private const float walk_speed = 20.0f; private bool isJump; private bool isGround; private GameObject obj_ground; private Ground spt_ground;//地面判定 private Vector3 n; private Vector3 nomral; // Start is called before the first frame update void Start() { obj_ground = GameObject.Find("chr_ground"); spt_ground = obj_ground.GetComponent<Ground>(); isGround = false; isJump = false; gravity.y = gravity_speed; rb = GetComponent<Rigidbody>(); } // Update is called once per frame void Update() { input.x = Input.GetAxis("Horizontal"); input.z = Input.GetAxis("Vertical"); Vector3 move_z; Vector3 move_x; move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input.z * walk_speed; move_x = Camera.main.transform.right * input.x * walk_speed; move = move_x + move_z; //+ new Vector3(rb.velocity.x,0,rb.velocity.z); // move.y = gravity.y; n = Vector3.ProjectOnPlane(move,nomral); if (move != Vector3.zero) { Vector3 v = move; v.y = 0; transform.rotation = Quaternion.LookRotation(v.normalized); } } private void FixedUpdate() { rb.velocity = new Vector3(n.x, rb.velocity.y, n.z); rb.AddForce(gravity); if(isGround == true) { rb.velocity = new Vector3(n.x, 0, n.z); } } private void OnCollisionStay(Collision c) { nomral = c.contacts[0].normal; isGround = true; gravity.y = 0; //rb.velocity = new Vector3(rb.velocity.x, gravity.y, rb.velocity.z); } private void OnCollisionExit(Collision collision) { isGround = false; gravity.y = gravity_speed; } }

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

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

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

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

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

guest

回答1

0

とにかく解決が先決で、挙動に特にこだわらないのならジャンプしていない時は常に下向きに力を加え続けることで簡単に実現できます。

ただしこれでは不具合が発生すると思うので追加で下方にRayを照射し、下にあるオブジェクトのタグが"Slope"なら力を加えるなど工夫するとより正しく動きます。

しかし、これは正しい物理的な挙動ではないので、もし正確さを求めるなら少しややこしいですがプレーヤーの足元に小さなPlaneを作成し、それの向きに動くようにすれば実現できます。
㊟この方法を採用するならPlaneの回転に制限をかけるなど細かな配慮が必須になります。

投稿2019/10/12 12:06

KanazawaKureha

総合スコア368

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

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

退会済みユーザー

退会済みユーザー

2019/10/12 12:15

斜面に沿うように上って下るときも坂道を下るようにしたいのですがどうればいいのでしょか?
退会済みユーザー

退会済みユーザー

2019/10/12 12:17

空のゲームオブジェクトにbox collliderを入れたそれをプレイヤースクリプトで取得して処理を書くやり方でプログラムしたいのですがどうすればいいのでしょか?
KanazawaKureha

2019/10/12 12:21

斜面に沿うように上って下るとはどのような状況でしょうか? その他の質問についてもよろしければ参考の写真などを質問に追記していただけると幸いです。
退会済みユーザー

退会済みユーザー

2019/10/12 12:23

斜面に沿うようにとは歩行キーを押しっぱなしで斜面を登り下るときに空中から落下してしまっているので "地面にくっついて移動したい"のです。
KanazawaKureha

2019/10/12 12:33

それは物理法則に反していますし、「常に離れる」「常に重なる」は簡単ですが「常に接する(質問にあったような挙動)」はその性質上、難易度の高めの問題になります。やはり常に下方に向かってオブジェクトを"押さえつける"ことによって解決できないでしょうか?
退会済みユーザー

退会済みユーザー

2019/10/12 12:51

わかりました、重力をかける方法にします、坂道を下るときにキーを押してる時は空中にいて離したときに遅れて重力がついてくるのですがこれはどうしたら修正できるのでしょうか? また難易度がある場合どんな方法があるのでしょうか?
退会済みユーザー

退会済みユーザー

2019/10/12 13:07

常に下向きに重力をかけると斜面に上れないのですがどうすればいいのでしょうか?
KanazawaKureha

2019/10/12 13:29

重力が遅れる>>fpsを上げてみてください。 上れない>>重力は使わず、法線ベクトルに垂直な方向にAddForceしてください。 「接する」方法>>最急降下法を用いて、移動先の地面(点)との距離が最も近くなるプレーヤーの座標を探し出すと解決できます。
退会済みユーザー

退会済みユーザー

2019/10/12 15:29

また前の進むと上に上がってしまうのですがこれはどうすればいいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問