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

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

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

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

Unity

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

Q&A

解決済

1回答

675閲覧

【Unity C#】gameObjectを指定してfloat hで操作するコードがわかりません。

iiinamo

総合スコア2

C#

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

Unity

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

0グッド

0クリップ

投稿2020/09/10 09:57

特定のgameObjectの移動をtransformで操作するコードの書き方は、
頭にgameObeject.をつけて指定できるのはわかるのですが、
float値から移動させる場合、gameObjectをどのように書けばよいのかわかりません。

例:

gameObject.transform.Translate(Input.GetAxisRaw("Horizontal"),0,0);
のようにgameObjectを指定しているものを、

float h = Input.GetAxisRaw("Horizontal");
でも、gameObjectを指定したいと考えています。

gameObject.float h = Input.GetAxisRaw("Horizontal");
では指定できないのですが、どのように書くのが正しいのでしょうか?

大変初歩的なことで恐縮なのですが、
ご教示のほどお願いします。

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

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

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

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

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

fiveHundred

2020/09/10 10:16

「gameObjectのfloat値」という表現が意味不明すぎます。 float値とはただの数値であり、その数値が何を表しているのかが質問からは分からないので、回答しようがありません。 また、「gameObject.float」というものも存在しません。
iiinamo

2020/09/12 06:39

>1T2R3M4さん 質問ありがとうございます。 少し諸事情があり、操作したいgameObejetにscriptをアタッチせず、別にアタッチしたscriptからfloat値を使って操作したいのでした。わかりにくくて、申し訳ございません。
iiinamo

2020/09/12 06:43

>fiveHundredさん ご指摘ありがとうございます。 確かにfloat値だけで動かすことはできませんね。まだ理解が浅くて、こんがらがることが多くて。。。 おかげさまで、認識を改めることができました。
guest

回答1

0

ベストアンサー

こんにちは!
まず前提がおかしいです。
GameobjectはFloat値を持ちません。
ゆえにオブジェクトにつけられたコンポーネント、ひいてはスクリプトから獲得することになります。

今回は別のゲームオブジェクトのあるコンポーネントのfloat値を操作したいのだと仮定して話を進めます。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Test : MonoBehaviour 6{ 7 public float h; 8   //獲得したいフロート 9}

そしてこのスクリプトをAというゲームオブジェクトにつけたとして、このAからfloat hを獲得する方法を書きます。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Test2 : MonoBehaviour 6{ 7 public GameObject A; 8 //ゲームオブジェクトAを獲得。インスペクタで設定。 9 //ここからTestコンポーネントを獲得しfloat hを手繰り寄せる。 10 Test tes; 11 //Testコンポーネントを獲得するための入れ物 12 13 void Start() 14 { 15 tes = A.GetComponent<Test>(); 16 //ゲームオブジェクトAからTest型のコンポーネントを獲得 17 } 18 19 void Example() 20 { 21 tes.h = Input.GetAxisRaw("Horizontal"); 22 //テストクラスに含まれているfloat型のhに代入 23 } 24} 25

しかし多分このケースならオブジェクトAにてInputを検出した方がよさそうですね。
あと老婆心ながら移動にTransform.Translate()を使うのはお勧めしません。
イベントシーンなどなら別ですが、Inputを利用しているところを見ればそうではないでしょう。

簡単に言うならTranslateは一歩先の位置に瞬間移動し続けることで移動し、AddForceやVelocityによる移動は一歩一歩歩いて移動しています。
瞬間移動は当たり判定で不安定ですし、処理的にも重くて物理挙動などの再現にもすぐれません。
何か特別な理由がない限り辞めておくのが無難かもしれません。

仮説に基づいてお話ししましたが、何か間違いがありましたらお申し付けください。
あとおせっかいすみません。
失礼します。

投稿2020/09/10 10:42

編集2020/09/10 11:20
cushionA

総合スコア90

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

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

iiinamo

2020/09/12 06:35

ご指摘、ご回答ありがとうございます。 GameObjectがfloat hをもつことを誤認しておりました。 そして、こちらの「GameObjectを間接的に動かしたい」という意図をくみ取っていただきありがとうございました。 ご教示いただいたコードを参考に、間接的にhに入力値をいれて制御できるようになりました。 本当にありがとうございます。大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問