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

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

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

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

Unity

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

Q&A

解決済

2回答

3198閲覧

DOTweenのアニメーションが動かない

koronatail

総合スコア433

C#

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

Unity

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

0グッド

0クリップ

投稿2018/03/30 08:05

編集2018/03/30 08:45

前提・実現したいこと

ゲーム内で、Canvasのプレハブを生成し、そのCanvasの中に入っているImageに対してアニメーションをさせたいと考えています。

試したこと

あるゲームオブジェクトから以下のようなコードを実行しました

DOTween.Init (); GameObject g = Instantiate(gameOverCanvasPrefab, new Vector2(0, 0), Quaternion.identity); //GameOverImage1はgameOverCanvasPrefabの孫として存在するImage GameObject.Find ("GameOverImage1").GetComponent<RectTransform> () .DOShakeScale (  10.0f );

しかしImageは一度変形し、そのまま止まってしまいました。
想定ではDOShakeScaleの影響で10秒間大きさが変化し続けるものだと考えておりました。
また、DOShakeScaleをDOMoveに変更し、以下のように記述したところ、1秒間動くようなことは無く、開始直後の一瞬だけ初期位置からわずかに移動してそのままとまったきりになってしまいました。

GameObject.Find ("GameOverImage1").GetComponent<RectTransform> ().DOMove ( Vector3.one,  1.0f       );

根本的な使い方が誤っているのでしょうか。

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

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

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

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

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

sakura_hana

2018/03/30 08:28 編集

DOShakeScaleはランダムにサイズの変更、引数はアニメの秒数です。ゆっくりすぎて変化が見えない可能性は無いでしょうか。Imageを目視するだけでなく、インスペクターの値が変化しているか確認してください。また、エラーが出ていないか確認し、出ているならエラー文をそのまま検索するか質問に追記してください。
koronatail

2018/03/30 08:40

> sakura_hana様 回答ありがとうございます。インスペクタ上でRectTransformのScaleやwidthの値を確認しながら何度か動かして見たところ、上記コード実行直後にscaleの値が変化していました。しかし開始直後の1度だけで、引数に指定した10秒間変わり続けるような動きにはなっておりませんでした。また、エラーは特に発生しておりませんでした。
sakura_hana

2018/03/30 08:45

とすると私には「何かの手違いで開始直後に止めている」ぐらいしか思い付かないです……ソースコード全文があると回答が付きやすいかと思います。
koronatail

2018/03/30 09:02

> sakura_hana様 回答ありがとうございます。大変申し訳ありません直前にTimeScaleを0にしていました・・・。なぜかコレを1にしてみようという発想がありませんでした。DOShakeScale ( 10.0f ).SetUpdate(true);とすることで無事に動かすことができました。ありがとうございました!
guest

回答2

0

掲載されていますコードをそのままコピペして手元で試してみましたが、問題なく10秒間 ShakeScaleが実行されました。
sakura_hanaさんがおっしゃっている通り、手違いで止めてしまっているのかもしれません。

DoTweenは終了時のコールバックを受け取る方法がありますので、試してみるとログが呼び出されたスタックトレースから、誰が止めているのか分かるかもしれません。

csharp

1 GameObject.Find("GameOverImage1") 2 .GetComponent<RectTransform>() 3 .DOShakeScale(10.0f) 4 .OnComplete(() => Debug.Log("OnComplete")) 5 .OnKill(() => Debug.Log("OnKill"));

期待通りの動作をしているとき、10秒後に OnCompletee メッセージがログに出るはずです。

投稿2018/03/30 09:24

kanitaoru

総合スコア204

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

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

kanitaoru

2018/03/30 09:27

あ、入れ違いでしたね。解決したようでよかったです。
koronatail

2018/03/30 11:41

>kanitaoru様 検証までありがとうございました。次ハマったときはOnCompleteやOnKillも使って確認してみたいと思います!
guest

0

自己解決

直前でTime.timeScale = 0;を行っていたためとまっていただけでした・・・。

Time.timeScale = 1;

にする、または

GameObject.Find ("GameOverImage1").GetComponent<RectTransform> ().DOShakeScale ( 5.0f ).SetUpdate(true);///追加

とすることで動くようになりました。
コードを端折るのは良くないですね・・・お騒がせしました。

投稿2018/03/30 09:04

編集2018/03/30 09:05
koronatail

総合スコア433

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問