社内のUnity使いが3人に増えました。
Unity使いと言っても僕はまだまだ見習いみたいなものですが。。。
そんなこんなで(どんな)1人1つクソゲーでもいいからゲームを作ってリリースしようという話になり、ただいま制作に力を入れております。
タップ(クリック)した位置にキャラクターを移動させたい
制作中のゲームでタップした位置にキャラクターを移動させたくなりました。
ネットで色々調べていたのですが「これだけ書けば動くよ!」なんていう簡潔なものやら何やら多すぎて。。。
iTweenを使ったやり方が一番コードを短く書けそうだったのでiTweenを入れて、載っていたコードをそのまま拝借(俗に言う丸パクリ)いたしました。結果。うまくいかず。。。
ここで散々悩みました、詰みました。
あーだこーだやってみてもうまくいかず、泣きそうになりながら怪しいところをgoogle先生に聞きました。
その怪しいところとは・・・「Transform」と「Rect Transform」
そのまま拝借したコードはTransformが設定されていた場合のコードでした。
動かしたいキャラはRectTransform設定でしたので、それはうまくいかないわけです。
要はCanvasの座標が取得したかった!(google先生に聞く時は自分が何を知りたいのか具体的に聞かなくては・・・。)
CanvasのRectTransformを動かしたい場合はスクリーン座標だけでいいみたいです。
スクリーン座標とは?
Input.mousePosition
マウスクリック時に取得できる座標がスクリーン座標らしいです。
コードで書くと
[SerializeField]
GameObject player;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector3 position = Input.mousePosition;
iTween.MoveTo(player.gameObject, iTween.Hash("x", playerTapPoint.x, "y", playerTapPoint.y, "time", 10.0f));
}
}
}
最終的にこんなコードになりました。
Canvasの座標をとってそこに10秒かけてキャラが移動するスクリプトです。
まとめ
Canvasの座標とる話でどんだけダラダラ書いてるんだっていうツッコミが聞こえる。。。
↓今回参考にさせていただいたサイトです。
からあげさんのデジタルフロッグ
http://karaagedigital.hatenablog.jp/entry/2016/09/04/132300
はじめこちらだけで書いていて詰みました。。。
↓そしてもう1つ
こちらもからあげさんのデジタルフロッグ
http://karaagedigital.hatenablog.jp/entry/2016/09/22/201900
こちらはCanvas座標の他にワールド座標、ビューポート座標の変換なども載っており、大変わかりやすくまとまっています。
お・わ・り