【解決方法】保護レベルが原因でアクセスできない問題を修正するにはどうすればよいですか

[ad_1]

Unity では、次の下線付きの行の保護レベルが原因で、「Tiletype」にアクセスできません。

関連する C# スクリプト:

C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class WorldController : MonoBehaviour
{
    public Sprite FloorSprite;
    
    World world;
    // Start is called before the first frame update
    void Start() {
        world = new World();
        // Create a game object for tiles, to see them
        for (int x = 0; x < world.Width; x++ ) {
            for (int y = 0; y < world.Height; y++) {
                Tile tile_data = world.GetTileAt(x, y);
                
                GameObject tile_go = new GameObject();
                tile_go.name = "Tile_" + x + "_" + y;
                tile_go.transform.position = new Vector3( tile_data.X, tile_data.Y, 0);
                
                //add asprite renderer, but no sprites
                tile_go.AddComponent<SpriteRenderer>();
                tile_data.RegisterTileTypeChangeCallback( (tile) => {OnTileTypeChanged(tile, tile_go); } );
            }
        }
    world.RandomizeTiles();
    }
    
    float randomizeTileTimer = 2f;

    // Update is called once per frame
    void Update()
    {
        randomizeTileTimer = Time.deltaTime;
        if(randomizeTileTimer < 0) {
            world.RandomizeTiles();
            randomizeTileTimer = 2f;
        }
    }
    
    void OnTileTypeChanged(Tile tile_data, GameObject tile_go) {
        if(tile_data.type == Tile.TileType.Floor) {
            tile_go.GetComponent<SpriteRenderer>().sprite = FloorSprite;
        }
        else if (tile_data.type == Tile.TileType.empty) {
            tile_go.GetComponent<SpriteRenderer>().sprite = null;
        }
        else {
            Debug.LogError("OnTileTypeChanged - Unrecognized tile type.");
        }
    }
}

2 番目の C# スクリプト:

using UnityEngine;
using System.Collections;
using System;

public class Tile {
    
    public enum TileType {empty, Floor };
    
    TileType type = TileType.empty;

    
    Action<Tile> TileTypeChanged;

    public TileType Type {
        get {
            return type;
        }
        set {
            type = value;
            // call the call back
            if(TileTypeChanged != null)
                TileTypeChanged(this);
        }
    }
    
    StandaloneObject standaloneObject;
    InstalledObject installedObject;
    
    World world;
    int x;
    
    public int X {
        get {
            return x;
        }
    }
    int y;
    
    public int Y {
        get {
            return y;
        }
    }
    public Tile (World world, int x, int y ) {
        this.world = world;
        this.x = x;
        this.y = y;
    }
    public void RegisterTileTypeChangeCallback(Action<Tile> callback) {
        TileTypeChanged += callback;
    }
    public void UnRegisterTileTypeChangeCallback(Action<Tile> callback) {
        TileTypeChanged -= callback;
    }
}

私が試したこと:

私が知っていることから、それは正しく行われましたが、機能していません。間違いを犯した可能性が最も高いです。 私を助けてください

解決策 1

Chris はほぼ間違いなく正しく、解決策を提供してくれました。

しかし、少し背景を追加したいと思います: コーディング中に毎日、おそらく 1 日に何度も構文エラーが発生することを予期する必要があります。 変数やキーワードのスペルを間違えることがあります。 文字列やコード ブロックを閉じるのを忘れることがあります。 猫があなたのキーボードの上を歩いて、とても奇妙なことをタイプすることがあります。 メソッド呼び出しに必要なパラメーターの数を忘れてしまうことがあります。

我々はすべての間違いを犯します。

そして、私たちは皆そうしているので、構文エラーを修正する必要があります。他の人が修正してくれるのを待つよりも、方法を学んで自分で修正する方がはるかに迅速です! したがって、エラー メッセージの読み方と、コンパイラが間違っていると言っていることに照らして記述されたコードを解釈する方法を学ぶことに少し時間を費やしてください。

だからこれを読んでください: 問題を解決するコードの書き方、初心者向けガイド パート 2: 構文エラー[^] – 次回コンパイル エラーが発生したときに役立つはずです。

また、構文エラー メッセージを理解するために少し時間を費やすことで、将来的に膨大な時間を節約できます。Chris からの返信を少なくとも 1/4 時間待っていた場合、電子メール システムによってさらに 10 分ほど追加された時間と、このサイトを見つけてアカウントを作成したら、質問を入力する必要がありました。 それらの読み方を知っていれば、その時間のかなりの部分を節約できた可能性があります!

私たちはあなたがそれらを修正するのを手伝いたくないと言っているのではありません – 私が書くつもりだったものを読んでいるために、私自身のエラーを見ることができないことがあります – しかし、構文エラーを修正することは仕事の一部です.あなたが業界で仕事を得ると、人々はあなたを少し奇妙に見るでしょう!

[ad_2]

コメント

タイトルとURLをコピーしました