「 とらぶるしゅーと 」一覧

【Unity3D】error CS1010: Newline in constant

※ここの管理人はWindowsでUnityやってます。

	void Awake()
	{
        Debug.Log("単体");
	}

突然変なエラーが出だしたので色々やってみた結果、たったこれだけのコードでも出る事が判明。

んーこれはどうみても文字コード周り。ちなみにこの時の文字コードは UTF-8 のBOMなし (CR+LF)

 

ということで色々試してみた結果、

UTF-8 BOMあり (CR+LF)

に変更した所エラーが消えました。めでたしめでたし。

 

ちなみに何故今頃こんなエラーが出てきたかと言いますと、今までUTF-16(Unicode little endian)でコード書いていたのですが、GitHubでソースコードがバイナリ扱いになりdiff出来ないという状況になった為

「じゃあUTF-8でやってみようか。BOMは・・・とりあえず無しで」

という話が最近あった為です(‘`

 

 

文字コードいちいち変えるの面倒だからスクリプトのテンプレート触るか・・・と思ったけど

どうやらUnity4でもテンプレートの文字コード無視して強制的にSJISにしてしまう事が判明。ああめんどくさい(‘A` ヴァー


【Unity3D】!IsActive () && !m_RunInEditMode

と、いうエラーが出てきたのでメモ。

ソースはこんな感じ。

using UnityEngine;
using System.Collections;

public class TestListener : MonoBehaviour {
        // (中略)
        void OnGUI () {
            // (中略)
            SendMessage("OnTest", hogehoge);
        }
}
using UnityEngine;
using System.Collections;

public class MyGUITexture : MonoBehaviour {
    // (中略)
    void OnTest(MyClass hoge) {
        // (中略)
        OtherMember.gameObject.active = false;
    }
}

かなり端折ってますが…

 

で、結論として

OnGUIUpdateにすれば良いようです。と言うか何故OnGUIに書いてたし。


【Unity3D】Instantiateを行った場合の初期化

普段はStartメソッドにて初期化を任せていたけれど、

var obj = (GameObject)Instantiate(以下略);
var cls = (MyClass)obj.GetComponent(typeof(MyClass));

のようにすると、clsを得た時点ではStartが実行されていないので

using UnityEngine;
using System.Collections;

public class MyClass : MonoBehaviour {

    private MyClass2 cls2;

    void Start() {
        this.MyClass2 = this.GetComponent(以下略);
    }

    void SetParam(int p) {
        this.cls2.hoge = p;
    }
}

MyClassの中身がこのような場合、

cls.SetParam を呼び出すとNullReferenceExceptionが出る!

という時のメモ。

 

・・・まあ対処法としては初期化に関してはStartではなく、Awakeに書けば良いだけでした。

全部のメソッドに初期化チェック+初期化の処理を挟んでたのが恥ずかしい限り。