2014年3月23日日曜日

【Unity、Mac】UnityのエディタをXamarin Studioに変更する


@Baiteen

※Visual Studioが好きな方はこちら
【Unity、Mac】UnityのエディタをVisual Studio Express 2012に変更する

Visual Studio が好きなんだけど、VM使うのはちょっとあれなのでMacでも使える Xamarin Studio を使ってみることにした。

環境

・MacBookAir 2013 Mid
・SSD 128G
・Mac OS X 10.9.1
・Unity 4.3.0f4
・XamarinStudio4.2.3(今回インストール)

XamarinStudio4.2.3のインストール

こちらからダウンロード
http://xamarin.com/download

・名前
・メールアドレス
・会社名
・開発者の人数
を入力しないとダウンロードさせてくれない。
(適当に入力してもOK)
インストーラの指示通りインストールするだけ。(キャプっとくの忘れた)

インストールした後にUnityでScript開いたら勝手にXamarinStudioが立ち上がった。
でもこのままだとインテリセンスが働いてくれない。


Unityの設定


[Unity] - [Preferences...] - [External Tools] - [External Script Editor]を[XamarinStudio]に変更。
んで[Sync MonoDevelop Project]してあげる。
するとXamarinStudioが勝手にソリューションを読み込んでくれてインテリセンスが働くようになる。


XamarinStudioの使い心地

ちょっと触ってみただけだけど、治したい所がいくつか。。。
1.タブがスペース4つ分
2.自動インデントがスペース8つ分
3.シンタックスハイライトのされ方が見慣れない

・1、2の変え方
[プロジェクト] - [ソリューション オプション] - [ソースコード] - [コードフォーマッティング] - [Text file]
の[タブ幅]と[Indent Width]を変えてあげる。
自分は、両方[2]にした。

・3の変え方
[Xamarin Studio] - [Preferences...] - [テキストエディタ] - [シンタックス ハイライティング]
の[カラースキーム]を変えてあげる。
自分は、[Visual Studio]にした。

見慣れた感じになってきた。



あとは、できること確認。
・日本語入力できる。
・///でXMLコメントかける。
・command+/でコメントアウトできる。
・control+iでフォーマットできる
・インテリセンス働く
・control+spaceでインテリセンス再表示できる(たぶんmacデフォでSpotlight起動するからオフっといて)


他にも欲しい機能出てきたら調べてみよ。


2014年3月21日金曜日

【javascript】簡易的にオブジェクトのクローンを作る方法

@Baiteen

配列やオブジェクトは参照渡しでしか渡せないようで、かなり困ってしまいました。

仕方がないので、別のオブジェクト作ってプロパティをざーっと代入してったんだけど、疲れてしまいました。


値渡ししたいオブジェクトがメソッド持たないやつだったから一旦JSON文字列にして復元させてあげることにした。

var org = { "a":1, "b":2, "c":3 };
var clone = JSON.parse(JSON.stringify(org));


ホントはどうやってやるのがいんだろね。

2014年3月13日木曜日

【Unity,NGUI3.x】新しくなったNGUIでボタンを作成する

NGUIバージョンアップが激しすぎて久々に触ったらボタンすら作れなかった。
(たぶん昨年末のv3.0ぐらいでがらっと変わったはず)
悔しいのでちょっと調べました。
そしたら何コレちょー便利!

バージョン

NGUI v3.5.3
Unity 4.3.4f1

参考サイト

http://www.tasharen.com/forum/index.php?PHPSESSID=df10d9532aaf908e31c9b403acdff090&topic=6708

UIButtonについて

※以下適当に翻訳。
Buttonはマウスホバーやクリックイベントを取得し、対象のSpriteの色を変更するために設計されたシンプルなコンポーネントです。
どんなものでもボタンにできます。それはNGUIのwidgetである必要はありません。
Colliderを持つものであれば何にでもButtonコンポーネントを付けることができます。しかしながら一般的にはNGUIのUI階層にあるUISpriteやゲームオブジェクトに付けることが多いでしょう。

ボタンとして動作させるためには、必ずNGUIのUICameraに映す必要があります。また、Physics設定の"Raycast Hit Triggers"がオンになっている必要があります。

ボタンはマウスオーバー・押下・またクリックイベントを受け取り、Targetフィールドに設定したObjectに対して色の変化を提供します。これらは一般的にwidget(Sprite,Label,またはTexture)を対象としますが、ライトやレンダラを持つその他のObjectにも適用できます。

もしクリックにより別のオブジェクトの関数を呼び出したい場合は”Notify”フィールドに対象となるGameObjectをドラッグ&ドロップします。するとドロップダウンリストに
呼び出し可能な関数が表示されるのでそれを選択します。ここに表示される関数はPublicかつ戻り値がvoidの物だけです。

例)
public void MyClickFunction()
{
    Debug.Log("I was clicked!");
}

Tip1(よくわからん)

It's generally a good idea to put the Button component on the same game object as the button's background sprite. Hit ALT+SHIFT+C to quickly create a collider, and check the "Box Collider" option on the sprite so that the box collider auto-updates as you resize the sprite.

Tip2

UIButtonはOnClick通知だけを提供します。もしOnPress, OnHover, OnSelect, OnDoubleClick など、より高度な通知を行いたければUIEventTriggerコンポーネントを使用してください。

実際にやってみた

・NGUIのアセットをImport
・適当なScene作成
・MainCamera削除
・NGUI->Create->Sprite

・適当に入ってるAtlasとSpriteを選択。
 ここではサンプルのFantasyAtlasとBrightスプライトを選択。
 会わせてSlicedSpriteに設定。

・HierarchyウィンドウでSpriteを選択したまま、NGUI->Attach->Collider
・HierarchyウィンドウでSpriteを選択したまま、NGUI->Attach->Button Script

これだけでボタンになった。
video

あとはイベントの捕捉。
・下記みたいな適当なスクリプト作成(なんでもいい)
using UnityEngine;

public class TestScript : MonoBehaviour
{
  public void Test_OnHoverOver () { Debug.Log ("Test_OnHoverOver"); }
  public void Test_OnHoverOut () { Debug.Log ("Test_OnHoverOut"); }
  public void Test_OnPress () { Debug.Log ("Test_OnPress"); }
  public void Test_OnRelease () { Debug.Log ("Test_OnRelease"); }
  public void Test_OnSelect () { Debug.Log ("Test_OnSelect"); }
  public void Test_OnDeselect () { Debug.Log ("Test_OnDeselect"); }
  public void Test_OnClickOrTap () { Debug.Log ("Test_OnClickOrTap"); }
  public void Test_OnDoubleClickOrTap () { Debug.Log ("Test_OnDoubleClickOrTap"); }
}
・適当なGameObjectを作って上記スクリプトを追加
・ボタンとなったSpriteのUIButton->Notifyに上記GameObjectをドラッグ
・ドロップダウンにメソッド一覧が現われるので好きなの選択

これだけでイベント拾えるようになりました。

クリック以外を拾いたい場合は
・UIButtonを付けたGameObjectに
 AddComponent->Event Trigger
あとは同じ。


これは使いやすいわ…

Unity系記事まとめ

2014年3月12日水曜日

【Unity,NGUI3.x】2DToolkitのSpriteにNGUIでHPバー(HUD)を表示する


NGUIでHPバーを表示するだけでめっちゃ苦労しました。
ちなみにこういうのをHUD(HeadUpDisplay)って呼ぶらしいですね。

やりたいこと

・キャラクターは2DToolkitのtk2dSpriteでtk2dCameraに表示
・HPバーはNGUIのUISpriteでUICameraに表示

やりかた

下記クラスを作成し、キャラクターオブジェクトに追加

HeadUpDisplay.cs
using UnityEngine;

public class HeadUpDisplay : MonoBehaviour
{
  /// <summary>キャラクタを表示しているカメラ</summary>
  public Camera BaseCamera;
  /// <summary>HUDを表示するカメラ</summary>
  public Camera HudCamera;
  /// <summary>HUDプレハブ</summary>
  public GameObject HudPrefab;
  /// <summary>キャラクタ座標系でのHUDオフセット</summary>
  public Vector3 HudOffset;
  
  /// <summary>HUDインスタンス(自動生成)</summary>
  private GameObject hudObject;
  
  void Start ()
  {
    /// <summary>HUDを生成</summary>
    this.hudObject = Instantiate (this.HudPrefab, Vector3.zero, Quaternion.identity) as GameObject;
  }
  
  void Update ()
  {
    /// <summary>キャラクタのWorld座標をスクリーン座標に変換</summary>
    Vector3 hudViewportPoint = this.BaseCamera.WorldToViewportPoint (this.transform.position + this.HudOffset);
    /// <summary>スクリーン座標をHUDのWorld座標に変換</summary>
    Vector3 hudWorldPoint = this.HudCamera.ViewportToWorldPoint (hudViewportPoint);
    hudWorldPoint.z = 0.0f;
    this.hudObject.transform .position = hudWorldPoint;
  }
}

こんな感じで設定

大事なとこ

WorldToViewportPointとViewportToWorldPointだけ。
それぞれWorld座標からスクリーン座標(左下0,0右上1,1)に変換&戻しを行ってる。

うごいた

video

やれやれ。

Unity系記事まとめ
Related Posts Plugin for WordPress, Blogger...