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

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

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

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

Q&A

解決済

1回答

2127閲覧

[Unity] rb.velocity.normalized がゼロにならない。原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

0クリップ

投稿2021/07/11 03:57

提示コードのコメント部内部のコードですがvoid OnCollisionEnter();関数でrb.velocity,moveSpeed を0にしているのになぜゼロじゃない値が来るのでしょうか?

参考サイト: https://docs.unity3d.com/ja/2018.4/ScriptReference/Rigidbody-velocity.html

イメージ説明

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class MoveControl : MonoBehaviour 6{ 7 8 // ############################## コンポーネント ############################## 9 private Rigidbody rb; //Rigidbody 10 private Animator anim; //Animator 11 12 // ############################## 移動 ############################## 13 public Vector3 movePosition; //移動座標 14 private Vector3 movePrevPosition; //前の移動座標 15 public Vector3 moveVector; //移動方向 16 public float moveSpeed; //移動速度 17 18 // ############################## GameObject ############################## 19 20 //武器 21 public GameObject weapon; //ゲームオブジェクト 22 private Weapon weaponScript; //スクリプト 23 24 // ############################## 判定 ############################## 25 private bool isAttack; 26 public bool isMove; 27 28 void Start() 29 { 30 anim = GetComponent<Animator>(); //Animator 31 rb = GetComponent<Rigidbody>(); //Rigidbody 32 33 movePosition = new Vector3(0,0,0); //移動座標 34 moveVector = new Vector3(0,0,0); //移動方向 35 moveSpeed = 0; //移動速度 36 37 weaponScript = weapon.GetComponent<Weapon>(); //武器 38 39 40 isAttack = false; 41 isMove = false; 42 } 43///////////////////////////////////////////////////////////////////////////////// 44 void FixedUpdate() 45 { 46 rb.velocity = moveVector.normalized * moveSpeed; 47 } 48 49//////////////////////////////////////////////////////////////////////////////// 50 private void Attack() 51 { 52 53 } 54 55 56 private void Motion() 57 { 58 anim.SetFloat("move", (float)rb.velocity.magnitude); 59 } 60 61 62 63 private void Move() 64 { 65 if(isMove == true) 66 { 67 //移動方向 取得 68 moveVector = movePosition - transform.position; 69 moveVector.y = 0; 70 71 72 moveSpeed = 10; 73 //向きを変える 74 Quaternion look = Quaternion.LookRotation(moveVector, Vector3.up); 75 transform.localRotation = look; 76 77 isMove = false; 78 79 } 80 81 82 } 83 84 85 86 void Update() 87 { 88 Debug.Log(rb.velocity.magnitude); 89 90 91 Motion(); //モーション 92 Attack(); //攻撃 93 Move(); //移動 94 } 95 96 97 98 99 100 101//////////////////////////////////////////////////////////////////////////// 102 private void OnCollisionEnter(Collision collision) 103 { 104 if(collision.gameObject.layer == 1 >> 0) 105 { 106 moveSpeed = 0; 107 rb.velocity = new Vector3(0,0,0); 108 } 109 } 110//////////////////////////////////////////////////////////////////////////// 111 private void OnCollisionExit(Collision collision) 112 { 113 114 } 115 116 117 118 119 //イベント処理 120 121 public void AttackStart() 122 { 123 Debug.Log("Attack Start "); 124 } 125 126 public void AttackEnd() 127 { 128 Debug.Log("Attack End "); 129 } 130 131} 132

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

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

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

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

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

guest

回答1

0

ベストアンサー

提示コード下部のonCollisionEnter()部ですが地面としているTereeinがTerreinレイヤーでTreeのオブジェクトと衝突するのですがこれはまた別のレイヤー設定されているためそもそも当たり判定後の処理が行われてしないためでした。

cs

1 if(collision.gameObject.tag == "Tree") 2 { 3 moveSpeed = 0; 4 moveVector = new Vector3(0,0,0); 5 rb.velocity = new Vector3(0,0,0); 6 }

投稿2021/07/11 04:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問