

## 発生している問題

Unity初心者です。  
本を参考にタップゲームのアプリを作成しているのですが、エラーにハマってしまい悩んでおります。

該当の行を確認するのですが、エラー文章で検索しても思うような回答が得られず困っております。

[code]

    Non-invocable member 'GameManager.clearEf' cannot be used like a method.
    
[/code]

何故GameManagerに指摘が来るのか、まだ仕組みが分かっておらずエラーの読み取り方が分かりません。

どなたかご存知でしたら教えていただけると幸いです。

* * *

## Unityで表示されるエラーメッセージ

[code]

    Assets/Scripts/GameManager.cs(99,13): error CS1955: Non-invocable member 'GameManager.clearEf' cannot be used like a method.
    Assets/Scripts/GameManager.cs(129,54): error CS0103: The name 'lvup_efPrefab' does not exist in the current context
    Assets/Scripts/GameManager.cs(139,55): error CS0103: The name 'lvup_efPrefab' does not exist in the current context
    
[/code]

* * *

## ソースコード

**【GameManager.cs】**

[code]

    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; //最大レベル
    
    //オブジェクト参照
    public GameObject orbPrefab; //オーブのプレハブ指定
    public GameObject lvupEf; //レベルアップ時のエフェクト
    public GameObject canvasGame; //ゲームキャンバス
    public GameObject textScore; //スコアテキスト
    public GameObject lvupImage; //レベルアップイラスト
    public GameObject clearEf; //ゲームをクリアした際のエフェクト
    
    //メンバ変数
    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, 10, 10} ; //レベルアップ数
    
        // Start is called before the first frame update
        void Start() {
            //初期オーブ生成
            currentOrb = 10;
            for (int i = 0; i < currentOrb; i++) {
                CreateOrb ();
            }
    
            //初期設定（スタートメソッド内で画像を初期状態へセットする。
            lastDateTime = DateTime.UtcNow;
            nextScore = nextScoreTable [levelRank];
            lvupImage.GetComponent<ObjectManager> ().SetLvupPicture(levelRank);
    
            RefreshScoreText ();
        }    
    
        // Update is called once per frame
        void Update() {
            if (currentOrb < MAX_ORB) {
                TimeSpan timeSpan = DateTime.UtcNow - lastDateTime;
    
                if(timeSpan >= TimeSpan.FromSeconds (RESPAWN_TIME)) {
                    while (timeSpan >= TimeSpan.FromSeconds (RESPAWN_TIME)) {
                        createNewOrb ();
                        timeSpan -= TimeSpan.FromSeconds (RESPAWN_TIME);
                    }
                }
    
            }
        }
    
    
        //新しいオーブの生成
        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 (-300.0f, 300.0f),
                UnityEngine.Random.Range (-140.0f, -500.0f),
                0f);
        }
    
        //オーブ入手
        public void GetOrb () {
            score += 1;
    
            if (score > nextScore) {
                score = nextScore;
            } 
    
            LevelUp ();
            RefreshScoreText ();
    
            //ゲームクリア判定
            if ((score == nextScore) && (levelRank == MAX_LEVEL)) {
                clearEf ();
            }
    
            currentOrb--;
        }
    
        //スコアテキスト更新
        void RefreshScoreText () {
            textScore.GetComponent<Text> ().text =
            "オーブ: " + score + " / " + nextScore;
        }
    
        //画像のレベル管理
        void LevelUp () {
            if (score >= nextScore) {
                if (levelRank < MAX_LEVEL) {
                    levelRank++;
                    score = 0;
    
                    LevelUp ();
    
                    nextScore = nextScoreTable [levelRank];
                    lvupImage.GetComponent<ObjectManager> ().SetLvupPicture (levelRank);
    
                }
            }
        }
    
        //レベルアップ時の演出
        void LevelUpEffect () {
            GameObject lvupEf = (GameObject)Instantiate (lvup_efPrefab);
    
            lvupEf.transform.SetParent(canvasGame.transform, false);
            lvupEf.transform.SetSiblingIndex (2);
    
            Destroy (lvupEf, 0.5f);
        }
    
        //レベルが限界値まで到達した時の演出
        void ClearEffect () {
            GameObject clearEf = (GameObject)Instantiate (lvup_efPrefab);
            clearEf.transform.SetParent (canvasGame.transform, false);
        }
    }
    
    
[/code]


CC BY-SA 4.0
2020-02-15T12:01:45.927
63071
2020-02-25T02:28:58.167
2020-02-15T14:30:08.093
32986
37844
question
c# unity3d
Unityのコードでエラーが出ます: Non-invocable member 'GameManager.clearEf' cannot be used like a method

[code]

    //ゲームクリア判定
            if ((score == nextScore) && (levelRank == MAX_LEVEL)) {
                clearEf ();
            }
    
[/code]

[code]

    //ゲームクリア判定
            if ((score == nextScore) && (levelRank == MAX_LEVEL)) {
                clearEffect ();
            }
    
[/code]

じゃないでしょうか

追加編集  
コード変更

[code]

    //オブジェクト参照
    public GameObject orbPrefab; //オーブのプレハブ指定
    // ↓要りません
    //public GameObject lvupEf; //レベルアップ時のエフェクト
    public GameObject canvasGame; //ゲームキャンバス
    public GameObject textScore; //スコアテキスト
    public GameObject lvupImage; //レベルアップイラスト
    // ↓要りません
    //public GameObject clearEf; //ゲームをクリアした際のエフェクト
    // ↓追加
    [SerializeField]
    private GameObject lvup_efPrefab;
    
[/code]

[code]

     //レベルアップ時の演出
        void LevelUpEffect () {
                             // ↓変更
            GameObject lvupEf = Instantiate(lvup_efPrefab) as GameObject;
    
            lvupEf.transform.SetParent(canvasGame.transform, false);
            lvupEf.transform.SetSiblingIndex (2);
    
            Destroy (lvupEf, 0.5f);
        }
    
[/code]

[code]

    //レベルが限界値まで到達した時の演出
        void ClearEffect () {
                              // ↓変更
            GameObject clearEf = Instantiate(lvup_efPrefab) as GameObject;
            clearEf.transform.SetParent (canvasGame.transform, false);
        }
    
[/code]


CC BY-SA 4.0
2020-02-15T15:56:35.957
63077
2020-02-25T02:28:58.167
2020-02-25T02:28:58.167
37847
37847
63071
answer