unity SocialConnector ボタンを押すとスクリーンショットを撮って投稿する

概要

SocialConnectorを利用して、以下の機能を実装する
Android、iPhonでボタンを押すとスクリーンショットを撮ってツイッターに画像投稿する

作業

zipをダウンロード

以下のコミットのデータを取ってきた「Facebookでテキストをシェアできなくなったので追記 #19」
SocialConnector以下のディレクトリーをコピーしてAsset以下に置く

スクリーンショットをSDカードに保存するように修正

f:id:yasuaki-ohama:20151201173011p:plain

シーンの修正

Sampleシーンの以下の場所にのSample.cs代わりに以下のスクリプトを入れる

ShootUI.cs
CaptureAndShareImage.cs

f:id:yasuaki-ohama:20151202005939p:plain

using UnityEngine;

public class ShootUI : MonoBehaviour
{
	GUIStyle style;

	void Start()
	{
		style = new GUIStyle ();
		style.fontSize = 100;
	}

	int count = 0;
	void OnGUI()
	{
		Rect rect = new Rect (10, 100, 400, 300);
		GUI.Label (rect, count.ToString (), style);
		if (GUILayout.Button ("<size=30><b>CaptureAndShareImage</b></size>", GUILayout.Height (60))) {
			GetComponent<CaptureAndShareImage>().Shoot ();
		}
		count++;
	}
}

gist.github.com

gist.github.com

CaptureAndShareImageの構造説明

ファイル名が同じ場合の、「すでにファイルが存在している時」対処をしなければならない。
つまり、ファイルが上書き状態にあるかどうかの判定処理を追記しなければならない(以下のような存在確認だけではダメ)。

	do {
		//Debug.Log ("Temporary ScreenShot hav not been written yet. " + GetImgPath + fileName);
		//書込み処理のために1フレーム待つ
		yield return new WaitForEndOfFrame ();
	} while (!System.IO.File.Exists (GetImgPath + fileName));

また、Twitter投稿時に同じ画像ファイル名を送ると前に利用した画像が出力されてしまい新しい画像が投稿できないことがあった。
以下の理由により、写真を撮るたびに投稿画像名を変更した。

	private void CreateScreenshotsFileName()
	{
		fileName = DateTime.Now.ToString ("yyyyMMddhhmmssfff") + ".png";
	}

最後に、このオブジェクトの生成時に毎回画像を削除するようにした。

結果

f:id:yasuaki-ohama:20151203201404p:plain

C++ 関数ポインタ クラス

概要

C++ではクラス内で関数ポインタを使う時書き方がが変わるので、それを記載する。
gist.github.com
gist.github.com
gist.github.com

実行結果

$  g++ -o FunctionPointer *.cpp  
$  ./FunctionPointer             
function1()
  void func1()
  void func2()
function2()
  void func1()
  void func2()
cs.run1()
  void FunctionPointer::func1()
  void FunctionPointer::func2()
cs.run2()
  void FunctionPointer::func1()
  void FunctionPointer::func2()
  void FunctionPointer::func3()

Unity オブジェクトの階層と当たり判定

Unity4→5にUpdateした時、以下のような状態が発生したので、その解決方法を記載する。

発生方法

子オブジェクトにRigidbodyを持つ親オブジェクトのスケール値を(x,y,z)同じ値にしない
f:id:yasuaki-ohama:20151108232013p:plain
実行するとこうなる
f:id:yasuaki-ohama:20151108231702p:plain

解決方法について説明

親オブジェクトのスケール値を(x,y,z)を同じにする
f:id:yasuaki-ohama:20151108232756p:plain
子オブジェクトのスケール値のみへんこうする
f:id:yasuaki-ohama:20151108232805p:plain

Unity Animationを利用しているオブジェクトの階層を変更した場合の対応方法

概要

以下のようなAnimationを利用したオブジェクトの階層構造がある
f:id:yasuaki-ohama:20151104133100p:plain
この階層にmiddleというオブジェクトを追加しすると、以下のように参照が外れてしまう。
f:id:yasuaki-ohama:20151104133109p:plain

参照の修正方法

ファイルを修正できるように設定を行う
f:id:yasuaki-ohama:20151029120540p:plain

アニメーションファイルのパスを調べる

➜  Assets  grep path Animation.anim
    path: B/B:Child
    path: D/D:Child
    path: A/A:Child
    path: C/C:Child
    path: A
    path: B
    path: C
    path: D
    - path: 1696498558
    - path: 1976881102
    - path: 1836819750
    - path: 3557989513
    - path: 3554254475
    - path: 1255198513
    - path: 1037565863
    - path: 2746444292
    path: B/B:Child
    path: D/D:Child
    path: A/A:Child
    path: C/C:Child
    path: A
    path: B
    path: C
    path: D

このファイルを以下のように修正する

    path: 階層
    path: middle/階層

今回は、Xcodeで置換した
f:id:yasuaki-ohama:20151104134128p:plain
処理後

➜  Assets  grep path Animation.anim
    path: middle/B/B:Child
    path: middle/D/D:Child
    path: middle/A/A:Child
    path: middle/C/C:Child
    path: middle/A
    path: middle/B
    path: middle/C
    path: middle/D
    - path: 1696498558
    - path: 1976881102
    - path: 1836819750
    - path: 3557989513
    - path: 3554254475
    - path: 1255198513
    - path: 1037565863
    - path: 2746444292
    path: middle/B/B:Child
    path: middle/D/D:Child
    path: middle/A/A:Child
    path: middle/C/C:Child
    path: middle/A
    path: middle/B
    path: middle/C
    path: middle/D

結果

f:id:yasuaki-ohama:20151104134228p:plain

資料庫/Unity/Texture

資料庫/Unity

資料庫/Unity/シェーダ

資料庫/Unity

nakamura001 @ ウィキ - トップページ/Unity(Unity3D)/内蔵シェーダのソースコード
nakamura001 @ ウィキ - トップページ/Unity(Unity3D)/内蔵シェーダのソースコード/Transparent/Cutout/Diffuse
UnlitAlphaWithFade - Unify Community Wiki
Unity - マニュアル: サーフェイスシェーダーの例
Unity: Shader with Normals + Shadows
Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた - 凹みTips
マテリアルのマスク処理 Unity3dで円形のマップを作る
http://wiki.unity3d.com/index.php?title=Texture_Mask
ビルドイン(内蔵)シェーダの「Diffuse」のコードを読む - 強火で進め
その2 ShaderLabでUnityシェーダの下地作り
Unity で Transparent/Diffuse で描画順が崩れてしまう際の対処法 - 凹みTips

資料庫/Unity/UGUI

資料庫/Unity

メモ

UGUIのキャンバスはStart,Awakeで宣言しないと最初から表示できない