[解決済み] Rigidbody GameObjectの正しい動かし方
2022-02-25 12:34:59
質問
Unityを学び始めたばかりです。このスクリプトを使って簡単な箱の動きを作ろうとしました。前提としては、誰かが'w'を押すたびにボックスが前に移動します。
public class PlayerMover : MonoBehaviour {
public float speed;
private Rigidbody rb;
public void Start () {
rb = GetComponent<Rigidbody>();
}
public void Update () {
bool w = Input.GetButton("w");
if (w) {
Vector3 move = new Vector3(0, 0, 1) * speed;
rb.MovePosition(move);
Debug.Log("Moved using w key");
}
}
}
これを使うと、いつも'w'キー押下でボックスが前に進みません。私のコードに何か問題があるのでしょうか?私は、私のコードにある
ベクター3
move
が設定されているので、z軸をspeedに置き換えてみましたが、うまくいきません。どなたか、どこを間違えているのか教えてください。
解決方法は?
移動する
Rigidbody
と
Rigidbody.MovePosition
で回転させ
Rigidbody.MoveRotation
周りのオブジェクトと適切に衝突させたい場合。
Rigidbody
は、位置、回転、Translate変数/関数によって移動してはいけません。
のようにあらかじめ定義されているわけではありません。
シェリンビヌ
が挙げられますが、問題はそれだけではありません。もし、それを定義して
KeyCode.W
それでもうまくいきません。オブジェクトは一度移動して停止します。
変更
Vector3 move = new Vector3(0, 0, 1) * speed;
rb.MovePosition(move);
になります。
tempVect = tempVect.normalized * speed * Time.deltaTime;
rb.MovePosition(transform.position + tempVect);
これでいいはずだ。
public float speed;
private Rigidbody rb;
public void Start()
{
rb = GetComponent<Rigidbody>();
}
public void Update()
{
bool w = Input.GetKey(KeyCode.W);
if (w)
{
Vector3 tempVect = new Vector3(0, 0, 1);
tempVect = tempVect.normalized * speed * Time.deltaTime;
rb.MovePosition(transform.position + tempVect);
}
}
最後に、wasdキーでオブジェクトを移動させたいのだと思います。もしそうであれば
Input.GetAxisRaw
または
Input.GetAxis
.
public void Update()
{
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
Vector3 tempVect = new Vector3(h, 0, v);
tempVect = tempVect.normalized * speed * Time.deltaTime;
rb.MovePosition(transform.position + tempVect);
}
関連
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] イールドリターン」の正しい使い方
-
[解決済み] C# の辞書を値で初期化する適切な方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015