2016-11-19 12 views
0

私はクラスのプロジェクトに取り組んでいる新しい学生です。私は唯一の場面でカメラに1つのスクリプトを添付しています。カメラが第1オブジェクト上で一時停止し、第2オブジェクトにスクロールして一時停止し、第3オブジェクトにスクロールして一時停止して終了します。このコードをUPDATEに置くと、カメラは決して停止しません。ここでSTARTでは15秒くらい躊躇してから最後のオブジェクトに行くと機能が停止します。遅延は10秒に設定されていることに注意してください。関数にコードを入れてSTARTから関数を呼び出そうとしましたが、うまくいきませんでした。私は間違って何をしていますか? HELP ME OB1 ....x軸上の3つのオブジェクトを一時停止するにはどうすればよいですか?

もう1つ...スタートは音を鳴らすのに最適な場所ですか?

using UnityEngine; 
using System.Collections; 

// I want the camera to pause over the 1st object, scroll to the 2nd object and pause 
// then scroll to the 3rd object and pause then end. Putting this code in the UPDATE 
// the camera never stops. Here in the START, it hesitates around 15 sec and then it 
// goes right to the last object, then the function stops. Note the delay set for 10 
// seconds. 

public class CameraControl : MonoBehaviour 
{ 
    public float speed;  // How fast to move the camera 
    public int moves;  // How many moves to make 
    public float MyWait;  // How long to pause over object 


    // Use this for initialization 
    void Start() 
    { 
     StartCoroutine(MyDelay()); 
     for (int y = 1; y <= 2; y++)   // go to the next two objects 
     { 
      for (int i = 1; i <= moves; i++) // Move the camera to the next position 
      { 
       Camera.main.transform.Translate(new Vector3(1.0f, 0.0f, 0.0f) * speed * Time.deltaTime); 
       Debug.LogFormat("moves = {0} ", i); 
      } 
      StartCoroutine(MyDelay()); 
     } 
    } 

    IEnumerator MyDelay() 
    { 
     yield return new WaitForSeconds(10.0f); 
    } 

} 
+0

単純な遅延ではなく、コードの機能をコルーチンに配置する必要があります。この質問が明日までに返答されない場合は、私の電話ではなく、私のコンピュータからコードを書いてみてください。また、それはあなたのアップデートに配置することをお勧めしません。 – Alox

+0

また、カメラにアニメーションを追加してそのアニメーションを再生することもできます。 – Alox

+0

ありがとうございました....それは大きな助けになるでしょう。 – BillB

答えて

0

このコードをカメラに配置し、カメラの移動先のオブジェクトをすべてオブジェクトリストに配置してください。カメラを少し後ろにしてオブジェクトが見えるようにするには、単に正確な位置を指定するのではなく、新しいVector3を作成し、その新しいVector3に反復オブジェクトのx、y、zを与えてから、カメラからオブジェクトまでの距離を軸とする距離です。

public float MyWait = 5;  // How long to pause over object 
public float speed = 5f;  // How fast to move the camera 
public List<GameObject> Objects;  //List of each object for the camera to go to 


void Start() 
{ 
    StartCoroutine(MoveToObject(0)); 
} 

IEnumerator MoveToObject(int iteratingObject) 
{ 
    //Wait for however many seconds 
    yield return new WaitForSeconds(MyWait); 
    bool atDestination = false; 

    //Move the camera until at destination 
    while (!atDestination) 
    { 
     yield return new WaitForFixedUpdate(); 

     transform.position = Vector3.MoveTowards(transform.position, Objects[iteratingObject].transform.position, Time.deltaTime * speed); 

     if (transform.position == Objects[iteratingObject].transform.position) 
      atDestination = true; 
    } 

    //Continue iterating until moved over all objects in list 
    if(iteratingObject != Objects.Count - 1) 
     StartCoroutine(MoveToObject(iteratingObject + 1)); 
} 
+0

オブジェクトはすべて、その上に画像がある3D平面です。それらはすべてx軸に沿っています。私はカメラをx軸に沿って動かし、各オブジェクト上で一時停止させたい。私はそれぞれの飛行機にタグを割り当てました。タグは、Image1、Image2、Image3と言うことができます。では、どのようにオブジェクトをリストに追加するのですか?カメラは現在Image1を見ています。 – BillB

+0

OK ...私は愚かだと呼びますが、私は実際にベクトル3をカメラに追加する方法を知らない。カメラは現在Image1を見ていて、画像を見るのに完璧な距離にあります。私はこれが変わらないことを願っています。 シーンのどこにいてもコードが画像を見つけるかのように見えます。それはとてもクールです....私はとても興奮しています。画像をリストに追加する方法を知り、必要に応じてvector3を追加するだけです。 – BillB

+0

私はすでにそれを行う方法を説明しましたか? transform.position = Vector3.MoveTowards(transform.position、Objects [iteratingObject] .transform.position、Time.deltaTime * speed)の代わりに。 Vector3を書き留めます。(Transform.position、新しいVector3(オブジェクト[iteratingObject] .transform.position.x、オブジェクト[iteratingObject] .transform.position.y、オブジェクト[iteratingObject] .transform.position.z - distanceFromObject)、Time.deltaTime *スピード);ここでdistanceFromObjectはオブジェクトからどれくらい離れているかを示すパブリック変数です。 – Alox

0

私は、この機能がスムーズに動作するようにするために、いくつかのコードをUpdate関数に入れる必要があると思います。 Time.deltaTimeは実際にはUpdate関数で意味をなさないでしょう。ここでこれを使用し、Start関数のすべてを実行しようとするとうまくいきません。また、変換変換を設定すると、指定された値に位置が即座に設定されます。直線補間(lerp)を参照してください。

現在の状態、つまりあなたが見ているオブジェクトを追跡するために使用するメンバーがいることをお勧めしますが、状態の列挙型は読みやすいかもしれません。

あなたはあなたがその状態になっていた期間を保持することができます。これは更新で増やすことができます。 更新中に、状態を変更するか、移動中のカメラを更新する時間かどうかを確認できます。

幸運を祈る!

+0

私は以前にUnityやc#を使ったことがなく、OOLでプログラムされていません。それはあなたが私に外国語を話しているようなものです。これが機能するには、コードがどのように見えるべきかを知ることが役に立ちます。本当に助けたいと思っているので、私はあなたの意見、user2287379を感謝します。私はそれをありがとう。 – BillB

関連する問題