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

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

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

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

Q&A

解決済

4回答

8261閲覧

Unityでのエラーで、error CS1022のおかしい場所がわかりません。

toppohae28nippa

総合スコア5

C#

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

0グッド

0クリップ

投稿2022/03/18 14:48

unityでゲーム制作をしているのですが、
エラーコードに、Assets\Title.cs(35,1): error CS1022: Type or namespace definition, or end-of-file expected
と出ました。C#言語超初心者なので、どこの部分がおかしいのかを教えてくれると幸いです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Title : MonoBehaviour
{
private bool firstPush = false;

public void PressStart() { Debug.Log("Press Start!"); if (!firstPush) { Debug.Log("Game"); // Use this for initialization void Start() { Invoke("ChangeScene", 1.5f); } // Update is called once per frame void Update() { } void ChangeScene() { SceneManager.LoadScene("Game"); } } firstPush = true; } }

}

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

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

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

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

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

toppohae28nippa

2022/03/18 15:34

Y.H.さんの回答をもとに修正してみました。 するとまたエラーが出てきたのですが、error CS1513: } expected というエラーです。 どこかしら{}の対応ができていないという意味はわかっていますが、 何十回確認しても、できてないところはないと思っていますが、どこに不備があるでしょうか…? using System.Collections; using System.Collections.Generic; using UnityEngine; public class Title : MonoBehaviour { private bool firstPush = false; public void PressStart() { Debug.Log("Press Start!"); if (!firstPush) { Debug.Log("Game"); // Use this for initialization void Start() { Invoke("ChangeScene", 1.5f); } // Update is called once per frame void Update() { } void ChangeScene() { SceneManager.LoadScene("Game"); } } firstPush = true; //} }
len_souko

2022/03/20 03:35

質問文を編集してください 「質問への追記・修正の依頼」の中にべた書きしても見づらいです また、ソースコードはコードブロックの中すべて治まるように書いてください ソースコードの一部分だけコードブロックに含めても見づらいですし、回答しようとしてみた人もコードブロックの上下に外れたソースコードが意識から漏れてしまい、本質的な問題に気づきにくくなります
guest

回答4

0

ベストアンサー

自動インデント機能のあるテキストエディタを使うと例えば↓みたいに自動でインデントをつけてくれます
これはVisualStudioです
イメージ説明

これを見るとTitleクラスが閉じ切れていないのが分かります
そして問題は、PressStart()の関数の中でほかの関数(StartやUpdateなど)を定義しているところです(関数の中でほかの関数は定義できません)
PressStart()のかぎかっこを閉じてからStart()を定義すればコンパイルが通るはずです

投稿2022/03/18 17:29

編集2022/03/18 17:30
tillumination

総合スコア38

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

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

0

{ }の対応が取れてません。
コーディングする時、きちんとブロックの字下げ(ネスト)する癖をつけましょう。

C#

1// ・・・略・・・ 2 firstPush = true; 3 //} ←これ何? 4}

投稿2022/03/18 14:54

編集2022/03/18 14:58
Y.H.

総合スコア7918

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

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

toppohae28nippa

2022/03/18 15:58

Y.H.さんの回答をもとに修正してみました。 するとまたエラーが出てきたのですが、error CS1513: } expected というエラーです。 どこかしら{}の対応ができていないという意味はわかっていますが、 何十回確認しても、できてないところはないと思っていますが、どこに不備があるでしょうか…? using System.Collections; using System.Collections.Generic; using UnityEngine; public class Title : MonoBehaviour { private bool firstPush = false; public void PressStart() { Debug.Log("Press Start!"); if (!firstPush) { Debug.Log("Game"); // Use this for initialization void Start() { Invoke("ChangeScene", 1.5f); } // Update is called once per frame void Update() { } void ChangeScene() { SceneManager.LoadScene("Game"); } } firstPush = true; //} }
guest

0

文面が分かりづらくて大変ご迷惑をおかけし申し訳ございません。
teratalも初めて使用した者なので質問がわかりにくい箇所があったりとそこは反省すべき点だと思っています。回答を元に無事に解決に繋がりました。回答してくれた皆様本当にありがとうございました。C♯、C++の勉強をして出直します。

投稿2022/03/20 06:47

toppohae28nippa

総合スコア5

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

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

0

ここなどで先にC#の文法を勉強してください
でないとxitramさんの回答もp今回限りでまた同じ過ちを繰り返しそうです

C#にはClass、メソッド、プロパティ、フィールド
Unityだとあまり使わないのですが、namespace
この辺りの言葉を理解できないと手詰まりになります

どうしてもプログラミング言語を勉強するのが嫌もしくは厳しいというのでしたらUnreal Engineの方が良いかと思います

回答部分
xitramさんの書かれた通りです
また、MonoBehaviourを継承したクラス定義したスクリプトをGameObjectに付けた場合は、ゲーム中、そのオブジェクトが作られたときにStartメソッドが一回だけ呼び出され、以降は1フレームごとにUpdateメソッドが呼び出されます
そしてそのメソッドはクラスの配下で定義します
メソッドの中に定義しても呼び出されません
※なお、本来ならコンパイルエラーになっていたのですが、少し前からローカル関数という機能が出来たため、}が足りてないって言うエラーになっています

また、質問文が更新されていないのでわかりにくいのですが、回答などへのコメントに書かれていたソースコードを確認したところ、Y.H.指摘の通り、}がなぜか一つコメントアウトされていたのでそれを解除すれば文法エラーは解決します
ただ、先に挙げたとおり本来ならクラスのメソッドであるべきメソッドをローカル関数として記述されていますので、実際には想定した通りには動かないものにしかなりませんので、ローカル関数ではなくてTitleクラスのメソッドとして定義してあげてください

これが分からない、何とかしてくれと言うのでしたらUnityは諦めてUnreal Engineに切り替えましょう
一応Unityでプログラミングする時間が取れないからとUnreal Engineに切り替えた人がゲームを出してそこそこ人気が出たという事例もありますので
もっとも、Unreal Engineの場合はノーコーディングで出来る範疇を超えて何かしたいとなったらより難易度の高いC++を勉強しないといけなくなりますのでそこまでこったことをしたくなったらUnityに戻る方が良いかもしれません

投稿2022/03/20 04:07

len_souko

総合スコア1363

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問