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

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

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

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

受付中

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

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

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

1回答

0評価

0クリップ

5830閲覧

投稿2019/10/12 10:14

編集2022/01/12 10:55

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

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

※参考サイト: 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; } }

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Unity3D

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