(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Lightが反映されない時の対処法【Unity】【トラブルシューティング】

この記事でのバージョン
Unity 5.6.1f1


はじめに

今回はLightを設置したのに反映されない!

という状況を解決するかもしれない方法のご紹介です


f:id:kan_kikuchi:20170711075332g:plain


Pixel Light Count

続きを読む

属性(Attribute)とは【C#】【Unity】【属性】

この記事でのバージョン
Unity 5.6.1f1


はじめに

今回はタイトル通り、属性(Attribute)とはなんぞや?という感じの記事です。

なお、基本的にUnity+C#での話になりますので、あしからず。


目次

  • はじめに
  • 目次
  • 属性とは
  • 使い方
  • オリジナル属性の作り方
  • Inspector上の見た目を変更
  • 属性を付加する対象を設定
  • 付加した属性の取得
  • おわりに
  • 参考



属性とは

続きを読む

UnityでAssertを使う(Debug.Assert と Assertions.Assert)【Unity】

この記事でのバージョン
Unity 5.6.1f1


はじめに

今回はタイトル通り、UnityでAssertを使ってみよう!という記事です。

//IsTrueは条件が真である事を確認する(偽であればエラーを出す)
Assert.IsTrue(_notActiveGameObject.activeSelf, "_notActiveGameObjectがアクティブではありません!");

f:id:kan_kikuchi:20170709081523j:plain


なお、C#にあるAssert(Unityでは使えない?)ではなく、Unity独自の話なのであしからず。


Assertとは

続きを読む

安心安全にUnitySendMessageを使う【Unity】【iOS】

この記事でのバージョン
Unity 5.6.1f1
Xcode 8.3.2


はじめに

UnityではiOSのネイティヴコードからC#(またはjs)を実行するためのメソッド、UnitySendMessage

が用意されています。

Unity iOS は、“UnitySendMessage” を媒介に、限定的なネイティブからマネージコードへのコールバック( native-to-managed callback )をサポートしています


簡単に使えるUnitySendMessageですが、ターゲットになるGameObjectと呼び出すメソッドの名前

文字列で指定しないといけないという欠点もあります。

UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");


これだと打ち間違いの可能性がありますし、名前の変更に対応する事もできません。


と言う事で今回は、安心安全にUnitySendMessageを使おうという記事です。


安心安全にUnitySendMessageを使う

続きを読む

神巫女のSPに関する工夫の話【ゲーム演出】【Unity】【NintendoSwitch】

はじめに

先日、Nintendo Switchでリリースし、

2017年上半期ダウンロードランキングで4位にもなった神巫女


f:id:kan_kikuchi:20170706091020p:plain
Nintendo Switch 2017年上半期 ダウンロードランキング|Nintendo


に関するインタビューをUnityさんにしてもらったのですが、その際にSPの話題がでました。

例えばSPがバラバラって散らばって吸い込まれるところは、Kikuchiさんがプログラムしたものの方が僕がやろうと思ってたことよりも良かったので、「じゃあもう、それで行きましょう」みたいな感じで。


神巫女をプレイしてない方のために説明すると、SPとは敵を倒した時に出現するオブジェクトで、

自動的にプレイヤーに吸収され、技を使う時や宝箱を開ける時等に消費するモノです。


f:id:kan_kikuchi:20170704131831g:plain
f:id:kan_kikuchi:20170702064318g:plain


そういえば、このSPだけでも色々な工夫したな〜と思い、今回記事にしてみました。

神巫女やSwitch、Unityやゲームジャンルに関わらず、わりと汎用的な内容だと思います。


なお、実際のプログラムは記載していないのであしからず。


目次

  • はじめに
  • 目次
  • 発生数の調整
  • 拡散と収束
  • SEずらしと爆発
  • 技中は一時停止
  • オブジェクトプール
  • おわりに



発生数の調整

続きを読む

エディタ拡張でオブジェクトを生成した場合にシーンを保存する方法【Unity】【エディタ拡張】

この記事でのバージョン
Unity 5.6.1f1


はじめに

例えば以下のようなコードで、オブジェクトを生成するエディタ拡張を作る事が出来ますが、

using UnityEngine;
using UnityEditor;

public class GameObjectCreator {

  [MenuItem("Test/Create")]
  public static void Create (){
    //新しいゲームオブジェクトを作成
    new GameObject("New GameObject");
  }

}

f:id:kan_kikuchi:20170616064914g:plain


このコードだと、Sceneに編集済みのマーク(米印)が表示されず、保存する事が出来ません。


今回はそんな時に役立つ記事です。


Undo

続きを読む

検索時にRequest errorというエラーがでる時の対処法【Unity】【トラブルシューティング】

この記事でのバージョン
Unity 5.6.1f1


はじめに

今回は検索時にRequest errorというエラーができる時の対処法です。


f:id:kan_kikuchi:20170615062432p:plain


Show Asset Store search hits

続きを読む

ビルド直前にシーンを自動で設定をしようとしてみた【Unity】【エディタ拡張】

この記事でのバージョン
Unity 5.6.1f1


はじめに

以前に自動でシーンを追加する方法を紹介したのですが、



これとUnity5.6から追加されたIPreprocessBuildを併用すれば、

ビルド直前にシーンを自動で設定出来るのでは?と、そんな事を思い付きました。

Implement this interface to receive a callback before the build is started.
(このインターフェイスを実装して、ビルドを開始する前にコールバックを受け取ります。)


これができれば、設定されているSymbolによって読み込むシーンを変えられるので、

結構便利では?という事で、実際にやってみました!


ScenesInBuildUpdater

続きを読む

SliceしたSpriteの取得を簡単にし、キャッシュもする便利クラス【Unity】

この記事でのバージョン
Unity 5.6.1f1


はじめに

UnityではSpriteEditorを使って一つの画像から複数のSpriteへSliceする事が可能です。


f:id:kan_kikuchi:20170612052729p:plain


こうすることで、一枚一枚で使うよりSetPass Calls(描画命令回数?)が減り、処理が軽くなりますが、

Sliceした画像を読み込むには以下のようにちょっと手間がかかります。

//スライスした画像を全て読み込み
Sprite[] sprites  = Resources.LoadAll<Sprite>("Atlas/SpriteAtlas");

//読み込んだ画像から任意(Cloud)の画像を検索し、取得
Sprite  cloudSprite = System.Array.Find<Sprite>(sprites, (sprite) => sprite.name.Equals("Cloud"));


一度だけならいいですが、何度も同じ処理を書く事は避けたいですし、

Resources.LoadAllとSystem.Array.Findを何度も実行するのは負荷的にも心配です。


という事で、

SliceしたSpriteの取得を簡単にし、キャッシュもする便利クラスSlicedSpriteUtilityを作りました。


SlicedSpriteUtility

続きを読む

enumのToStringが遅いって本当ですか?【C#】【Unity】【拡張メソッド】【高速化】


この記事でのバージョン
Unity 5.6.1f1


はじめに

enumのToStringは遅いという話を耳にしたので、気になって調べてみた系の記事です!

ちなみに、以前にenumをkeyにしたDictionaryが遅いという話も記事にしてました。



そもそものenumのToStringは遅いという由来は以下の通り。

EnumのToStringは非常に遅いです。
これは内部ではリフレクションを使用しているためです。


上記の記事によると、ToStringに代わる拡張メソッドをswitch文で実装する事で

なんと約100倍ものスピードになるそうです!


という事で実際にUnityで確かめてみました!


計測

続きを読む