【Unity】オブジェクトがカメラに写っているかと注意点

OnBecameVisible()とOnBecameInvisible()を利用する

OnBecameVisibleはオブジェクトが可視状態になった時に呼ばれるメソッドです。
OnBecameInvisibleはオブジェクトが不可視状態になった時に呼ばれるメソッドです。
OnBecameVisibleはSceneViewにオブジェクトが写っている場合も呼ばれます。

using UnityEngine;

public class Visible : MonoBehaviour
{
	private bool isVisible;

	// 可視状態か
	public bool IsVisible
	{
		get { return isVisible; }
	}

	// 可視状態になった時に呼ばれる
	void OnBecameVisible ()
	{
		isVisible = true;
	}

	// 不可視状態になった時に呼ばれる
	void OnBecameInvisible ()
	{
		isVisible = false;
	}

}

可視状態についての注意点

Rendererがアタッチされていないオブジェクトには可視、不可視というものがそもそもありません(描画されないので)。
つまり、Rendererがアタッチされていないオブジェクトについては、OnBecameVisibleとOnBecameInvisibleは呼ばれません。

f:id:hetima333:20170213154823p:plain
例えば、SDユニティちゃんは画像のようにRendererがついているので注意が必要です。
(Rendererなしのオブジェクトに上のスクリプトをアタッチしても機能しません。)

対策として、インスペクタ側で可視不可視の判断に利用するRendererを指定するスクリプトを書いてみました。

using UniRx;
using UniRx.Triggers;
using UnityEngine;

public class Visible : MonoBehaviour
{
	// 可視不可視の判断に使用するRenderer
	[SerializeField]
	private Renderer targetRenderer;

	private bool isVisible;

	// 可視状態か
	public bool IsVisible
	{
		get { return isVisible; }
	}

	void Start ()
	{
		// 可視状態になった時に呼ばれる
		targetRenderer.OnBecameVisibleAsObservable()
			.Subscribe(_ => isVisible = true);

		// 不可視状態になった時に呼ばれる
		targetRenderer.OnBecameInvisibleAsObservable()
			.Subscribe(_ => isVisible = false);
	}
}

【GGJ2017】グローバルゲームジャム2017で学んだこととか

ちょっと遅くないか…?という気がしなくもないですが備忘録のような感じで…

目次 

はじめに

 

作ったゲームはこちらです↓

開発にはCocos2d-xを使用しました

チームはプログラマー2人、デザイナー1人の計3人で、私はプログラマとして参加しました

 

これをふまえた上で記事を見ていただけると幸いです

 

gitignoreは小規模でも入れたほうがいい

 

48時間のGGJは比較的小規模プロジェクトで、gitignoreを入れなくてもいいんじゃないか?ということでgitignoreなしでやってみた

→無駄なファイルの送受信で時間を取られ、gitignoreを入れたほうが時間短縮になった(当たり前といえば当たり前)

 

Linkerのエラーはビルド対象が正しいか確認する

 

プログラムをマージしてビルドする際に、何故かビルドが通らない

Windowsではビルドが通るのにMacでは通らない

→原因はXCode側でビルド対象に含めていないことでした

 

SourceTreeのブランチ分け

 

今まで何も考えず、思考停止でmasterブランチだけ使用していたのですが、機能ごとにブランチを分けて、masterブランチは常に安定版としておいたほうがいいと知りました

ちなみにブランチの作成方法(SourceTreeの場合)は、

  1. 切りたいコミットで右クリック
  2. ブランチ名を入力
  3. ブランチ作成ボタンをクリック

の簡単3ステップ!

 

考えたことを書いておく

 

48時間という限られた時間の中で効率的に作業を行うには、頭の中をできるだけスッキリさせておいたほうがいい(よさそう)なので、タスクや浮かんだアイデアはTrelloやEverNoteに放り込んでおくといい