発生している問題
シーン開始時、非アクティブにしているボタンをスクリプトからアクティブにした際、そのボタンに対するDOTweenが機能しなくなる
最初からアクティブにしていた場合は意図通り機能する
ソースコード
ゲームを始めるボタンのスクリプト
親クラスのため記載
C#
1using DG.Tweening; 2using UnityEngine; 3using UnityEngine.EventSystems; 4using UnityEngine.SceneManagement; 5 6public class ButtonVsCom : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler 7{ 8 public System.Action onClickCallback; 9 10 [SerializeField] private CanvasGroup _canvasGroup; 11 12 public void OnPointerClick(PointerEventData eventData) 13 { 14 onClickCallback?.Invoke(); 15 ChangeScene(); 16 } 17 18 public void OnPointerDown(PointerEventData eventData) 19 { 20 transform.DOScale(0.95f, 0.24f).SetEase(Ease.OutCubic).SetLink(gameObject); 21 _canvasGroup.DOFade(0.8f, 0.24f).SetEase(Ease.OutCubic).SetLink(gameObject); 22 } 23 24 public void OnPointerUp(PointerEventData eventData) 25 { 26 if(gameObject != null) 27 { 28 transform.DOScale(1f, 0.24f).SetEase(Ease.OutCubic).SetLink(gameObject); 29 _canvasGroup.DOFade(1f, 0.24f).SetEase(Ease.OutCubic).SetLink(gameObject); 30 } 31 } 32 33 public virtual void ChangeScene() 34 { 35 DOTween.Clear(true); 36 SceneManager.LoadScene("InGame"); 37 } 38}
ゲームからタイトルに戻るボタンのスクリプト
こちらが該当のボタンについているオブジェクト
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.SceneManagement; 5using DG.Tweening; 6 7public class ButtonToTitle : ButtonVsCom 8{ 9 public override void ChangeScene() 10 { 11 DOTween.Clear(true); 12 SceneManager.LoadScene("Title"); 13 } 14}
SetActiveを実行するスクリプト
一番下のHPCheckにて実行しています
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using TMPro; 6using System; 7using DG.Tweening; 8 9public class CollideTank : MonoBehaviour 10{ 11 BulletObj itemData; 12 [SerializeField] private TextMeshProUGUI _enemyHPText; 13 [SerializeField] GameObject wonObj; 14 [SerializeField] private GameObject pausing; 15 [SerializeField] private Transform team; 16 [SerializeField] private Slider enemyHPSlider; 17 18 [SerializeField] private GameObject toTitle; 19 20 private int _enemyHPInt; 21 22 void OnTriggerEnter2D(Collider2D collidedItem) 23 { 24 if(collidedItem.transform.parent.parent == team){ 25 itemData = collidedItem.gameObject.GetComponent<BulletObj>(); 26 _enemyHPInt = Convert.ToInt32(_enemyHPText.text); 27 if(itemData.Type == 0) 28 TakeDamage(itemData.Damage, _enemyHPText); 29 30 Destroy(collidedItem.gameObject); 31 } 32 33 } 34 35 void TakeDamage(int damage, TextMeshProUGUI enemyHPText) 36 { 37 _enemyHPInt -= damage; 38 if(_enemyHPInt <= 0) 39 _enemyHPInt = 0; 40 41 DOTween.To(() => enemyHPSlider.value, (x) => enemyHPSlider.value = x, _enemyHPInt, 1).OnUpdate(() => {enemyHPText.text = $"{enemyHPSlider.value:F0}";}).OnComplete(HPCheck); 42 } 43 44 private void HPCheck() 45 { 46 if(_enemyHPInt <= 0){ 47 Time.timeScale = 0; 48 _enemyHPText.text = "0"; 49 pausing.SetActive(true); 50 wonObj.SetActive(true); 51 //toTitle.SetActive(true); 52 toTitle.GetComponent<Image>().enabled = true; 53 } 54 } 55}
試したこと
SetActiveを使わずEnabledのほうがいいみたいなことを見たのでImageをEnabledするようにしてみたが変化なし
必要な情報がありましたら追加しますのでお声掛けください
見た感じは特に問題点なさそうです。
SetActiveかenableかは処理負荷を気にしてもほぼ誤差なのでSetActiveでいいと思います。
処理が意図したタイミングで実行できなかった場合は、
本当に押せているのか、処理がどこまで実行されているのか
(処理内にDebug.Logを仕込むなどで確認する)
意図したタイミングでボタンに処理が登録されているのか
という点を確認してみてください。

回答1件
あなたの回答
tips
プレビュー