Web上にあるUnityのサンプルコードを眺めているとC#固有というか特有な機能等があったりして、C#をよく解っていない俺氏はコードが理解出来ず(´・ω・`)
その都度ぐぐるわけだが、それも段々面倒くさくなり、C#の本でも買うかと考えた。
で、たまたまkindleでセールをやっていて、金城俊哉という人の「Visual C# 2017パーフェクトマスター」という書籍が¥1,244だったので買ってみた。amazonのレビューでも悪くなさそうだったのだが…
失敗だった…_| ̄|○
日本語表現がちょっとおかしかったり、同じ表現を繰り返してまだるっこしかったり、踏み込んだ内容が少なくて冗長、誤字等が多いという感じで読んでいて苦痛だったわ(ヽ'ω`)
レイアウトや時々入ってるHintやMemoとかもなんか酷かったな。あれは空白を埋める為に適当に入れるものなんだろうか。
4章までは頑張って読んだけどそこで本を閉じた…_| ̄|○
後のアプリケーション作成の方は必要になったら読めばいいし。マルチスレッドプログラミングも今のところ必要ないし。
この人は同じような本を何冊か書いてるみたいなんだけど、皆こんなレベルなんだろうか。
もしかしたら下請けライターみたいなのが居て、それを取りまとめているのかなぁ?
一部分だけ詳述されているがそれ以外の部分は知っていることをただ羅列しましたみたいな感じで内容にムラがあったので、そんな風に思ってしまった。
取り敢えず中級者が読むには内容が薄く、初級者が読むには誤字が多くて表現が冗長で解りにくいという印象。もっと言うと知識を文字(及び図)を使って他者へと伝達するという意志が見られない書籍であった(ノ∀`)
これを買うならWebでぐぐって自分に合った学習サイトで勉強した方がいいかもねぇ(´・ω・`)
この人の本と秀和システムの本にはもう手を出さないにしようw
内容は著者が担う問題だけど誤字が酷いのは編集プロダクションか出版社の問題だからなぁw
画面スクロール
結局スクロールに関しては「UnityでiOS/Android/Editorの共通タッチ処理を実装する」にdeltaを取れるように追加してみたをベースにし、2本指でスワイプした時にカメラを並行移動させる処理を実装するの内容を混ぜてみた。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScreenScroll : MonoBehaviour {
<pre><code>public float moveSpeed = 0.1f;
private Camera mainCamera;
private float horizontalPosition;
private float varticalPosition;
private Vector2 beforePoint;
private Vector2 nowPoint;
// Use this for initialization
void Start()
{
mainCamera = Camera.main;
}
// Update is called once per frame
void Update()
{
TouchInfo info = AppUtil.GetTouch();
switch (info)
{
case TouchInfo.Began:
beforePoint = AppUtil.GetTouchPosition();
break;
case TouchInfo.Moved:
nowPoint = AppUtil.GetTouchPosition();
if (nowPoint.x - beforePoint.x != 0)
{
horizontalPosition = (nowPoint.x - beforePoint.x) * (-1);
horizontalPosition *= moveSpeed * Time.deltaTime;
mainCamera.transform.position =
new Vector3(Mathf.Clamp(mainCamera.transform.position.x + horizontalPosition, 0f, 7f),
mainCamera.transform.position.y, 0f);
}
if (nowPoint.y - beforePoint.y != 0)
{
varticalPosition = (nowPoint.y - beforePoint.y) * (-1);
varticalPosition *= moveSpeed * Time.deltaTime;
mainCamera.transform.position =
new Vector3(mainCamera.transform.position.x,
Mathf.Clamp(mainCamera.transform.position.y + varticalPosition, -10f, 0f), 0f);
}
beforePoint = nowPoint;
break;
case TouchInfo.Ended:
break;
}
}
</code></pre>
}
この内容が正しいかどうかは解らない(ノ∀`)
2D用スクロールなのでQuaternionの辺りは削除してみた。
一応動いてくれてるので、後は移動限界値を可変にするだけでいいかな。
imageと普通のオブジェクトの違い(ヽ'ω`)
面倒くさくなって来たので端折って書くが、Unityの寺子屋 定番スマホゲーム開発入門で学んだことから拡張しておこうとした俺氏は、
- UI上にimageを並べてしまったが為に画面スクロールがまともに動作しないという事態に陥る。(カメラ設定を変えると動くけど意図しない大きさになったんだったかな?)
- imageからGameObjectに変え、canvasではなく新たに作ったGameObjectの子としてインスタンスを生成したら、スクロールはするようになったが、意図した配置にならなくなった。
- インポートしたimageの「Pixels Per Unit」を正しい値にしたら、まぁまぁ意図した配置になった。(厳密には未解決(ノ∀`))
- GameObjectをタップしても反応しなかったので、Physics 2D RaycasterやらBox Collider 2Dを追加したり。
参考:
【Unity2D】Pixels per Uint について
Unity(3D・2D) EventSystemでクリックイベントの制御
画面出力
実機の画面上に簡単に出力する方法が見当たらなかったので、
UnityのGUIでテキスト(文字)を表示させる方法【初心者向け】
テキストのサイズを変更する
を参考に、
void Start()
{
style = new GUIStyle();
style.fontSize = 50;
}
<pre><code>void OnGUI()
{
GUI.TextField(new Rect(100, 100, 200, 200), Screen.width + &quot;:&quot; + Screen.height,style);
}
</code></pre>
みたいな感じにした。まあこれは解像度を出力してるだけ。
「Screen.width + ":" + Screen.height」の部分を変数にしといて、update()の方でその値を更新すれば画面ログ出力が出来る感じか(´・ω・`)