ラベル Unity の投稿を表示しています。 すべての投稿を表示
ラベル Unity の投稿を表示しています。 すべての投稿を表示

2018年3月24日土曜日

のせのせ!鳥獣ギガンテスをリリース

のせのせ!鳥獣ギガンテスをリリースしました!
鳥獣戯画の著作権が切れたとのことで、こちらのキャラクタを活かしてスタックゲームを作りました。
どうぶつタワーバトルの便乗ですね😅

ただ、こちら普通にアプリ申請しても通りません!
先にも書いたようにどうぶつタワーバトルの模倣アプリが蔓延しているため、独自性がないという理由でApple様にリジェクトされます。

私の場合、それは事前に予想していたので少し独自性を持たせました。
他スタックゲーム(この呼び方が正しいのか分からないですが)は土台があって、そこに何個積めたかをスコア化しています。
鳥獣ギガンテスではスタックした後、全てのオブジェクトが静止していることを確認した後、不可視のバーを土台から計測して擬似的に積んだ高さをスコア化しています。
正直何個積めたかという管理はすごく簡単なんです。単純にインクリメントしていけばいいだけですから😅
不可視バーの制御や処理の軽量化には気を遣いました。

また、物理エンジンを利用したゲームも始めてだったので色々勉強になりました。
誰がどこまで管理するか(イベントドリヴンにするにあたり重要)、MVC設計に基いているか等、考慮する点は多いと思います。

オンライン対戦化したいけど、コスパが悪そうで躊躇してます😇

設計や物理エンジン等、ご質問があればお気軽にどうぞ!

2018年3月23日金曜日

ラーメン道をリリース

ラーメン道というアプリをリリースしました。
こちらはUnity ver 5.6で制作しております。
何気にUnityでアプリリリースってしたことなかったんですよね。なので勉強がてらXcodeプロジェクト書き出しからアプリ書き出しまでやってみたかったんです😀

ゲーム内容的には指定の注文通りに適切なゲージをタップで止めてこなしていく感じです。相変わらずさほど目立った機能はないです😅

ただ、タップの制御やUniRXを用いたイベントドリヴン設計など一度本格的に組み込んでみたかったので、勉強になりました。
アプリが面白いかどうかも重要ですが、アプリリリースを目標に勉強した感じですね。机上で勉強するだけじゃ得られないものもたくさんあるので。

あとタイトルシーンではアプリサムネイルにもいますが、Live2Dを組み込んでいます。
タッチした方向を向かせたり、キャラクタタップ時に音声を再生しています。
無料でサンプル配布しているヒヨリちゃん(?)だっけな。そんな感じの子を利用させてもらってます。
サンプルデータについてはこちらをご確認下さい!

Live2DのUnity組み込みやUniRXなどご質問あればお気軽にどうぞ!

2016年8月31日水曜日

UnityのGetComponentとかFindとか

間違いや過不足などあればご指摘頂けると!

GetComponentに関して

gameObject.GetComponent<XXX>();した際、対象のクラスのコンポーネントが複数存在する場合は不定
複数取得する場合はGetComponentsを利用
gameObject.transformには.parentや.childCountなど親子関係の情報も保持

GetComponent (XXX)だと戻り値はComponent型となるためGetComponent(XXX) as XXXとすることでXXX型として返すことが可能
GetComponent<XXX>()であればジェネリクスを用いてXXX型で返すことが可能
該当するオブジェクトがない場合はnull

interfaceを指定したい場合はGetComponent(typeof(XXX)) as XXX

GetComponentsInChildren(XXX, true)で非アクティブもヒット
(GetComponentsInChildren<XXX>(true)も同様)

Find系に関して

Find("XXX")で名前でオブジェクトを検索することが可能
Find系は基本的にアクティブのみヒット

transform.Find("XXX")とすることで直下の子供だけを検索(孫以下は対象外)
非アクティブもヒット

FindObjectOfType(typeof(XXX))によってクラス名を指定して検索

名前で検索するのは重い処理
複数ヒットした場合は不定

非アクティブに関して

オブジェクトを非アクティブにする時はgameObject.SetActive(false)
スクリプトを非アクティブにする時はComponent.enabled = false

Unityのイベント関数

Unityで用意されてるイベント関数(StartとかUpdateとか)の一覧です。
覚書程度に。。。
勉強中ですので間違いや過不足などあればご指摘頂けると!

  • Reset : オブジェクトがアタッチされた時
  • Awake : インスタンス化直後(自身の初期化処理に留める)
  • OnEnable : アクティブ有効化
  • OnLevelWasLoaded : シーンが読み込まれた時
  • Start : インスタンス有効後、最初のフレームのUpdate直前(他オブジェクトも絡めた初期化処理)
  • FixedUpdate : フレームレートが低い場合はUpdateよりも頻繁に、高い場合はフレーム間に一度
  • Update : フレーム毎に呼出し
  • LateUpdate : Update直後に一度呼出し
  • OnPreCull : カメラがシーンを間引く前に呼出し
  • OnBecameVisible, OnBecameInvisible : カメラが表示 / 非表示になる度
  • OnWillRenderObject : オブジェクト表示時、カメラに対して一度
  • OnPreRender : カメラがシーンのレンダリングを開始する前
  • OnRenderObject : 全てのシーンレンダリング終了後
  • OnPostRender : カメラがシーンのレンダリングを終了した後
  • OnRenderImage : 画面レンダリング完了後、画面処理が可能になった際
  • OnGUI : GUIイベントに応じてフレーム毎に呼出し
  • OnDrawGizmos : Gizmosの描画に使用
  • OnDestroy : オブジェクト破棄直前のフレーム
  • OnApplicationQuit : アプリケーション終了前
  • OnDisable : 動作が無効になると呼出し

Unityで動的にAddComponent

動的にAddComponentしたい

gameObject.AddComponent<BoxCollider> ();

gameObjectとかBoxColliderは適宜置き換えて下さい(´・ω・`)

AddComponentしたコンポーネントを調整したい

BoxColliderのサイズを調整したいとかそういった場合は以下のように調整可能です。
BoxCollider collider = gameObject.AddComponent<BoxCollider> ();
collider.center = new Vector3 (0.0f, 0.0f, 0.0f);
collider.size = new Vector3 (1.0f, 1.0f, 1.0f);

centerは中心点からのオフセット値です!

2016年8月25日木曜日

MonoDevelop

MacのMonoDevelopさん、日本語入力が出来るようになったのは最近のお話。
日本語対応してくれたのは素直に嬉しい限りですし、文句言える立場ではないのですが、以下のような現象が発生しております(´・ω・`)

コメントとかで「昨日は」とか入れたい場合(あくまで例です)
キーボード的にはKINOUHAと入力すると思います。

KINOUと入力して「昨日」に変換して、HAと入力すると「あ」となるのです。。。
KINOU(in) -> 昨日(out) -> HA(input) -> あ(out)

以下のように入力すれば問題ないのですけどね。。。
KINOU(in) -> 昨日(out) -> Enter -> HA(input) -> は(out)

日本語変換を確定する次の入力(space, tab, deleteなどなどを除いて)をEnterとして処理しているのか、内部的なことは分かりませんが自分の癖のせいで非常に面倒なことになっております(´・ω・`)

同じ理由で嘆いている人は見かけなかったので少数意見かもしれません。
いや、日本語対応してくれただけで喜ばなきゃいけない!文句ばっか言ってちゃいけない!

あ、あと対応する括弧にジャンプする機能が欲しいのとファイルのタブ切替えをNext/Prevじゃなくて現実のタブ基準にして欲しいです(´・ω・`)

2016年8月19日金曜日

Unity x MagicaVoxel

無料で使える超有能ツールMagicaVoxel
使い方も簡単、Unityでのインポートも簡単と素晴らしいツールです。
デザイン系ツールが全然使えない自分でもゲーム感覚で簡単にボクセルが作れちゃいます。

詳しい使い方やインポート方法は他サイト様が詳しく書いてくださってますので割愛。
Unity内で座標を決定する際の基準点、Pivotについて。
MagicaVoxelではデフォルトで書き出すとX軸中央、Y軸下、Z軸中央にPivotが設定されております。
これを書きだした後にスクリプトから変更するのはこちらのサイト様を見る限り別の空オブジェクトを作って、その子供にしたり〜など厄介そうです。。。

ただ、MagicaVoxelはconfigをいじればPivotを自分で設定可能です!
普通にリリースノートに書いてあるんですが、誰かのお役に立てればと。。。

MagicaVoxel -> config -> config.txtfile_obj -> pivotの箇所をいじります。
pivot = '0 0 -1' // -1 : min, 0 : center, 1 : max
と記述があると思います。
X=0, Y=0, Z=-1です。
こちらMagicaVoxel上の軸ですのでお間違いなく!
MagicaVoxel上でオブジェクトを真上から見た際に右方向がX軸の正の方向、上方向がY軸の正の方向、真正面から見た際の上方向がZ軸の正の方向です。
なので以下のように変更すればオブジェクトの中央にPivotを設定できます!
pivot = '0 0 0' // -1 : min, 0 : center, 1 : max

2016年8月10日水曜日

UnityのMarkLightについて覚書 2

UnityのMarkLightについて覚書 2
MarkLight (AssetStore)
MarkLight Document (英語)

コード内でアニメーションを動的に生成したい時はここ(Creating Animations in Code)に記載があります。
以下、そのまま抜粋

var offsetAnimator = new ViewFieldAnimator();

// set up animation
offsetAnimator.EasingFunction = EasingFunctionType.QuadraticEaseOut;
offsetAnimator.Field = "Offset"; // the field that is to be animated
offsetAnimator.From = new ElementMargin();
offsetAnimator.To = new ElementMargin(x, y, 0, 0); // x and y set during runtime
offsetAnimator.Duration = 0.2f; // duration in seconds
offsetAnimator.TargetView = MyRegion; // the view whose Offset field is to be animated

// start animation
offsetAnimator.StartAnimation();

ただ、このままアニメーションしたいタイミングの箇所に記載しても動作しません。。。
TargetViewのUpdateに以下を記述する必要があります!

ViewFieldAnimator offsetAnimator;
void Update ()
{
    if(offsetAnimator != null && offsetAnimator.IsRunning)
        offsetAnimator.Update ();
}

当然、var offsetAnimator = 〜としていた箇所はメンバ変数を見るよう修正してください!

2016年7月31日日曜日

UnityのMarkLightについて覚書 1

UnityのMarkLightについて覚書
MarkLight (AssetStore)
MarkLight Document (英語)

xmlとcsファイルが対になっている。
Viewデザインに関するファイルをxmlとして管理出来る。
日本語解説サイトはほぼ皆無(´・ω・`)

<Sample (何かしら設定) Example-Scale="1">
  <Label Text="Sample内のテキスト" Width="100%" Height="100%" TextAlignment="Center" />
  <StateAnimation From="Default" To="Example" AnimationCompleted="ExampleAnimationCompleted">
    <Animate Field="Scale" From="1" To="0.8" Duration="250ms" AutoReverse="True" EasingFunction="QuadraticEaseOut" />
  </StateAnimation>
</Sample>

上記XMLであればSample.xml, Sample.csが必要となります。
Sampleタグのオブジェクトが選択された場合やクリックされた場合などに以下コードを実行するとStateAnimation内のアニメーションが実行されます。
SetState ("Example"); // Sample.cs

そして親であるSampleタグ内にExample-Scaleという記述があると思います。
これがExample状態になった時にScaleを1に設定するという指定です。
StateAnimation内でScaleについてアニメーションさせようとしているので先に指定しておかないとアニメーションしませんでした。。。
特に指定しなくてもアニメーションさせられるんじゃないかと思っているのですが、方法は分からず(´・ω・`)
まぁ初期値的な感じで使用しています。

StateAnimationにてAnimationCompletedについて記述しており、こちらは指定したアニメーション完了時に呼び出されるメソッドを指定出来ます。
コード例は以下。
public Action OnExampleAnimationCompleted;
public void ExampleAnimationCompleted()
{
  // 何かしら処理(SetStateしたりクリックイベントを通知したり)
}

なんでメンバ変数用意しなければいけないのか、とかはまだよく分かってません。。。
先の指定もMarkLight側で紐付け作業があると思うのですが、そこまで解読出来てないです。。。
分かり次第、追記致します。

Animateタグ内は見たまんまの設定が可能です。
詳細はドキュメント内のAPIを参照してもらえればと。