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

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

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

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

Unity3D

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

5854閲覧

UnityのCharacter Controllerで重力を働かせようとして

Um_kok

総合スコア39

C#

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

Unity3D

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/08/25 03:50

編集2020/08/25 03:58

重力がかかりません!

c#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Move : MonoBehaviour 6{ 7 8 private CharacterController characterController; 9 private Vector3 velocity; 10 11 // Start is called before the first frame update 12 void Start() 13 { 14 characterController = GetComponent<CharacterController>(); 15 transform.position = new Vector3(0f, 1f, 0f); 16 17 } 18 19 // Update is called once per frame 20 void Update() 21 { 22 23 velocity.y += Physics.gravity.y; 24 25 if (characterController.isGrounded) 26 { 27 velocity = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical")); 28 29 characterController.Move(velocity); 30 31 } 32 } 33} 34

試したこと
velocity.y += Physics.gravity.y; の場所を変えてみたりしたのですが、なぜか重力が働きません、なぜでしょうか?Projection SettingもみたのですがPhysics.yに9.81がかかっていました 理由など教えてもらえたら幸いです

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

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

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

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

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

guest

回答2

0

自己解決

using UnityEngine;
using System.Collections;

public class Move : MonoBehaviour {

private CharacterController characterController; private Vector3 velocity; [SerializeField] private float walkSpeed; // Use this for initialization void Start () { characterController = GetComponent <CharacterController> (); } // Update is called once per frame void Update () { if(characterController.isGrounded) { velocity = new Vector3 (Input.GetAxis ("Horizontal"), 0f, Input.GetAxis ("Vertical")); } velocity.y += Physics.gravity.y * Time.deltaTime; characterController.Move(velocity * walkSpeed * Time.deltaTime); }

}

投稿2020/08/25 06:53

Um_kok

総合スコア39

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

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

0

まず大前提としてCharacterControllerは独特すぎるのと処理がパックされていて外部から手が入れられないので、素直にコライダー+Rigidbodyでやったほうが拡張性が高いです。

で、質問の件ですが公式リファレンスにもある通りmoveに重力を加味した速度を渡してください。
https://docs.unity3d.com/ja/current/ScriptReference/CharacterController.Move.html

投稿2020/08/25 04:07

hogefugapiyo

総合スコア3302

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

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

Um_kok

2020/08/25 04:26

すみません。このコードはあるサイトを参照して作ったものなのですが、、 回答してくださったのに悪いのですが、 ソースコードが書けません。どうやって書けばいいのかソースコードお願いできますでしょうか?
Um_kok

2020/08/25 04:26

勉強不足ですみません
hogefugapiyo

2020/08/25 04:41

まず第一に、あるサイトとか言われても他の人にはわかりませんので参考にしたサイトがある場合はURLを併記しましょう。 第二に、URLを貼ったサイトのソースコードをちゃんと試してください。移動、ジャンプ、重力と必要な要素がちゃんと動くはずです。 最後に自分のソースコードとリファレンスのソースコードを比較して何が違うのかを考えてください。y軸の速度計算が足りていないということが理由として分かると思います
Um_kok

2020/08/25 06:54 編集

using UnityEngine; using System.Collections; public class Move : MonoBehaviour { private CharacterController characterController; private Vector3 velocity; [SerializeField] private float walkSpeed; // Use this for initialization void Start () { characterController = GetComponent <CharacterController> (); } // Update is called once per frame void Update () { if(characterController.isGrounded) { velocity = new Vector3 (Input.GetAxis ("Horizontal"), 0f, Input.GetAxis ("Vertical")); } velocity.y += Physics.gravity.y * Time.deltaTime; characterController.Move(velocity * walkSpeed * Time.deltaTime); } }
Um_kok

2020/08/25 06:55

if文の外に書くんですね。やっとわかりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問