移転
http://taross-f.github.io 続きはこちら
C#6.0 get-only property スニペット
C#6.0でget-only propertyがありますね。
プロパティ - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
immutableなクラスをお手軽に作れる! ただし僕個人としてはプロパティはprop/propgのスニペットで入力派だったのに、get-onlyのsnippetデフォルトでついてこなくて悔しい! ので作りました。
get-only なので propgoにしてみました
3D脱出ゲームでuGUIとカメラ移動
ちょっとした脱出ゲームみたいなのを作ろうとして、よくある2Dの部屋の画像をつなぐんでなくそのまま3D空間でやったら楽じゃないって思って、 どうせならカメラの切り替えもぱっと切り替わるんじゃなくてぐいっと動いたらいい感じじゃないかな、と思ってやってみました。
プラスせっかくなのでタップ判定は透明なUGUIボタンで拾えばいろいろ微調整しやすそうだし、Editorからの連携うまくさせたいなーなんて思ったり。 エディタ操作でいければ非エンジニアも触りやすいような気がして。ただし結構複雑になっちゃったのでアレですが。
とりあえずやってみた

中身
using UnityEngine;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
// control camera transition
public class CameraTransition : MonoBehaviour {
// timespan to transition
[SerializeField]float transitionSecond = 1;
Dictionary<int, Camera> cameras = new Dictionary<int, Camera>();
int currentId;
// default camera id
const int DefaultId = 0;
bool transiting;
void Start ()
{
// ensure that camera id is unique each other
cameras = GameObject.FindObjectsOfType<CameraId>()
.ToDictionary(x => x.Id, x => x.GetComponent<Camera>());
// ensure default id camera exist
cameras.First(x => x.Key == DefaultId)
.Value
.gameObject
.SetActive(true);
cameras.Where(x => x.Key != DefaultId)
.Select(x => x.Value)
.ToList()
.ForEach(x => x.gameObject.SetActive(false));
}
public void Transit(int nextId)
{
if (nextId == currentId) return;
if (transiting) return;
StartCoroutine(TransitCore(nextId));
}
private IEnumerator TransitCore(int nextId)
{
transiting = true;
var currentCamera = cameras[currentId];
var originPosition = currentCamera.transform.position;
var originRotation = currentCamera.transform.rotation;
var nextCamera = cameras[nextId];
var elapsedTime = 0f;
while (elapsedTime < transitionSecond)
{
elapsedTime += Time.deltaTime;
currentCamera.transform.position = Vector3.Lerp(originPosition, nextCamera.transform.position, elapsedTime / transitionSecond);
currentCamera.transform.rotation = Quaternion.Slerp(originRotation, nextCamera.transform.rotation, elapsedTime / transitionSecond);
yield return null;
}
transiting = false;
currentId = nextId;
nextCamera.gameObject.SetActive(true);
currentCamera.gameObject.SetActive(false);
currentCamera.transform.position = originPosition;
currentCamera.transform.rotation = originRotation;
}
}
対象カメラをStart()で拾ってくる→Transition()がきたらpositionとrotationをLerpする ってだけです。
Prefabsの中のCameraTransitionをヒエラルキーに入れればOKになってます。
でTransitionに使いたいカメラにCameraId.csをアタッチ。Idを0から振れば準備OK。
重複したりDefaultIdのカメラがないとエラーでます。
Tagつかったりとかもっと上手いこと出来そうですが…
using UnityEngine;
// Attach to camera to be transitable
public class CameraId : MonoBehaviour {
[SerializeField]int id;
public int Id { get { return id; } }
}
あとはButtonのOnClick()にエディタからCameraTransitionのTransition()を選択して、遷移先のカメラIDを設定すると動きます。

ポイント
各カメラをあらかじめ配置しておいて、遷移するときに次のカメラの位置まで線形で移動→次のカメラActivate、位置戻してdeactivate。
uGUIのCanvasでScreenSpace camera 選択したものと組み合わせた脱出ゲーム的ゲーム前提での話にすると
macでユーザーグループを変更する

小ネタです。
最近brew updateとかbrew install hogeで /usr/local以下でPermission deniedがでて書き込めなかったことがありました。
確認したこと
/usr/local/hoge 系のディレクトリが 775, グループがwheel
groups user_name
wheelが入ってないことを確認。
/etc/groupでwheelにユーザー足してみる。
→結果変わらず…
なんでやねんってなってましたがmacだとユーザー管理が違うんですね。
正解
正しくはdsclコマンドを使って以下のように。
sudo dscl . -append /Groups/wheel GroupMembership user_name
これやったあとはgroups user_nameにもwheelが出てくるようになります。
node.jsでtwitter apiを叩く

nodejsからtwitter api v1.1を叩きたいってなったのでやってみた。
node-twitterをインストール
npm install twitter
利用
各種keyは事前に取得しておきましょう。
var twitter = require('twitter');
var t = new twitter({
consumer_key: 'hoge',
consumer_secret: 'hoge',
access_token_key: 'hoge',
access_token_secret: 'hoge'
});
t.get('/search/tweets', { q: 'node' }, function (error, tweets, response) {
console.log(tweets);
});
REST APIだけ。StreamAPIは要件的に不要だったので。
ハマったポイントとしてはいくつか同じ内容の記事がググると出てくるんですが、get()のシグネチャ(正しくは第二引数のfunctionのシグネチャ)が変わったっぽいとこですね。 よくある記事だと第一引数にdataが入ってきてるようになってて上手く取れないなーってなってたんですが、2個目に取得したデータが入ってくるのでそれをとればいけました。
余談
この手のkey関連を含んだgithubのリポジトリに載せるときってみなさんどうやってるんですかね。 設定だけ抜き出して、bitbucketとかのプライベートリポジトリに置きつつ、デプロイ時にごにょごにょするってやろうと思ってますがありなのかな。もっとスマートなやり方もある気がする