Archive For 2018年6月29日

Unity3Dタイルマップ作成時の注意点

By |

Unity3Dタイルマップ作成時の注意点

Unity3D has a tile map system that allows you to make 2D maps with no programming at all. This tool is available for free with the unity base package and can be expanded with the 2D extras package found in unity’s GitHub. It’s fairly easy to use but if you are not careful when setting it up you could have a hard…

(Unity3D)ダイナミックボタンアクション

By |

(Unity3D)ダイナミックボタンアクション

あるゲームのUIを作っている間にボタンに関する問題に遭遇しました。選択されたエンティティによって、表示されているボタンが変わるようにしたいと思いました。 もちろん一つずつのエンティティのGameObjectを準備して場合によってSetActive()trueかfalseにしてもいいですが、スケーラビリティは?エンティティを追加しようとする毎に新しいGameObjectを準備しますか?そんな面倒なことは勘弁してほしいですよね。 ということでスケーラビリティのため、エンティティを選択する時にボタンが編集され、ちょっとしたアルゴリズムを書きました。  こういうシステムが入っているUIを作る人がいて参考になればと思い、分かりやすいバージョンを準備して下記にそのケースを紹介します。  想定ケース:  1.エンティティによる、ボタンの数が異なる場合でもOK。  2.ボタンの見た目を編集可能にする。  3.ボタンのアクションがstringの引数を受け取れる。  4.簡単にするため、ボタンの最大数は10にします。  先ずはボタンの情報をまとめるクラス“ActivityButton“をつくります。  public class ActionButton { public UnityAction<string> theAction; public string argument; public Sprite sprite; public ActionButton(UnityAction<string> act, Sprite sprite, string arg=””){ theAction = act; argument=arg; this.sprite = sprite; } } UIマネージャーにはButton、Image、GameObjectの配列を必要です。パブリックなGameObjectの配列を作ってシーンからボタンをドラッグして、Start()でButtonとImageの配列を作りました。  public class MyEpicUIManager : MonoBehaviour { Button[] actionBtns; Image[] actionImgs; public GameObject[] actionBtnObjs; void Start…

特定のUI要素上でマウスのローカルポジションを見つける

By |

特定のUI要素上でマウスのローカルポジションを見つける

まず、特定のUI要素が特定されているかどうかを調べる必要があります。UI要素がマウスでクリックされているかどうかを判断する方法は複数ありますが、最も一般的な方法は、UnityのPointerEventSystemを使用することです。使用できるようにするには、イベントをトリガーするために必要なさまざまなインターフェースと“using UnityEngine.EventSystems;”というNamespaceを実装する必要があり、SceneのHierarchyにEventSystemを追加することも必要です。また、スクリプトはトリガーされたオブジェクト上にある必要があります。   このEventSystemの詳細については、このリンクをご覧ください: https://docs.unity3d.com/ScriptReference/EventSystems.PointerEventData.html   EventSystemの実装例を次に示します:   別の方法はUnityのBoundsを使用します。 イメージのようなUIオブジェクトでそれを使用できるようにするには、コライダーを置いてオブジェクトと同じサイズにする必要があります。次に、Boundsを見つかるために、このコライダーコンポーネントをスクリプトで取得します。これにより、マウスの位置がこれらの範囲内にあるかどうかを確認することができます。   Bounds についての詳細は、このリンクをチェックしてください: https://docs.unity3d.com/ScriptReference/Bounds.html   Bounds の実装例を次に示します:     オブジェクトをHoveringしていることがわかったので、次のステップは、マウスの位置を世界に相対的ではなく、そのオブジェクトに関連させて見つけることです。そのために、UnityのRectTransformUtilityを使用することができます。ローカルのRectTransformを新しいスクリーン位置として設定することができます。   RectTransformUtility についての詳細は、このリンクをしてください: https://docs.unity3d.com/ScriptReference/RectTransformUtility.html https://docs.unity3d.com/ScriptReference/RectTransformUtility.ScreenPointToLocalPointInRectangle.html   RectTransformUtility の二つの実装例を次に示します、1つはBoundsシステムを使用し、もう1つはEventSystemを使用します。   Boundsシステム:   EventSystem: *canvasがScreen space – Overlayに設定されているため、カメラパラメータはnullに設定されています。   このlocal mouse positionはいろいろな使い方ができます。 たとえば、カンバスにある、レンダーテクスチャを使用してミニーマップ上でクリック位置を取得することができます。

Myoのジェスチャーでコントロールするアプリのデモ

By |

Myoのジェスチャーでコントロールするアプリのデモ

Thalmic Labs 社のMyoというアームバンド型のコントローラーを使って、ジェスチャーを使って操作するアプリのデモを作成しました。 手のグー、パーによって操作するシンプルなゲームです。またジェスチャーによるメニュー選択を実装してみました。

Go Top