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

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

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

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

Unity

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

Q&A

解決済

3回答

742閲覧

UNITY 3D 回転斬りの方法

beryberybery

総合スコア41

オブジェクト

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

Unity

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

0グッド

0クリップ

投稿2019/10/20 04:25

編集2019/10/20 11:53

オブジェクトを回して「回転斬り」的な動作をさせたいのですが、

こちらのスクリプトだとずっと回り続けて動作を止めることが出来ません。

一周回ったら止まるようにするためにはどうしたら良いでしょうか。

詳しい方がいらっしゃいましたら、教えていただきたいですm(_ _)m

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Rotator : MonoBehaviour 6{ 7 // Start is called before the first frame update 8 void Start() 9 { 10 11 } 12 13 // Update is called once per frame 14 void Update() 15 { 16 transform.Rotate(new Vector3 (15, 30, 45) * Time.deltaTime); 17 } 18}

-10/20 9時頃 追記-

今更気づいたのですが、unityのデフォルトツールアニメーションで

動作させるというのも一つの手なのかなと思い、これも一つの解なのでしょうか?

遊ぶユーザー様にも最適化したいと思い、どちらが軽くなるのか

それも知りたいですm(_ _)m 詳しい方がいらっしゃいましたらご教授願いたいです。

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

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

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

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

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

guest

回答3

0

ソースを見る限りですが…これ、ずっと回転切りを続けます…

回転切りの「終了フラグ」みたいなものを付けれないでしょうか…

「●●の間、●●を続ける」みたいな処理は、絶対に「終了条件」を付けないと、無限ループの原因になります。


回転切りにも時間はあると思うので、制限時間を設けて、終了するタイミングで「回転切り終了」の処理を仕込む必要があるかと

投稿2019/10/20 04:40

編集2019/10/20 04:41
hermit19901127

総合スコア368

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

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

hermit19901127

2019/10/20 04:50 編集

質問主さんの「回転切り」を止める時に止めたい…となれば、これで解決できます… ですが、ゲームのプレイヤーの制御は複雑かつ「●●が●●したから止める」と言うより「●●をして指定秒立ったから、やめる」という処理が殆どです。 このへん、ご興味があれば、解説いたします(ちょっと長くなりますが)
hermit19901127

2019/10/20 05:03

たとえば、回転切りの最中に「回復薬使うわ!」みたいな処理が入ってきたときの対応も必要です… そのへんは実装次第ですが…
beryberybery

2019/10/20 11:33

秒数で動作を止めるというコードは盲点でした。 色んな考え方で動作出来るんですね、 プログラミング面白さを教えて頂きありがとうございます! 是非教えていただきたいですm(_ _)m
hermit19901127

2019/10/20 12:18

「秒数で止める」のほかにも、質問主さんのような直接ロテートを回さず 「アニメーション」で回転切りを再現したときに「アニメーション終了時」にイベントを発行させて終了判定をさせる等、やりようは色々ありますね…。 今回は解決のための解答ですが、割り込み処理や、そもそもの実装方法等、いずれ考えをまとめて私的なブログに記載しようかなと思う次第です…
beryberybery

2019/10/20 15:02 編集

丁寧にご回答ありがとうございます!!! 自力で解決する事の楽しさを損なわせず解答するhermitさんの考え方も尊敬に値します。 理解次第 解決方法を記載したいと思います。ブログの方も参照させて頂きます!!!
guest

0

ベストアンサー

もう既に自身で達成出来ている頃合いかと思いますがこれで一回転可能かと思います。

C#

1using UnityEngine; 2 3public class Rotator : MonoBehaviour 4{ 5 int rotMax = 360; 6 float rotSpeed = 10f; 7 float y; 8 9 void Update() { 10 y += rotSpeed; 11 if ( Mathf.Abs(y) <= rotMax ) transform.rotation = Quaternion.Euler(0,y,0); 12 } 13}

速度はfloat rotSpeed = 10ffloat rotSpeed = 20fで倍速。
回転方向はfloat rotSpeed = -10fで反対回転といった風に変更出来ます。
rotMax = 360は説明するまでも無いかと思いますがrotMax = 720という風にすれば二回転します。

再度回転させる場合は下記の様な関数を追加して実行して下さい。

C#

1 void RotationRestart() { 2 y = 0; 3 }

追記のアニメーションに関して===================================

アニメーションの方が少し処理負荷は上がる筈ですが物凄く細微な差なので、可能であれば最初からアニメーションで回転させて作成した方が良いです。
ゲームのクオリティはそちらの方が遥かに上げ易いです。

投稿2019/10/21 04:19

編集2019/10/21 05:23
Hawn

総合スコア1222

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

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

beryberybery

2019/10/21 10:32

ご回答頂き、思った通りの動きをしてくれました!! プレイヤーオブジェクトに付与したところ 回転斬りが実装され「緑の勇者」になりました\(^o^)/ アニメーションについても触れて頂き、大変恐縮です。 マスターソードを手に入れ、また新たな旅に出たいと思います!! 懇切丁寧に解説して頂き、ありがとうございましたm(_ _)m
guest

0

こんな感じでダメですか?

C#

1float min = 0.0f; 2float max = 360.0f; 3 4void Update() { 5 float angle = Mathf.LerpAngle(min, max, Time.time); 6 transform.eulerAngles = new Vector3(0, angle, 0); 7}

投稿2019/10/20 08:02

編集2019/10/20 08:04
madone99

総合スコア1855

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

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

beryberybery

2019/10/20 11:35

こちらのスクリプトをオブジェクトに貼り付けたのですが、 何も動作せず困惑している次第ですm(_ _)m 何はともあれ、ご回答ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問