🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Unity

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

Q&A

解決済

2回答

1559閲覧

unityオブジェクトの移動後の位置設定と大きさ

Sari0011

総合スコア2

C#

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

Unity

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

0グッド

0クリップ

投稿2021/02/25 10:18

前提・実現したいこと

unityで円状に回るCubeを作っています。

1,キーを離しても、移動後そのままその位置にとどまるようにしたい。
2,再びのキー操作のときにも、その地点から移動させたい。
3,オブジェクトの初期位置と大きさInspectorで設定している大きさにしたい。

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

1,2,キーを離すとオブジェクトが(0, 0, 0)の場所に戻ってしまいます。
3,オブジェクトの初期位置と大きさをInspectorで設定しているのに、スタート後どちらも初期値に戻ってしまう。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Bar : MonoBehaviour 6{ 7 public Transform myTransform; 8 Rigidbody myRigidbody; 9 //中心となるオブジェクト(ゲームオブジェクトじゃなくても中心点がわかればOK) 10 public GameObject centerObj; 11 12 [SerializeField, Header("半径")] 13 float radius; 14 15 [SerializeField, Header("速さ")] 16 float speed; 17 18 float _x; 19 float _y; 20 21 void Start () 22 { 23 myTransform = transform; 24 myRigidbody = GetComponent<Rigidbody>(); 25 //カーソル非表示 26 Cursor.visible = false; 27 } 28 29 // Update is called once per frame 30 void Update () 31 { 32 Move(); 33 Restriction(); 34 } 35 36 void Move() 37 { 38 _x = radius * Mathf.Sin(Time.time * speed); 39 _y = radius * Mathf.Cos(Time.time * speed); 40 //手動で動かせるように 41 gameObject.transform.position = new Vector3(Input.GetAxis("Mouse X") * _x, Input.GetAxis("Mouse X") * _y, 0); 42 //オブジェクトがずっとセンターに向いて動く 43 gameObject.transform.LookAt(centerObj.transform); 44 } 45 46 /// <summary> 47 /// 円形の移動制限 48 /// </summary> 49 void Restriction() 50 { 51 //自身と円形に移動制限させたい位置の中心点との距離を測り半径以上になっていれば処理 52 if (Vector3.Distance(transform.position,centerObj.transform.position) > radius) 53 { 54 //中心点から自身までの方向ベクトルを作る 55 Vector3 nor=transform.position-centerObj.transform.position; 56 //作った方向ベクトルを正規化する 57 nor.Normalize(); 58 //方向ベクトル分半径に移動させる 59 transform.position = nor * radius; 60 } 61 } 62}

###試したこと
gameObject.transform.position = new Vector3(Input.GetAxis("Mouse X") * _x, _y, 0);
と書き換えても見ましたが、Cubeの形はInspectorで設定した大きさになりました。
ですが、挙動がおかしくなります。

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

https://qiita.com/tilyakuda/items/972d248432f45af12433
ここの記事を参考にしています。
unity初心者です。
宜しくおねがいします。

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

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

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

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

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

guest

回答2

0

自己解決

こちらの方の記事を参考に、すべての問題が解決しました。
リンク内容

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Bar : MonoBehaviour 6{ 7 // 回転速度 8 float rotation_speed = 0; 9 10 void Start () 11 { 12 //カーソル非表示 13 Cursor.visible = false; 14 } 15 16 void Update () 17 { 18 if (Input.GetAxis("Horizontal") != 0) 19 { 20 Move(); 21 } 22 } 23 24 void Move() 25 { 26 // 左クリックされたら回転速度を設定する 27 if (Input.GetKey(KeyCode.RightArrow)) 28 { 29 this.rotation_speed = 1.0f; 30 // 回転速度分回す 31 transform.Rotate(0, 0, this.rotation_speed); 32 } 33 // 右クリックされたら回転速度を設定する 34 if (Input.GetKey(KeyCode.LeftArrow)) 35 { 36 this.rotation_speed = 1.0f; 37 // 回転速度分回す 38 transform.Rotate(0, 0, -this.rotation_speed); 39 } 40 } 41}

投稿2021/02/26 13:33

Sari0011

総合スコア2

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

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

0

1,キーを離しても、移動後そのままその位置にとどまるようにしたい。

2,再びのキー操作のときにも、その地点から移動させたい。

回転の計算を参考に回転のやり方をしっかりと定めたうえで、座標の保存とtheta値の保存を行ってみて下さい。

3,オブジェクトの初期位置と大きさInspectorで設定している大きさにしたい。

プレハブのコピーという方法があります。こちら2.Resoucesを使用したスクリプトを作成するを参考にしてみて下さい。

投稿2021/02/25 22:08

stdio

総合スコア3307

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

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

Sari0011

2021/02/26 13:31

コメントありがとうございます。解決しましたので、追記にてコードを書いておきますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問