2017-10-17 1 views
0

それを行う方法が見つかりましたが、なぜそれが速く動いているのですか?どうすればそれをずっとゆっくり動かすことができますか?代わりに0.3fに20の速度を変更しようとしましたが、それでも速すぎます。どのようにランダムな位置にオブジェクトを移動し、新しい位置に到達したときに回転し、新しいランダムな位置に移動できますか?

おそらくVector3.Lerpを使用していませんが、翻訳しますか? 私は非常に遅いから速度を制御したいと思っていますが、今のように全く動かないこともあります。

using System; 
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class SpawnObjects : MonoBehaviour 
{ 
    public int numberOfObjects; 
    public GameObject objectToPlace; 
    public Vector3 newObjectsSize = new Vector3(5,5,5); 

    private int currentObjects; 
    private int wallsLengthX; 
    private int wallsLengthZ; 
    private int wallsPosX; 
    private int wallsPosZ; 
    private List<GameObject> objects = new List<GameObject>(); 

    void Start() 
    { 
     var wi = GetComponent<WallsTest>(); 
     wallsLengthX = (int)wi.lengthX; 
     wallsLengthZ = (int)wi.lengthZ; 
     wallsPosX = (int)wi.wallsStartPosition.x; 
     wallsPosZ = (int)wi.wallsStartPosition.z; 
    } 
    // Update is called once per frame 
    void Update() 
    { 
     if (currentObjects != numberOfObjects) 
     { 
      GameObject newObject = (GameObject)Instantiate(objectToPlace);//(GameObject)Instantiate(objectToPlace, new Vector3(posx, posy, posz), Quaternion.identity); 
      newObject.transform.localScale = new Vector3(newObjectsSize.x, newObjectsSize.y, newObjectsSize.z); 
      newObject.transform.localPosition = GenerateRandomPositions(newObject); 

      objects.Add(newObject); 

      currentObjects += 1; 
     } 


     objects[0].transform.position = Vector3.Lerp(objects[0].transform.position, GenerateRandomPositions(objects[0]), (Mathf.Sin(20f * Time.time))); 
    } 

    private Vector3 GenerateRandomPositions(GameObject newObject) 
    { 
     float paddingX = Mathf.Clamp(newObject.transform.localScale.x, 0, wallsLengthX)/2f; 
     float paddingZ = Mathf.Clamp(newObject.transform.localScale.z, 0, wallsLengthZ)/2f; 
     float originX = wallsPosX + paddingX - wallsLengthX/2f; 
     float originZ = wallsPosZ + paddingZ - wallsLengthZ/2f; 
     float posx = UnityEngine.Random.Range(originX, originX + wallsLengthX - paddingX); 
     float posz = UnityEngine.Random.Range(originZ, originZ + wallsLengthZ - paddingZ); 
     float posy = Terrain.activeTerrain.SampleHeight(new Vector3(posx, 0, posz)); 

     return new Vector3(posx, posy, posz); 
    } 
} 

これは私が両方Vector3.MoveTowardsまたはVector3.Lerpを使用している場合、今キューブ運動挙動を示す記録が非常に短いビデオクリップです。

Lerpの速度を非常に速く変更すると、速度が非常に遅くなると壁の周りが速く移動し、キューブが中心に移動し、非常に限られた領域で高速に移動します。しかし、立方体は、壁の間のすべての領域でゆっくり動くはずです。代わりに、それは速く動いていますが、小さな領域にあります。理由は分かりません。

MoveTowardsを使用する場合と同じです。

私がキューブを動かしたいという振る舞いは、スピードを非常に遅くまたは速く変えたり、非常に速く動かすことで、壁の周りのあらゆる場所にランダムに移動します。壁の内側 ビデオでは、壁は500x500ですが、立方体は非常に小さな領域を移動しています。

Move

答えて

0

編、その後、あなたのコード内でTime.deltaTimeを使用し、速度を制御するための公共のフロートを追加します。この2行

public float speed; 

objects[0].transform.position = Vector3.Lerp(objects[0].transform.position, 
GenerateRandomPositions(objects[0]), (Mathf.Sin(speed * Time.deltaTime))); 

幸運を使用してください。

+0

これは非常に短いビデオクリップです。これで、Vector3.MoveTowardsまたはVector3.Lerpの両方を使用しているときにキューブの動作が表示されるようになりました。 Lerpの速度を非常に速く変更すると、速度が非常に遅くなるように速度を変更すると壁の周りが速く移動し、キューブが中心に移動し、非常に限られた領域で速く移動します。しかし、立方体は、壁の間のすべての領域でゆっくり動くはずです。代わりに、それは速く動いていますが、小さな領域にあります。理由は分かりません。 MoveTowardsを使用する場合も同じです。 https://www.youtube.com/watch?v=OSO63iw3wH4&feature=youtu.be –

関連する問題