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

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

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

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

Q&A

解決済

2回答

431閲覧

Unityチュートリアルでキャラクターがマウスの方向を向かない

murama2

総合スコア113

Unity

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

1グッド

0クリップ

投稿2019/03/24 10:35

編集2019/03/24 10:37

Unityチュートリアル「Survival Shooter」をやっているのですが、プレイヤーキャラがマウスの方向をむいてくれなくて困っています。
チュートリアル

チュートリアル通りにプレイヤーの動作用csファイルを作成したのですが、マウスの方向を向いてくれない状態です。
「if(Physics.Raycast(camRay, out floorHit, camRayLength, floorMask)){」部分の「floorMask」を削除したら向いてくれるようになったので、「floorMask」の値がよくないみたいなのですが、どう直したらいいかわからず、ご教授いただけますでしょうか。

「Floor」オブジェクトのレイヤーは「8:Floor」に設定しております。
また、「Debug.Log(floorMask);」で値を見たところ256となっておりました。

Unityバージョン:2018.1.0f2

using UnityEngine; public class PlayerMovement : MonoBehaviour { public float speed = 6f; //プレイやの移動速度 Vector3 movement; //プレイヤーの移動方向 Animator anim; //アニメーションコンポーネント Rigidbody playerRigidbody; //Rigidbodyコンポーネント int floorMask; //Floorとrayermaskを使う float camRayLength = 100f; //カメラからのray void Awake(){ //Floorのrayermaskを作成 floorMask = LayerMask.GetMask("Floor"); //コンポーネントを取得 anim = GetComponent<Animator>(); playerRigidbody = GetComponent<Rigidbody>(); } //オブジェクトが動くたびに呼ばれる void FixedUpdate(){ //インプットから左右上下の移動量を-1もしくは1で受け取る float h = Input.GetAxisRaw("Horizontal"); float v = Input.GetAxisRaw("Vertical"); //プレイヤーを動かすMove()を呼ぶ Move(h, v); //プレイヤーの方向を動かすTurning()を呼ぶ Turning(); //プレイヤーのアニメーションを設定するAnimating()を呼ぶ Animating(h, v); } //プレイヤーを動かす処理 void Move(float h, float v){ //移動量を指定 movement.Set(h, 0f, v); //移動するベクトルを1にし、移動する距離を設定する movement = movement.normalized * speed * Time.deltaTime; //プレイヤーのポジションを動かす playerRigidbody.MovePosition(transform.position + movement); } void Turning(){ //カメラから。マウスで刺している方向のrayを取得 Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition); //rayが衝突した情報を取得する RaycastHit floorHit; //rayを飛ばして、床に衝突した場合の処理 if(Physics.Raycast(camRay, out floorHit, camRayLength, floorMask)){ //マウスで指している場所と、プレイヤーの場所の差分を取得 Vector3 playerToMouse = floorHit.point - transform.position; //プレイヤはy座標には動かさない playerToMouse.y = 0f; //プレイヤーの場所から、マウスで指している場所への角度を取得 Quaternion newRotation = Quaternion.LookRotation(playerToMouse); //プレイヤーの角度(プレイヤーの向き)を、新しく設定 playerRigidbody.MoveRotation(newRotation); } } //アニメーションの処理 void Animating(float h, float v){ //プレイヤーの移動量が0以上の場合、walkingをtrueにする bool walking = h != 0f || v != 0f; //アニメーションのパラメーターOsWalkingをWalkingの値で設定する anim.SetBool("IsWalking", walking); } }
yamasho69👍を押しています

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

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

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

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

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

guest

回答2

0

床となるオブジェクトを作りなおしてみたところうまく動作するようになりました。

投稿2019/03/24 11:01

murama2

総合スコア113

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

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

0

ベストアンサー

Physics.RayCastの4つ目の引数は「Rayが当たることのできるレイヤー」です。
恐らく、「床」として存在するオブジェクトが「床」に相当するレイヤーになっていないのではないでしょうか。

投稿2019/03/24 10:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問