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

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

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

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

Unity

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

Q&A

解決済

1回答

4667閲覧

Unityでのコードの間違いを教えてください(Default references will only be applied in edit mode.)

tkr218

総合スコア11

C#

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

Unity

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

0グッド

0クリップ

投稿2019/07/15 19:11

編集2019/07/16 01:54

前提・実現したいこと

Unityで穴掘り法を使って自動で迷路生成をしていて少し外からコードを持ってきて貼り付けていじったものです。しかしうまく動かずどうすればいいか困っています どのように変換できますか?
Unity側で"Default references will only be applied in edit mode."というものが出ます

コード

using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.Text; public class acti : MonoBehaviour { public GameObject cube; public GameObject wall; private static int s=12; int[,] Maze = new int[2 * s , 2 * s ]; private List<Cell> StartCells; private void Dig(int x, int y) { // 指定座標から掘れなくなるまで堀り続ける var rnd = new System.Random(); while (true) { // 掘り進めることができる方向のリストを作成 var directions = new List<Direction>(); if (this.Maze[x, y - 1] == 1 && this.Maze[x, y - 2] == 1) directions.Add(Direction.Up); if (this.Maze[x + 1, y] == 1 && this.Maze[x + 2, y] == 1) directions.Add(Direction.Right); if (this.Maze[x, y + 1] == 1 && this.Maze[x, y + 2] == 1) directions.Add(Direction.Down); if (this.Maze[x - 1, y] == 1 && this.Maze[x - 2, y] == 1) directions.Add(Direction.Left); // 掘り進められない場合、ループを抜ける if (directions.Count == 0) break; // 指定座標を通路とし穴掘り候補座標から削除 SetPath(x, y); // 掘り進められる場合はランダムに方向を決めて掘り進める var dirIndex = rnd.Next(directions.Count); // 決まった方向に先2マス分を通路とする switch (directions[dirIndex]) { case Direction.Up: SetPath(x, --y); SetPath(x, --y); break; case Direction.Right: SetPath(++x, y); SetPath(++x, y); break; case Direction.Down: SetPath(x, ++y); SetPath(x, ++y); break; case Direction.Left: SetPath(--x, y); SetPath(--x, y); break; } } // どこにも掘り進められない場合、穴掘り開始候補座標から掘りなおし // 候補座標が存在しないとき、穴掘り完了 var cell = GetStartCell(); if (cell != null) { Dig(cell.X, cell.Y); } } // 座標を通路とする(穴掘り開始座標候補の場合は保持) private void SetPath(int x, int y) { this.Maze[x, y] = 0; if (x % 2 == 1 && y % 2 == 1) { // 穴掘り候補座標 StartCells.Add(new Cell() { X = x, Y = y }); } } // 穴掘り開始位置をランダムに取得する private Cell GetStartCell() { if (StartCells.Count == 0) return null; // ランダムに開始座標を取得する var rnd = new System.Random(); var index = rnd.Next(StartCells.Count); var cell = StartCells[index]; StartCells.RemoveAt(index); return cell; } // デバッグ用処理 // セル情報 private class Cell { public int X { get; set; } public int Y { get; set; } } // 方向 private enum Direction { Up = 0, Right = 1, Down = 2, Left = 3 } void Start() { for (int y = 0; y < 2 * s + 1; y++) { for (int x = 0; x < 2 * s + 1; x++) { if (x == 0 || y == 0 || x == 2 * s || y == 2 * s) { Maze[x, y] = 0; // 外壁は判定の為通路にしておく(最後に戻す) } else { Maze[x, y] = 1; } } } // 穴掘り開始 Dig(1, 1); // 外壁を戻す for (int y = 0; y < 2 * s + 1; y++) { for (int x = 0; x < 2 * s + 1; x++) { if (x == 0 || y == 0 || x == 2 * s || y == 2 * s) { Maze[x, y] = 1; } } } for (int x = -s; x <=s; ++x) { for (int y = -s; y <= s; ++y) { Debug.Log(Maze[x + s, y + s]); if (Maze[x + s, y + s] == 0) { if (x == s || x == -s || y == s || y == -s) { Instantiate(wall, new Vector3(x, 0.5f, y), Quaternion.identity); } else { Instantiate(cube, new Vector3(x, 0.5f, y), Quaternion.identity); } } } } } // Update is called once per frame void Update() { } } ```C# ![イメージ説明](0a2adda0f41d1e423760111b17771add.png)

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

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

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

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

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

y_waiwai

2019/07/15 23:13

そのエラーはどこに出たものでしょう。 エラーメッセージは省略せず、コピペでそのまま全文提示しましょう
tkr218

2019/07/15 23:29

初めての質問で情報不足となってしまい申し訳ございません コード上では問題なく動作するのですがUnityエディタで動かそうとしたときに起こるものです Inspector上にこの文章がそのまま表示されています。コードを切り貼りしたものなのでうまく動かないと思いますがその当該箇所はわかりません。Unityのコンソールに特に表示されるわけではありません
tkr218

2019/07/15 23:35 編集

追記:写真の位置です
m.ts10806

2019/07/16 01:18

Unityよくわからないですがそのメッセージそのままで検索すると結構でてくるように思います。 一度Google翻訳にかけて意味を理解したあとに読んでみると解決につながるのでは?
tkr218

2019/07/16 01:24

返信ありがとうございます。少しC#スクリプトに詳しくなくてとりあえず修正の必要な範囲だけ抜き取りたいのですがそこがよくわからないといった状況です。ただ深夜だったので自分の中にも少し検索不足というのは自分の中でも思い当たる節は大いにあるので確認します。
m.ts10806

2019/07/16 01:27

プログラミングは頭を非常によく使う作業なので頭がまわりにくい状態で進めても生産性は損なわれるばかりと思います。一度リフレッシュのために離れるのも手です。(とりあえず投げとけって質問が速攻解決になることってあまりありません)
tkr218

2019/07/16 01:32

すいません、心配していただきありがとうございます。寝る前に投げてしまったような質問なのであなたの貴重な時間を割いていただき申し訳ない気持ちです。一旦今日くらい時間をかけて問題のポイントを明らかにできればと思います。とりあえず自己解決の方針で分からなければまた質問する方向で行きたいと思います。
m.ts10806

2019/07/16 01:36

そこまでかしこまらなくても良いかと思います。(回答する側は基本的に無責任な傍観者で、誰も急いでません)
tkr218

2019/07/16 01:47

ありがとうございます!現在コード上の間違いを一つ見つけたので解決というわけではないですが修正していけそうです。
guest

回答1

0

ベストアンサー

スクリプトを選択中なのでこのような表示になります。
「この画面で変数(cubeとか)にオブジェクトをセットしていても実際のプレイには反映されないから注意な」ということだと思います。
初期設定したい場合は「acti.csをGameObjectに付与→そのGameObjectのインスペクター上のactiコンポーネントのCube等にオブジェクトをドラッグ&ドロップ」する必要があります。

推測すると、コードビルド時点でのエラーは無い(間違っているならそもそも再生出来ない)、
けれど上記設定がされていない為にcubeとwallが空っぽの状態となっていて動作時にNullReferenceException辺り起こしていて「動かない」んじゃないでしょうか。
Null Reference Exception - Unity マニュアル
この場合は、動作時にエラーが出ていると思うので確認してみてください。

「エラーは出ていないのに動かない」というのであれば書いている内容が何かしら間違っているので、
ブレークポイント入れるなりコメントアウトとDebug.Logを駆使するなりでデバッグを行ってください。
(詳しくは「unity デバッグ」で検索を)

投稿2019/07/16 01:32

sakura_hana

総合スコア11427

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

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

tkr218

2019/07/16 01:51

ありがとうございます。エラーメッセージの意味が分かりました。なので現在はコード上に問題個所があったので修正しているところです。とりあえずあなたに教えていただいたデバッグの方法で修正をかけていきたいと思います。拙く問題点のわかりづらい質問であっただろうと思われますが回答いただきありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問