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

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

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

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

受付中

RigidbodyのSpeedが5,6フレーム毎に0になる

Eaphiel
xeno

総合スコア0

C#

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

3リアクション

0クリップ

283閲覧

投稿2022/10/04 13:53

Windows11 Unity2021.3.11f.1
TPSのゲームでエルデンリングみたいなゲームを作っていて、RigidBody.Addforceでプレイヤーを移動させています。カメラの向きに対してWASDで移動し、RigidbodyのVelocityのXとZのsqrMagnitudeで速度の制限をします。

ですがRigidbodyのVelocityが5,6フレーム毎に0になり、思っているような動作にならないです。
Velocityの値で走るのと歩くアニメーションを切り替えているのでアニメーションがカクカクします。
また、移動速度が想定道理にいかないです。

ネットでいろいろ解決策を調べましたが、求めている情報がなく解決しませんでした。
また、2020.3.1f1のバージョンで作っていた同じゲームでは、まったく同じプログラムでRigidbodyの値も同じにしてもこの問題は起こりませんでした。
変わったこととしては、URPのプロジェクトでUnityChanSpringBoneとUniversalToonShaderforURPっていうPackageを使って(?)ます。
あとisSleeping()は常にFalseでした。

↓多分必要そうなの

void Update() { var horizontal = Input.GetAxis("Horizontal"); var vertical = Input.GetAxis("Vertical"); var cameraRotation = Quaternion.AngleAxis(cameraTransform.eulerAngles.y, Vector3.up); //Cameraの角度 var playerVector = cameraRotation * new Vector3(horizontal, 0, vertical).normalized;//進む方向 var velocity = new Vector2(rb.velocity.x, rb.velocity.z).sqrMagnitude; //Playerの速度 var speed = runSpeed; var speedLimit = runSpeedLimit; animator.SetFloat("Velocity", velocity); Debug.Log(velocity); //↓移動させてる if (velocity < speedLimit) { rb.AddForce(playerVector * speed, ForceMode.Accelaration); }

↓全文

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class PlayerController : MonoBehaviour { int health = 1000, stamina = 1000, mana = 1000; Transform playerTransform, cameraTransform; Rigidbody rb; Animator animator; Quaternion targetRotation; float runSpeed = 100, sprintSpeed = 200, runSpeedLimit = 15, sprintSpeedLimit = 30; bool moveable = true, staminable = true; enum playerState { LOCOMOTION, ATTACK, } playerState state = playerState.LOCOMOTION; void Awake() { Application.targetFrameRate = 60; } void Start() { playerTransform = gameObject.transform; cameraTransform = Camera.main.transform; rb = gameObject.GetComponent<Rigidbody>(); animator = gameObject.GetComponent<Animator>(); } void Update() { PlayerDead(); Move(); Attack(); } void Move() { var horizontal = Input.GetAxis("Horizontal"); var vertical = Input.GetAxis("Vertical"); var cameraRotation = Quaternion.AngleAxis(cameraTransform.eulerAngles.y, Vector3.up); //Cameraの角度 var playerVector = cameraRotation * new Vector3(horizontal, 0, vertical).normalized;//進む方向 var velocity = new Vector2(rb.velocity.x, rb.velocity.z).sqrMagnitude; //Playerの速度 var speed = runSpeed; var speedLimit = runSpeedLimit; animator.SetFloat("Velocity", velocity); Debug.Log(velocity); Debug.Log(rb.IsSleeping()); //回転 if (playerVector.sqrMagnitude >= 0.25f) { targetRotation = Quaternion.LookRotation(playerVector, Vector3.up); } transform.rotation = Quaternion.RotateTowards(playerTransform.rotation, targetRotation, 25.0f); //スタミナ if (stamina <= 1) { staminable = false; } else if (stamina >= 100) { staminable = true; } //移動速度 if (Input.GetKey(KeyCode.LeftShift) && staminable) { speed = sprintSpeed; speedLimit = sprintSpeedLimit; stamina--; } else { if (stamina < 1000) { stamina++; } } //移動 if (velocity < speedLimit) { rb.AddForce(playerVector * speed, ForceMode.Acceleration); ; } } }

↓Console
3.402671
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

3.402681
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

3.402676
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

0
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

14.47523
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

3.402697
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

3.40266
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

3.402676
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

3.402671
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

0
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

14.47524
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:52)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

False
UnityEngine.Debug:Log (object)
PlayerController:Move () (at Assets/Scripts/PlayerController.cs:53)
PlayerController:Update () (at Assets/Scripts/PlayerController.cs:38)

a.‫com, y_waiwai🎉を押しています

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/10/04 14:01

こちらの質問が他のユーザーから「プログラミングに関係のない質問」という指摘を受けました。

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

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

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

C#

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

Unity3D

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。