みかづきブログ その3

本ブログは更新を終了しました。通算140万ユーザーの方に観覧頂くことができました。長い間、ありがとうございました。

👆

引越し先はこちらです!

MOVファイル(iPhoneで撮影した動画とか)をMacのQuickTimeで再生できる形を維持したままmp4に変換したい

以前は、

ffmpeg -i filename.mov filename.mp4

という形で変換していたのですが、
MacのQuickTimeで再生しようとすると、

f:id:kimizuka:20180222105413p:plain

このファイルはQuickTime Playerと互換性がありません。

という感じで開くことができませんでした。

ffmpeg -i filename.mov -pix_fmt yuv420p filename.mp4

という感じでオプションをつけたら解決しました。



ffmpegの導入の仕方はこちら。

kimizuka.hatenablog.com

Unityでインスタンスをまたいでイベントを通知する 引数を必要とするとき編(delegateをつかう)

例えばUIボタンを押したときにSpriteにアタッチしているスクリプトのpublicメソッドを叩きたい時、JavaScriptならEventDispatcherを使ったりしていたんですが、Unityだとどうしたもんかと思っていました。

とりあえずdelegateをつかってイベントを渡してみることにしました。


ButtonController(ボタンにアタッチするスクリプト)
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ClickEventArgs : EventArgs {
	public string txt;
}

public class ButtonController : MonoBehaviour {
	private ClickEventArgs args = new ClickEventArgs();

	public event EventHandler OnClickHandler = delegate {
		Debug.Log ("CLICK!");
	};

	void Start () {
		this.args = new ClickEventArgs ();
	}

	public void OnClick (string foo) {
		this.args.txt = foo;
		this.OnClickHandler (this, this.args);
	}
}
SpriteController(スプライトにアタッチするスクリプト)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpriteController : MonoBehaviour {
	public void Say (string txt) {
		Debug.Log (txt);
	}
}
GameController
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameController : MonoBehaviour {
	[SerializeField]
	private GameObject Button;
	[SerializeField]
	private GameObject Sprite;

	// Use this for initialization
	void Start () {
		Button.GetComponent<ButtonController> ().OnClickHandler += delegate (object sender, EventArgs args) {
			string txt = (args as ClickEventArgs).txt;
			Sprite.GetComponent<SpriteController> ().Say (txt);
		};
	}
}

こんな感じで引数を渡せました。

Unityでインスタンスをまたいでイベントを通知する 引数を必要としないとき編(delegateをつかう)

例えばUIボタンを押したときにSpriteにアタッチしているスクリプトのpublicメソッドを叩きたい時、JavaScriptならEventDispatcherを使ったりしていたんですが、Unityだとどうしたもんかと思っていました。

とりあえずdelegateをつかってイベントを渡してみることにしました。


ButtonController(ボタンにアタッチするスクリプト)
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ButtonController : MonoBehaviour {
	public event EventHandler OnClickHandler = delegate {
		Debug.Log ("CLICK!");
	};

	void Start () {

	}

	public void OnClick () {
		this.OnClickHandler (this, EventArgs.Empty);
	}
}
SpriteController(スプライトにアタッチするスクリプト)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpriteController : MonoBehaviour {
	public void Say () {
		Debug.Log ("Sprite!");
	}
}
GameController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameController : MonoBehaviour {
	[SerializeField]
	private GameObject Button;
	[SerializeField]
	private GameObject Sprite;

	// Use this for initialization
	void Start () {
		Button.GetComponent<ButtonController> ().OnClickHandler += delegate {
			Sprite.GetComponent<SpriteController> ().Say ();
		};
	}
}

引数がなければこんな感じで実装できました。