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

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

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

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

Unity

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

Q&A

0回答

606閲覧

【Unity・C#】 Unityでのタップゲーム作成においてDoTweenで設定した軌道が動かない

muuu_u

総合スコア7

C#

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

Unity

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

0グッド

0クリップ

投稿2020/02/29 10:29

##解決したいこと
本を参考にUnityでタップゲームの作成を行っています。
クリッカー系の挙動をさせようと思い、アセットのDoTweenを用いて特定のオブジェクトをタップすると
カーブ軌道を描き上方へ飛ばしたらスコアが加算されるように実装しました。
ですが、ImagePositionに該当する画像をタップすると
オーブは生成されるものの画面の上方へ移動が行われずにスコアも加算されず困っております。

DoTweenが動かない理由に関して
もしご存知でしたらご回答お願い致します。

##GameManagar.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; public class GameManager : MonoBehaviour { //定数定義 private const int MAX_ORB = 10; //オーブ最大数 private const int RESPAWN_TIME = 5; //オーブが発生する秒数 private const int MAX_LEVEL = 2; //最大レベル // データセーブ用キー private const string KEY_SCORE = "SCORE"; // スコア private const string KEY_LEVEL = "LEVEL"; // レベル private const string KEY_ORB = "ORB"; // オーブ数 private const string KEY_TIME = "TIME"; // 時間 //オブジェクト参照 public GameObject orbPrefab; //オーブのプレハブ指定 public GameObject lvupPrefab; //レベルアップ時のエフェクト public GameObject canvasGame; //ゲームキャンバス public GameObject textScore; //スコアテキスト public GameObject lvupImage; //レベルアップイラスト public GameObject clearEffectPrefab; //ゲームをクリアした際のエフェクト public GameObject ImagePosition; //クリッカー用のオブジェクト public AudioClip getScoreSE; // SEタップ時 public AudioClip levelUpSE; // レベルアップ時 public AudioClip clearSE; // 効果音クリア //メンバ変数 private int score = 0; //現在のスコア private int nextScore = 10; //レベルアップまでに必要なスコア private int currentOrb = 0; //現在のオーブ数 private int levelRank = 0; //レベルランク private DateTime lastDateTime; //前回のオーブを生成した時間 private int [] nextScoreTable = new int[] {10, 100, 1000} ; //レベルアップ数 private AudioSource audioSource; //オーディオソース // Start is called before the first frame update void Start() { //オーディオソース取得 audioSource = this.gameObject.GetComponent<AudioSource> (); // 初期設定 score = PlayerPrefs.GetInt (KEY_SCORE, 0); levelRank = PlayerPrefs.GetInt (KEY_LEVEL, 0); nextScore = nextScoreTable [levelRank]; lvupImage.GetComponent<ObjectManager> ().SetLvupPicture (levelRank); RefreshScoreText (); } // Update is called once per frame void Update() { } //新しいオーブの生成 public void CreateNewOrb () { lastDateTime = DateTime.UtcNow; if (currentOrb >= MAX_ORB) { return; } CreateOrb (); currentOrb++; } //オーブ生成 public void CreateOrb () { GameObject orb = (GameObject)Instantiate (orbPrefab); orb.transform.SetParent (canvasGame.transform, false); orb.transform.localPosition = new Vector3 ( UnityEngine.Random.Range (-100.0f, 100.0f), UnityEngine.Random.Range (-300.0f, -450.0f), 0f); //オーブの種類を設定 int kind = UnityEngine.Random.Range(0, levelRank + 1); switch (kind) { case 0: orb.GetComponent<OrbManager> ().SetKind (OrbManager.ORB_KIND.BLUE); break; case 1: orb.GetComponent<OrbManager> ().SetKind (OrbManager.ORB_KIND.GREEN); break; case 2: orb.GetComponent<OrbManager> ().SetKind (OrbManager.ORB_KIND.PURPLE); break; } orb.GetComponent<OrbManager> ().FlyOrb (); audioSource.PlayOneShot (getScoreSE); //アニメ再生 AnimatorStateInfo stateInfo = ImagePosition.GetComponent<Animator> ().GetCurrentAnimatorStateInfo (0); if (stateInfo.fullPathHash == Animator.StringToHash ("Base Layer.get@tapobject")) { //すでに再生中なら先頭から ImagePosition.GetComponent<Animator> ().Play (stateInfo.fullPathHash, 0, 0.0f); } else { ImagePosition.GetComponent<Animator> ().SetTrigger ("isGetScore"); } } //オーブ入手 public void GetOrb (int getScore) { if (score < nextScore) { score += getScore; // レベルアップ値を越えないよう制限 if (score > nextScore) { score = nextScore; } LevelUp (); RefreshScoreText (); //ゲームクリア判定 if ((score == nextScore) && (levelRank == MAX_LEVEL)) { LevelMax (); } } currentOrb--; } //スコアテキスト更新 void RefreshScoreText () { textScore.GetComponent<Text> ().text = "Orb: " + score + " / " + nextScore; } //レベルアップ管理 void LevelUp () { if (score >= nextScore) { if (levelRank < MAX_LEVEL) { levelRank++; score = 0; LevelUpEffect (); nextScore = nextScoreTable [levelRank]; lvupImage.GetComponent<ObjectManager> ().SetLvupPicture (levelRank); } } } //レベルアップ時の演出 void LevelUpEffect () { GameObject lvupEf = (GameObject)Instantiate (lvupPrefab); lvupEf.transform.SetParent(canvasGame.transform, false); lvupEf.transform.SetSiblingIndex (2); audioSource.PlayOneShot (levelUpSE); Destroy (lvupEf, 0.5f); } //レベルが限界値まで到達した時の演出 void LevelMax () { GameObject clearEf = (GameObject)Instantiate (clearEffectPrefab); clearEf.transform.SetParent (canvasGame.transform, false); audioSource.PlayOneShot (clearSE); } }

##OrbManagar.cs

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; public class OrbManager : MonoBehaviour { //オブジェクト参照 private GameObject gameManager; //ゲームマネージャー public Sprite[] orbPicture = new Sprite [3]; //オーブの絵 public enum ORB_KIND{ //オーブの種類を定義 BLUE, GREEN, PURPLE, } private ORB_KIND orbKind; //オーブの種類 // Start is called before the first frame update void Start() { gameManager = GameObject.Find ("GameManager"); } // Update is called once per frame void Update () { } // オーブが飛ぶ public void FlyOrb () { RectTransform rect = GetComponent<RectTransform> (); // オーブの軌跡設定 Vector3[] path = { new Vector3(rect.localPosition.x * 4.0f, 1100f, 0f), new Vector3(0f, 1400f, 0f), }; // DOTweenを使ったアニメ作成 rect.DOLocalPath (path, 0.5f, PathType.CatmullRom) .SetEase (Ease.OutQuad) .OnComplete (AddOrbPoint); // 同時にサイズも変更 rect.DOScale ( new Vector3 (0.5f, 0.5f, 0f), 0.5f ); } // オーブアニメ終了後にポイント加算処理をする void AddOrbPoint () { switch (orbKind) { case ORB_KIND.BLUE: gameManager.GetComponent<GameManager> ().GetOrb (1); break; case ORB_KIND.GREEN: gameManager.GetComponent<GameManager> ().GetOrb (5); break; case ORB_KIND.PURPLE: gameManager.GetComponent<GameManager> ().GetOrb (10); break; } Destroy (this.gameObject); } //オーブの種類を設定 public void SetKind (ORB_KIND kind){ orbKind = kind; switch (orbKind) { case ORB_KIND.BLUE: GetComponent<Image> ().sprite = orbPicture [0]; break; case ORB_KIND.GREEN: GetComponent<Image> ().sprite = orbPicture [1]; break; case ORB_KIND.PURPLE: GetComponent<Image> ().sprite = orbPicture [2]; break; } } }

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

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

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

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

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

ayousanz

2020/03/27 03:28

タップしたときに移動の関数が呼べているのでしょうか. また,移動時に何かしらのエラーなどはでていませんか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問