2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

【3Dゲームエンジン】Unity質問スレッド24

938 :名前は開発中のものです。:2016/06/09(木) 19:09:32.57 ID:EEzXjuP3.net
>>935
別にこれバグってる訳じゃないんだよなぁw正しく動いている。
この式の操作がどういうものか理解できていないので意図通りでない、と勘違いしてるだけ。
じゃあどうしたいのか、というのは自分で決めるしかないのでどうにもならないんだなぁこれがw
例えばMove()をこんな風に書き換えたとする。cameraはcamTransとかにしてある。
void Move()
{
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
Vector3 stick = (camTrans.rotation * new Vector3(h, v, 0)).normalized;
Vector3 move = Vector3.Cross(floorNormal, Vector3.Cross(camTrans.forward, stick));
if (move.sqrMagnitude > 0.1f)
{
Quaternion rotation = Quaternion.LookRotation(move, player.up);
player.rotation = Quaternion.Slerp(player.rotation, rotation, 0.2f);
}
player.position += (move * moveSpeed * Time.deltaTime);
}
これだと最初の頂上にいる状態だと横に動いてくれない。
しかし例えばこれで右入力で右周りに動いてくれたとして球の真横まで来たら
そのまま下に下がる、のだろう?
しかし最初に下入力してプレイヤを真上から見る状態にしてから左右を入力して球の真横まで
持って行ったとして今度はその球の真横まで来た状態で左右を入力したら下に下がるのか?奥に行くのか?
という矛盾が起きる。
最初のコードだと縦方向、横方向動くなくなる地点が真下に来たときなので真下に来た時点で致命的に動かなくなる訳だ。
このやり方だと致命的に動かなくなる地点はない。
解決策があるとしたら現在の入力とムーブベクターを記憶しておいてその照合から座標変換に補正を掛ける、とかだろうか。
しかし正直それが正解かは結局自分で決めるしかない。

総レス数 1006
312 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200