Help us understand the problem. What is going on with this article?

ユニティちゃんとコードを書こう!

More than 1 year has passed since last update.

はじめに

この記事は、Unity アセット真夏のアドベントカレンダー 2014 Summer!17日目の記事です。
前半はユニティちゃん好きな方向け、後半はUnityAsset作る方向け と、詰め込みすぎて2段構成になっちゃいました。

ユニティちゃんとコードを書こう!

この!ちきしょー!やめてやる!!コードを書くのなんかやめ…て…え!?見…てる?

unity-chan1.png

Hierarchyウィンドウのユニティちゃんが僕を見てる?
Hierarchyウィンドウのユニティちゃんが僕を見てるぞ!ユニティちゃんが僕を見てるぞ!Hierarchyウィンドウのユニティちゃんが僕を見てるぞ!!

Unity-chan2.png

実行中はユニティちゃんちゃんが走ってるぞ!!!よかった…UnityEditorは、まだまだ捨てたモンじゃないんだねっ!
いやっほぉおおおおおおお!!!僕にはユニティちゃんちゃんがいる!!やったよUnity!!ひとりでゲーム作れるもん!!!

ということで

Hierarchyウィンドウからユニティちゃんが見守っていてくれるアセットを作りました。
通常時は立ちモーション、実行中は走ります。
また、実行中に一時停止すると走ったまま止まったりと微妙な工夫が施されています。
が、それだけです。

AssetStore(まだ)
github

AssetStoreに出して「Assetの紹介!」という体で紹介しようとしたのですが、
Rejectくらったので、まだAssetStoreにでてません!
また出し直します!すみません!

Assetを見て学ぼう!

ここから後半戦です。
今回のアセットのコードと共に、このユニティちゃんのアセット作るときに使ったもろもろを紹介します。

Assets/Editor直下には何もおかない

今回のディレクトリ構成を見て頂くと分かるのですが、
Assets/Editor
ではなく、
Assets/MiniUnityChan/Editor
以下にコードが入るようにしています。
「Editorや、Resourcesディレクトリ以下にファイルを置け」という時は、別にAssets直下じゃなくても問題無いです。
なので、Assets/Editor直下にファイルを入れて「あれ!?このファイル何のAssetのやつだっけ・・・」とユーザーさんが困らないようにしましょう。

namespaceを分ける

MiniUnityChan.Coreを見て頂くと分かりますが、ちゃんと

View.cs
namespace MiniUnityChan
{

namespaceを分けています。
Importされたプロジェクトに、既に同じ名前のクラスが存在する!とか、
他のAssetと名前が衝突する!ということを避けるためです。
Assetとして配布するときはやっておきましょう!

Assetがどこに移動されても大丈夫なようにしておく

ImportされたAssetは、使う人によってどこのディレクトリに移動されるか分かりません。
(自分も、AssetStoreからImportしてきたAssetは、特定の1ディレクトリ以下にまとめるようにしています。)
どこに移動されても問題無いように作っておくのが吉です。

MiniUnityChan.View.LoadSprite

View.cs
var spritePath = new Uri(Directory.GetFiles(Application.dataPath, spriteName, SearchOption.AllDirectories)[0]);
var projectRootPath = new Uri(Application.dataPath);
var relativeUri = projectRootPath.MakeRelativeUri(spritePath);
var loadSprite = AssetDatabase.LoadAllAssetRepresentationsAtPath(relativeUri.ToString());

ここのコードはちょっと面倒なことをしています。
1つのファイルを読んできたいだけなのですが、
Directory.GetFilesで、特定のファイル名をApplication.dataPath以下から探してきます。
しかし、これによって帰ってくるのはフルパスなので、projectRootPathからの相対パスを作ってやって、やっとAssetDatabase.LoadAllAssetRepresentationsAtPathに渡すことができます。
他に楽な方法があれば教えてください・・・

無理矢理Windowを再描画する

普通はこんなことしないと思うのですが・・・
各種EditorWindowは、基本的に何かのイベントがあったとき(クリックされた時とか)、必要にならないとWindowの再描画は走りません。
今回ユニティちゃんをアニメーションさせたかったので、HierarchyWindowを無理矢理再描画しています。
EditorApplication.RepaintHierarchyWindow

他のAssetも見て学ぼう!

ご存じの通り、AssetStoreにはたくさんのAssetがあります!
「こういう機能を作りたいんだよなー、でもこのAssetはちょっと違うかも・・・」という時、似ているAssetを探してきてソースコードを読みあさると勉強になるのでオススメです!
コードがdll化されていて読めない物もあるので、有料Assetは購入前にPackageContentsを確認するようにしましょう!

Asset_Store_-_CSV_Viewer.png

おしまい

アドベントカレンダー8/18の担当は enpel さんです、よろしくお願いします!

宣伝

CSV Viewer

9459fabc-fffc-4c73-6a81-7fda866291a4.png

宣伝記事
AssetStore

AssetStoreでCSV ViewerのAssetだしてます。
10万行ぐらいあるCSVとかもサクサク動きます。
GUIは基本的に描画がめちゃくちゃ重いので、画面に描画されない範囲は描画しない、とか色々頑張ってるAssetです。

関連記事

せっかくなので、Unity関連で、自分が今までに書いた役に立ちそうな記事へのリンクを張っておきます。

Asset配布する人向け

iOS系

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした