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

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

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

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

Unity

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

Q&A

解決済

1回答

5183閲覧

unity上でハンコン操作

pasta3

総合スコア1

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/07/22 08:41

編集2020/07/28 05:30

前提・実現したいこと

前提
unityを初めて1か月ほどの初心者。。
ハンドルコントローラー : logicool driving forve GT
unity バージョン :2019.4.3f1

実現したいこと
unityで道路を作成してハンドルコントローラー使用して車を操作したい

発生している問題・エラーメッセージ

CS1022
CS0116
CS8124
CS1519
CS1513
CS1026
計23エラーでています。

試したこと

using

1using UnityEngine; 2using UnityStandardAssets.CrossPlatformInput; 3 4namespace UnityStandardAssets.Vehicles.Car 5{ 6 [RequireComponent(typeof(CarController))] 7 public class CarUserControl : MonoBehaviour 8 { 9 private CarController m_Car; // the car controller we want to use 10 11 12 private void Awake() 13 { 14 // get the car controller 15 m_Car = GetComponent<CarController>(); 16 } 17 18 19 private void FixedUpdate() 20 { 21 // pass the input to the car! 22 float h = CrossPlatformInputManager.GetAxis("Horizontal"); 23 float v = 0; 24 float a = CrossPlatformInputManager.GetAxis("accel"); 25 float b = CrossPlatformInputManager.GetAxis("braek"); 26 public float AccelPower; 27 public float BreakPower; 28 29 var NewA = -a * PulsPower; 30 var NewB = b / BreakPower; 31 32 if (b > 0) 33 { 34 v = NewB; 35 } 36 else if (a > 0) 37 { 38 v = NewA; 39} 40 41 42 43 44#if !MOBILE_INPUT 45float handbrake = CrossPlatformInputManager.GetAxis("Jump"); 46 m_Car.Move(h, v, v, handbrake); 47#else 48 m_Car.Move(h, v, v, 0f); 49#endif 50 } 51 } 52}

補足情報(FW/ツールのバージョンなど)

public floatをfloatに書き換えると23個のエラーメッセージが消えます。
しかし、unity上でエラーが発生します。
未割り当てのローカル変数「BraekPower」の使用
未割り当てのローカル変数「AccelPower」の使用
とでます。
解決できていませんが補足事項として。

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

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

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

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

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

guest

回答1

0

ベストアンサー

【追記 2020/07/28】
まずC#のスコープの機能を理解されていないようなので、スクリプトを作成する前に初歩的なC#の仕組みから勉強することをお勧めします。私はこのサイトで初歩的な知識を身に付けました。

スコープ機能について簡単に説明すると以下のようなものです。

C#

1 public class CarUserControl : MonoBehaviour 2 { 3 int x;//このXをX1とする、このX1はこのカッコ内より内側のカッコで使用できる 4 void a() 5 { 6 x = 10;//このXはX1を参照している 7 } 8 9 void b() 10 { 11 int x; //このXはX1とは別物として認識される 12 int y;//このYはb()のカッコ内でしか使用できない、このカッコの外側では認識できない 13 } 14 15 void c() 16 { 17 y = 10;//参照できずエラーが発生する 18 } 19 }

スクリプトの内容はかなり簡素な作りで機能すると思われるので、勉強すればご自身で作成できるようになると思います。しかし、なぜこの作りで大丈夫なのか、どこに問題があったのかを理解できないと今後も躓いてしまうと思うので、分からない部分は調べるなどで少しずつ自力を身に着けていってください。

C#

1using UnityEngine; 2using UnityStandardAssets.CrossPlatformInput; 3 4namespace UnityStandardAssets.Vehicles.Car 5{ 6 [RequireComponent(typeof(CarController))] 7 public class CarUserControl : MonoBehaviour 8 { 9 private CarController m_Car; 10 public float AccelPower; 11 public float BrakePower; 12 private float handbrake; 13 private float h; 14 15 private void Awake() 16 { 17 m_Car = GetComponent<CarController>(); 18 } 19 20 private void FixedUpdate() 21 { 22 h = CrossPlatformInputManager.GetAxis("Horizontal"); 23 24 var a = CrossPlatformInputManager.GetAxis("accel"); 25 var b = CrossPlatformInputManager.GetAxis("braek"); 26 27 var NewAP = a * AccelPower; 28 var NewBP = -b * BrakePower; 29 30#if !MOBILE_INPUT 31 handbrake = CrossPlatformInputManager.GetAxis("Jump"); 32 m_Car.Move(h, NewAP, NewBP, handbrake); 33#else 34 m_Car.Move(h, NewAP, NewBP, 0f); 35#endif 36 } 37 } 38}

これは単純に計算値の問題だと思います、
a = a / 2 - 0.5f;
b = b / 2 + 0.5f;
ここの部分ですが、abともに0であってもaは-0.5、bは0.5になります。
よって、if (b > 0)の条件が常に満たされている為に発生しているはずです。

解決策として、まず入力を参照している値a,bを書き換えるのではなく、
入力値と移動に用いる移動力は別個の値に分けるべきです。
また、入力値に加速力を加えたい場合は+-するより×÷で計算すると今回のようなミスが発生しにくくなります。

以上を踏まえて変更すると以下のようになると思います。

cs

1float a = CrossPlatformInputManager.GetAxis("accel"); 2float b = CrossPlatformInputManager.GetAxis("braek"); 3public float AccelPower; 4public float BreakPower; 5 6var NewA = -a * PulsPower; 7var NewB = b / BreakPower; 8 9if (b > 0) 10{ 11 v = NewB; 12} 13else if (a > 0) 14{ 15 v = NewA; 16}

投稿2020/07/22 09:11

編集2020/07/28 06:55
Y0241-N

総合スコア1066

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

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

pasta3

2020/07/23 12:44

回答ありがとうございます。 コードを書き換えたところエラーがでました。 処理出来次第報告させていただきます。 自分がC#についてほとんど知識がないのコードを送ってもらえたのはすごく助かります。
Y0241-N

2020/07/27 00:22

その後解決致しましたか? もしまだエラーで悩まれているのであれば、質問を更新してエラー内容を提示していただければお力になれるかもしれません。
pasta3

2020/07/28 04:45

未だ解決できてません???? 丁寧にありがとうございます。 更新しましたのでよろしければ回答お願いします...
Y0241-N

2020/07/28 05:16

すみません、追記していただいた内容ですが、書式が乱れていて見辛いので修正願います。 スクリプトは ``` ``` の点の間に挟むと私の解答のように見やすい状態に自動で補完してくれます。
pasta3

2020/07/28 05:31

修正しました!
pasta3

2020/07/28 09:27

訂正したところunity上で複数のエラーが発生して手に負えない感じです。 自分でもう一度考えてみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問