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

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

新規登録して質問してみよう
ただいま回答率
85.50%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Unity

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

Q&A

解決済

3回答

4325閲覧

あるオブジェクトを中心に回りながら徐々にそのオブジェクトに吸い寄せられるスクリプトを組みたい

BRAK

総合スコア98

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Unity

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

0グッド

0クリップ

投稿2020/04/14 05:33

あるオブジェクトを中心に回りながら徐々にそのオブジェクトに吸い寄せられるスクリプトを組みたい
オブジェクトを中心に回るスクリプトと中心のオブジェクトに向かって移動するスクリプトを二つ組んだのですがどちらか一つしか起動しません。
これはフレームごとに同じポジションの処理をしているためだと思うのですが何かいい方法ありませんか?
試したこと
フレームごとに同じポジションの処理をしているためだと思うと思ったのはアニメーションでポジションの処理をした時もどちらか一方のポジションしか起動しなかったからです。ただデバックログでは処理は行われているのでそういうことだと思いました。

C#

1[Header("Rotate")] 2 public float moveSpeed = 1.0f; 3 public float circle_radius = 1.0f; 4 5 [Header("Direction")] 6 public bool isFollow; 7 [SerializeField] 8 public float speed; 9 10 private void Start() 11 { 12 isFollow = true; 13 } 14 15 private void Update() 16 { 17 Follow(); 18 Circle(); 19 } 20 void Circle() 21 { 22 Vector2 pos = transform.position; 23 24 float rad = moveSpeed * Mathf.Rad2Deg * Time.time; 25 26 pos.x = Mathf.Cos(rad) * circle_radius * 1.5f; 27 28 pos.y = Mathf.Sin(rad) * circle_radius * 0.6f; 29 30 transform.position = pos; 31 } 32 33 public void Follow() 34 { 35 if (isFollow) 36 { 37 // プレイヤーの現在位置へ向かうベクトルを作成する 38 var angle = Utils.GetAngle( 39 transform.localPosition, 40 PlayerController.instance.transform.localPosition); 41 var direction = Utils.GetDirection(angle); 42 43 // プレイヤーが存在する方向に移動する 44 transform.localPosition += direction * speed * Time.deltaTime; 45 return; 46 } 47 } 48 49コード

自身の回転範囲を徐々に縮めれば理想の処理ができるとは思いますが、疑問がありましたので質問させていただきました。
あと、エラーに関しては特にないです。

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

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

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

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

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

stdio

2020/04/14 07:47 編集

もう少し詳しく説明をお願い致します。 出来れば図などがあると分かりやすいのですが... こちらのイメージとしては、徐々に中心のブラックホールに吸い込まれていくようなものを想像しています。 ↓こちらのような動きでしょうか? http://h25monka.gamelearning.jp/textbook/gk12-0203/source/JsGame30/JsSample302.html 速度Yを0.55ぐらいに変更してみて下さい。
BRAK

2020/04/14 08:24

回答ありがとうございます。 緑のボールが回りながら徐々に中央に寄っていく感じです。
BRAK

2020/04/14 08:28

そうですね、一番近い表現でブラックホールに吸われていく感じだと思うます。ただ、距離が近いほど中央に吸われる速度が速くならないスクリプトにしたいです。
BRAK

2020/04/14 08:30

玩具でいうとベーブレイド的な感じで外側から徐々に中央にネジのように移動する感じですかね。
guest

回答3

0

ベストアンサー

毎フレームcircle_radiusを小さくしていけば自然とPlayerに近づいていきます。

c#

1 [SerializeField] float moveSpeed = 1.0f; 2 [SerializeField] float rotateSpeed = 360.0f;//1秒で360° 3 [SerializeField] float circleRadius = 1.0f; 4 5 Transform target; 6 7 void Start() 8 { 9 target = PlayerController.instance.transform; 10 } 11 12 void Update() 13 { 14 float rad = rotateSpeed * Mathf.Deg2Rad * Time.time;//Sinの引数はラジアンなのでRad2DegではなくDeg2Radを使う 15 16 transform.position = target.position + new Vector3(Mathf.Cos(rad) * circleRadius * 1.5f, Mathf.Sin(rad) * circleRadius * 0.6f); 17 18 if (circleRadius > 0f) circleRadius -= moveSpeed * Time.deltaTime;//半径を小さくしていく 19 }

投稿2020/04/14 09:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

BRAK

2020/04/15 05:18

私が最終的にやろうとしていたこちらが一番わかりやすいと思います。 ありがとうございます。
guest

0

ベーブレイドでもステージの構造上、中心に近づくと速度早くなるんですけどね...

ケプラーの第三法則の調べると色々と出て来ます。この法則は第一からあるので、プログラムしながらいい感じの場所で止めるといいでしょう。私の予想では第二ぐらいがいい感じかなと思います。

ちなみに早くなってしまうのは、中心のブラックホールへの重力圏への侵入角度と侵入速度で決まります。

投稿2020/04/14 09:13

stdio

総合スコア3307

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

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

BRAK

2020/04/14 10:14

ベーブレイドはたとえ話です。 とりあえず、ケプラーの第三法則について調べてやってみます。 ありがとうございました
BRAK

2020/04/15 05:21

数学的知識が欠落しすぎていて、内容は部分的に理解できたのですが式に表せないのでやめます。 ケプラーの第三法則というものがあるのだなと記憶しておき、機会があればYouTubeで動画としてみてみます。
stdio

2020/04/17 03:34

そんなケプラーの第三法則をプログラムに直すような動画YouTubeにあったかしら...
BRAK

2020/04/17 05:39

うーん、そしたら学校始まってから先生に教えてもらおうと思います。 後々、この法則は色々と便利そうですので。
stdio

2020/04/20 07:27

コロナの影響でいつ学校が再開するのかはわかりませんが、面白い動きがいっぱいできるので是非習得してみてもいいかもしれません。
BRAK

2020/04/23 07:17

わかりました、絶対習得します。
guest

0

アルキメデスの渦巻線を逆方向に回転させれば行けるのでは?

投稿2020/04/14 10:00

swordone

総合スコア20649

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

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

swordone

2020/04/14 10:03

すみません、考えてみたら明らかにこの回答はおかしいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問