質問: GameObject.FindGameObjectWithTag ("Player"); } // Update is called once per frame void Update () { if (Input.GetButtonDown ("Jump")) { player.transform.Translate (Vector3.up * Time.deltaTime * jumpspeed); } } ``` ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: transform.Translateは、「この命令が呼ばれた瞬間、指定された位置に移動する」命令です。 つまりこのコードだと、ジャンプというよりも「空中にワープした」状態になります。 ジャンプというのは 地面の高さ→低い高さ→中ぐらいの高さ→一番高い高さ→中ぐらいの高さ→低い高さ→地面の高さ と経過時間毎に高さが推移します。 また、ジャンプを真上ではなく斜めに行った場合は、水平方向にも移動します なので「ジャンプしてから0.n秒経った」という時間計測と、 「その時の位置」を算出し、 それに合わせてtransform.Translateを実行する必要があります。 前者は「Unity 一定時間ごと」で検索すると色々な方法が出て来ます。 後者は「放物運動」「放物線」などで調べてみてください。 (もちろん現実の物理学に合わせる必要はありません。マリオのジャンプのように「現実にはあり得ない動き」は物理演算を使用しないで自分で実装しないと作れません)