前提
先日Unity入門書を読み終えたので現在トップビューの2Dゲームを作っています
実現したいこと
タイトル通り操作キャラの[Rotation Z]をマウスのワールド座標のある方向に向かせたい
ただし移動はwなら上、sなら下、aなら左、dなら右固定とする
添付画像の通りキャラは一枚のimage画像だけで出来ています
発生している問題・エラーメッセージ
対処方法が見つかりません
試したこと
wasdによる上下移動と
[SerializeField] protected float xSpeed = 1.5f, ySpeed = 1.5f; private Vector2 moveDelta; protected void CharacterMovement(float x, float y) { moveDelta = new Vector2(x * xSpeed, y * ySpeed); transform.Translate(moveDelta.x * Time.deltaTime, moveDelta.y * Time.deltaTime, 0); }
マウス座標のワールド座標変換は書けました
private void FixedUpdate() { moveX = Input.GetAxisRaw("Horizontal"); moveY = Input.GetAxisRaw("Vertical"); CharacterMovement(moveX, moveY); mousePos = mainCam.ScreenToWorldPoint(Input.mousePosition); }
こちらのサイトに似たような方法がありましたがこれだと前進した場合マウスの方に行ってしまいます。
検索してもなかなか対処法が見つからない為こちらの参考書を購入しようかと思いましたがこの質問内容に対する答があるかないかを確認するためだけに購入する事が出来ません
有識者の方、どうか知恵をお貸しください
補足
キャラがどこを向いていても移動はワールド座標に依存する
さらに補足
moveX = Input.GetAxisRaw("Horizontal"); moveY = Input.GetAxisRaw("Vertical"); CharacterMovement(moveX, moveY);
での入力ではなく
public float speed = 10.4f; Vector3 pos = transform.position; if (Input.GetKey("w")) { pos.y += xSpeed * Time.deltaTime; }
のような入力方式(こちらを参考)にしたところ想像していた移動を実装することが出来ました!
同じようなものをここ https://ja.stackoverflow.com/questions/89048/ で答えてるので、適当に直して使ってください。ポイントは
transform.up = lookAtPosition - transform.position;
でローカル座標系の上方向をマウスの方向に向けているところです。
あと、FixedUpdate で入力を受け付けてはいけません。Update で受け付けましょう。
ポイントのtransform.upをrightに変えることで正面を向かせることは出来ました
移動に関する内容が私の説明不足だったので補足を追記しました。
bboyさんの貼ったコードを参考にすると移動がキャラの向きを軸としてしまうため非常に操作が難しくなってしまいます。
カメラの座標を親とすることで解消できるかと考えましたので今から行動しようと思います
方向だけ参考にして移動は自分で書けばいいと思いますよ。
教えていただいた通り移動は違う書き方をしたら思うように移動できるようになりました!コードは追加したさらに補足 に書きました。
問題は解決しましたがちょっとした相談よろしいでしょうか。
自身が目指してるゲームはこちら(URL直貼りごめんなさい)
https://www.youtube.com/watch?v=UDaVPzI5alM
なんですが、自身が読んだ入門書というのが簡単な2d脱出ゲームと物理パズルを作成するもので、目指すゲームに関する知識がほぼ0に近い状況です。
現状こちら(URL直貼りすみません)
https://www.youtube.com/watch?v=5w961c7hC_U&t=1776s
を参考にしています
もし私が目指しているゲームに関する参考書があればそれも利用したいと考えています。
キャラ移動だけで6時間ほど使ってしまっている為何か良い参考書があれば教えてください。

回答1件
あなたの回答
tips
プレビュー