🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

3666閲覧

【Unity】Vector3.Lerp・Vector3.MoveTowardsが上手く動作せず、、

aaachi

総合スコア69

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/11/09 06:11

編集2018/11/09 06:27

(前回の質問が丸投げな内容になってしまったため、改めて質問を投稿します。)

実装したいこと

GameObjectであるobject1をクリックすると、
カメラがobject1の位置に、滑らかに移動するようにしたい。

問題点

クリックしたとき、僅かにだけしか、動かない。(指定した位置には向かっている様子)
Debug.Log(nextPos);で確認したところ、noneが常に吐き出されているようでした。
(クリックしてから、object1もずっと吐き出ています。(正常))

C#

1//GameObject:Object1にアタッチするスクリプト 2 3using System.Collections;  4using System.Collections.Generic; 5using UnityEngine; 6 7public class CameraMove : MonoBehaviour { 8 9 public GameObject camera;//インスペクタ側でカメラをアタッチ 10 private string nextPos = "none"; 11 private Vector3 nowPos; 12 private float speed = 5f; 13 14 private void OnMouseDown(){ 15 nextPos = "object1"; 16 nowPos = camera.transform.position; 17 } 18 19 private void Update(){ 20 Debug.Log(nextPos); 21 if(nextPos == "object1"){ 22 //カメラのposition移動 23 Vector3 targetPos = new Vector3(3f,1f,0f); 24 camera.transform.position = Vector3.Lerp(nowPos, targetPos, speed*Time.deltaTime); 25 } 26 } 27} 28

なぜ、noneが常に吐き出されてしまうのでしょうか?
none→object1に書き換えられることが、理想です。

すみませんが、回答宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

https://docs.unity3d.com/ja/current/ScriptReference/Vector3.Lerp.html
Leap関数のサンプルにある通り

移動開始時の時間を保存しておいて、現在時間からの引き算にしてtを求めてください。

投稿2018/11/09 07:23

rururu3

総合スコア5545

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

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

aaachi

2018/11/09 09:57

回答ありがとうございます。 サンプルの通り書いてみたところ、 正しく動作しました。 これからはリファレンスに沿って書いていきます。。!
guest

0

ベストアンサー

クリックしたとき、僅かにだけしか、動かない。(指定した位置には向かっている様子)

Vector3.Lerp(a, b, t)はtが0のときはa、1のときはbを返す関数です。(参考
そのため、Vector3.Lerp(nowPos, targetPos, speed*Time.deltaTime);としてしまうと、speed*Time.deltaTimeは0に近いため、aの位置からほとんど動かないという結果になります。

Debug.Log(nextPos);で確認したところ、noneが常に吐き出されているようでした。

このスクリプトが複数のオブジェクトにアタッチされている、もしくはあるオブジェクトに複数アタッチされている、ということはないでしょうか?


(前回の質問が丸投げな内容になってしまったため、改めて質問を投稿します。)

質問は編集できるので、次からはそちらで対処してください。

投稿2018/11/09 06:41

fiveHundred

総合スコア10152

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

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

aaachi

2018/11/09 09:55

回答ありがとうございます。 このスクリプトが複数のオブジェクトにアタッチされている、もしくはあるオブジェクトに複数アタッチされている、ということはないでしょうか? >> まさにそうでした。うっかり複数くっついてたようです… Vector3.Lerp(a, b, t)はtが0のときはa、1のときはbを返す関数です。(参考) そのため、Vector3.Lerp(nowPos, targetPos, speed*Time.deltaTime);としてしまうと、speed*Time.deltaTimeは0に近いため、aの位置からほとんど動かないという結果になります。 >>過去に、MoveTowardsで、そのようにしてたまたま上手く動作していたので、正しい書き方だと思っておりました。これからはリファレンスに沿った書き方をしていこうと思います。 また、(a, b, t)の関係もわかりやすく説明下さり、ありがとうございます。 質問は編集できるので、次からはそちらで対処してください。 >>以後気を付けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問