はらけんログ

unity触ったりバイクに乗ったり

AdamくんがPPAPを踊ってくれました。

 

先日、AdamのAssetが公開されたので、ダウンロードしてみました。

 

で、Adam君に例のアニメーションをつけてみました。

素材はくまじゃなくてぐるくん (@gurukun237) | Twitterさんのtoggeterから

togetter.com

 


Adam君がPPAP踊ってた

 

(これライセンス大丈夫かなぁ?)

【Unity】StreamingAssetsに格納したファイルから文字列とかを取得する

 

はい。

拙者、もう少しわかりやすく内容を書きたいなと思っているでござる。

 

っていうのも今回つまずいたところは公式リファレンスの書き方が間違っていて、動作しなかったから。

 

ちゃんと動かせるソースを教えろよな(超上から目線)

 

ってか他のブログとかでも var とか使ってる奴のコードわかりにくいでしょ?

そんなかんじのわかりにくいコードを書かないように頑張りたい。

 

んで、今日はstreamingAssetsに入れたメモ帳などから文字列を取得する方法です。

リファレンスだと

public class ExampleClass : MonoBehaviour {
    public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");
    public string result = "";
    IEnumerator Example() {
        if (filePath.Contains("://")) {
            WWW www = new WWW(filePath);
            yield return www;
            result = www.text;
        } else
            result = System.IO.File.ReadAllText(filePath);
    }
}

 ってなってる。(コピペです)

 

で、実行すると

get_streamingAssetsPath is not allowed to be called during serialization, call it from Awake or Start instead.・・・

みたいなエラーが返ってきて動かない。(動くには動くけど取得は出来ない)

 

で、これのいけないところは

public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");

 ってところ。

 

 これを

public string filePath ;

void Start()

{

filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");

}

 ってな感じにしてやると動く。

 

つまり、「宣言ついでに定義するな。StartとかAwakeでやれ。」っていうエラーなんです。(Google先生にエラー翻訳してもらえば一発)

 

 

それでも動かねぇっていう人はファイルネームを確認してください。(赤文字の部分)

System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");

 

これ、実は拡張子も入れないとダメっぽい

 

だから、取得するファイルがテキストファイルだった場合、本当は

System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile.txt");

 

 っていれなきゃならん。

 

こんなんで時間食わせないでよUnityさん。

最近お仕事が捗らなかった理由

 

最近、仕事が本当に進まない。

 

っていうのも、コーディングするときって本当にいろいろやり方がある上で、いかに可読性が良くして、かつ処理を軽く実装するかを考えると思うんだけど、パラメータを変える部分が多いと「本当にこんなんでいいのか?」って思ってしまうんよ。

 

で、今回はLINEのようなチャットのUIを実装する段階でつまずいた。

パラメータを渡す部分はuGUIのImageとpositionXとテキストの内容とそれらのサイズ。さらにベースとなるprefabからインスタンス化してアニメーションさせる。ってもの。

 

何を言ってるかわからないと思うがry

で、どうしたもんかなぁってブログで愚痴ろうと思ったんだけど、(すでに愚痴ってる)書いてる途中で

「パラメータの違うpurefabもう1つ作ればいいじゃん」

っていう超天才的な発想が脳裏をよぎった。

 

もうね、マジで俺の糖分と時間返せやってなった。

 

なんかスクリプト以外に頼るのは負けた気がするんだけど、こんなことも思いつかないウンコに綺麗なスクリプトが書けるかって言われたら首を垂れるしかないので、今まで書いたゴミみたいなコードは全消しして作り直す。

 

つらい。

 

 

いいか?生成したいオブジェクトのパラメータが多いならもう1つprefubを作れよ。

 

 

以上。

 

【Unity】RectTransformのインスタンスとサイズの話

僕のunityを使ったお仕事では、だいたい(というか必ず)uGUIを使って実装するのだが、uGUIのGameObject(って表現があってるかわかんないけど)って普通のTransformと違ってちょっとめんどいだんよね。

 

なんで、毎回作る度にどっかしらつまずくんスよ。

ってことで、今日つまずいたとこを一応メモっとく。

 

 

uGUIをインスタンス化してなんかの子にするとき

まずは、uGUIのGameObjectをprefab化して、そいつをスクリプトでuGUIのGameObjectの子にインスタンス化するとき。

 

いつものTransformのGameObjectを子にインスタンス化するときは

 

public GameObject gObj; //uGUIのGameObject
public GameObject prefabObj; //上の奴の子にするprefab
void ObjInstantiate() //関数名は適当やで
{
GameObject ui= Instantiate ((GameObject)prefabObj);
ui.transform.parent = gObj.transform;
}

 とかって書くと思うんだけど、このとき

”Parent of RectTransform is being set with parent property. Consider using the SetParent method instead, with the worldPositionStays argument set to false. This will retain local orientation and scale rather than world orientation and scale, which can prevent common UI scaling issues.”

 っていう黄色エラーが出た。

 

まぁ黄色だから大丈夫だと思うんだけど、会社にいるプログラムの師匠に「わーにんぐ、きもい」って言われそうだった(ってか、見たことないエラーだったから自分でもキモイと思った。)ので、解決策を探した。

 

んで、こういう時は

ui.transform.parent = gObj.transform;

 のとこを

ui.transform.SetParent (gObj.transform);

 ってしたら黄色エラーが消えるんだってさ。

 

 

uGUIのサイズをスクリプトで変えるとき

RectTransformって普通のTransformの値のほかに、サイズとかアンカーとかピボットとかが追加されている。(Transformを継承してるからposition、rotation、Scaleもある)

 

んで、RectTransformはScaleで大きさを変えるんじゃなくて、Sizeってのを変えることでソースのImageに大きさをあわせることが多い。(ここも日本語あってるかわからん)

そのSizeってのはインスペクターで見るとWidthとかHeightって書いてあるやつね。

f:id:HarakeN:20161111183423p:plain

 

Sizeはpositionとかと違ってVector2なんすよ。

で、これにスクリプトで設定するには

 

public RectTransform uiObj;
void UiObjSize() //関数名は適当やで
{
uiObj.sizeDelta = new Vector2 (100,100); //サイズも適当やで
}

 

ってしてやれば指定の大きさにできるっぽい。

 

 

 

マイクロソフトのHoloLens -その3 実行してみる-

 

はい、じゃあ作ったAppフォルダ内にある.slnをたたいてください。

f:id:HarakeN:20161109125031p:plain

 

Visual Stadio が起動したら実行・・・の前に

ここんところを変更しよう。エミュレータでもいいけど、HoloLens持ってる人はUSBでデバイスつないでDeviceにすると実機でできるよ。その際、アプリケーションがついでにインストールされちゃうので注意。

f:id:HarakeN:20161109125250p:plain

 

 

そして実行しよう。

 

 

こんな感じのウィンドウ出てくるけど、Retryおしてちゃっちゃと起動しよう。

f:id:HarakeN:20161109125411p:plain

 

 

 

すると、エミュレータが起動して、HoloLensの画面が出てくる。

 

 

とりあえずUnityの女神降臨。

f:id:HarakeN:20161109125612p:plain

 

 

 

まぁ実行自体は楽なんだけど、途中どこかでつまづくんだよねこれ。

 

 

今の進捗的にここらへんまでなので、HoloLensの記事はしばらくでないと思う。

 

かわりにUnityのプログラムとかについてつらつら書いていきます。よろしく。

 

 

ライセンスもはっときましょうねー 

 

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています