質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

1回答

231閲覧

Unity5 3D/2Dゲーム開発本のスクリプトに関して

matsukaze

総合スコア7

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2017/10/09 06:41

編集2017/10/09 06:56

###Unity5 3D/2Dゲーム開発本のスクリプトに関して
「Unity5 3D/2Dゲーム開発本」を通してunityの勉強をしています。本に書いてあるようにしっかりスクリプトを書いているのですが、思ったように動作してくれません。
###実現したいこと
プレイヤーはx座標が-2,-1,0,1,2の5つのレーンを常に前進し続ける・・といったゲームです。
「5つのレーンを常に前進し続ける」が実現目標です
###とりあえず、コード全文

public class Nejikocontroller : MonoBehaviour { CharacterController characon; Animator charaanim; const int minline = -2; const int maxline = 2; const float lanewidth = 1.0f; Vector3 movedirection = Vector3.zero; public float gravity; public float speedz; public float speedjump; public float speedx; public float accelerationz; int targetline; // Use this for initialization void Start () { characon = GetComponent<CharacterController>(); charaanim = GetComponent<Animator>(); } // Update is called once per frame void Update () { if (Input.GetKeyDown("left")) movetoleft(); if (Input.GetKeyDown("right")) movetoright(); if (Input.GetKeyDown("space")) jump(); float acclleratedz = movedirection.z + (accelerationz * Time.deltaTime); movedirection.z = Mathf.Clamp(accelerationz, 0, speedz); float ratiox = (targetline * lanewidth - transform.position.x) / lanewidth; movedirection.x = ratiox * speedx; movedirection.y -= gravity * Time.deltaTime; Vector3 globaldirection = transform.TransformDirection(movedirection); characon.Move(globaldirection * Time.deltaTime); if (characon.isGrounded) movedirection.y = 0; charaanim.SetBool("run", movedirection.z > 0f); } public void movetoleft() { if (characon.isGrounded && targetline > minline) targetline--; } public void movetoright() { if (characon.isGrounded && targetline < maxline) targetline++; } public void jump() { if (characon.isGrounded) { movedirection.y = speedjump; charaanim.SetTrigger("jump"); } } }

###疑問部分

float ratiox = (targetline * lanewidth - transform.position.x) / lanewidth; movedirection.x = ratiox * speedx;

まずlanewidthは1なのに割ってる時点で正しいコードとは思えないです・・
z方向はこれで常に前進していくのは分かるのですが、現状、あるx方向に進み続けてしまいます・・
###試したこと
公式サイトも確認しましたが、誤植ではないようです。ただ、気になるのは第6刷発行で、2017年に発行されたものみたいです。
書籍の質問はマナー違反??なのかもしれませんが、苦戦しているのでぜひ助言をいただければと・・よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

edo_m18

2017/10/09 06:51

コードは右記のように、バッククォート3つで囲むと整形されるので回答者が内容を見やすくなります。 ```hoge```
guest

回答1

0

コードを拝見する限り、キーで左右のレーンを切替、ジャンプをしつつ、自動で進んでいく動作と見受けられます。

まずlanewidthは1なのに割ってる時点で正しいコードとは思えないです・・

lanewidthを変更した場合を考えると、正しいコードと思われます。

z方向はこれで常に前進していくのは分かるのですが、現状、あるx方向に進み続けてしまいます・・

あるx方向とはどちらでしょうか?
デバッグするための情報としては、「あるx方向」が大事な情報です。
Debug.Logを埋め込む等して、Update中のmovedirectionの値等を確認して見てください。

なお、書籍の質問であれば、公式へのURLを貼ってもらうほうが良いです。
このタイトルではどの本かよくわかりませんでした。

投稿2017/10/10 00:01

mituha

総合スコア385

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問