2017-10-17 15 views
0

Vous avez trouvé comment le faire, mais pourquoi il se déplace si vite? Comment puis-je le faire bouger beaucoup plus lentement? Je ai essayé de changer la vitesse à 0,3f au lieu de 20 mais encore trop vite.Comment puis-je déplacer un objet dans une position aléatoire, puis le faire pivoter lorsqu'il est atteint à la nouvelle position et passer à une nouvelle position aléatoire?

Peut-être ne pas utiliser Vector3.Lerp mais Traduire? Je veux être en mesure de contrôler la vitesse de très lente même 0 ne bouge pas du tout à très vite comme c'est le cas maintenant.

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); 
    } 
} 

Un spectacle clip vidéo très court i enregistré maintenant le comportement de mouvement du cube en utilisant les deux Vector3.MoveTowards ou Vector3.Lerp. Dans les deux cas quand je change la vitesse de Lerp pour jeûner très rapidement il se déplace rapidement autour de la zone des murs quand je change la vitesse à très lente le cube se déplace au centre et se déplace rapidement sur la zone très limite. Mais le cube devrait se déplacer lentement tout autour de la zone entre les murs. Au lieu de cela, il se déplace rapidement mais sur une petite surface. Pas certain de pourquoi.

Même lorsque vous utilisez MoveTowards.

Le comportement que je veux que le cube se déplace est, c'est quand je change la vitesse à très très lent ou rapide ou ver très rapide déplacer vers des positions aléatoires tout autour de la zone des murs. Dans la zone des murs. Dans la vidéo, les murs sont de 500x500, mais le cube se déplace sur très très petite zone.

Move

Répondre

0

poule, ajouter un flottant pour contrôler la vitesse, puis utilisez Time.deltaTime dans votre code. Utilisez ces deux lignes

public float speed; 

et

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

Bonne chance.

+0

Ceci est un clip vidéo très court que j'ai enregistré maintenant montrer le comportement du mouvement du cube lors de l'utilisation à la fois Vector3.MoveTowards ou Vector3.Lerp. Dans les deux cas, lorsque je change de vitesse à Lerp pour accélérer très rapidement, il se déplace rapidement autour de la zone des murs lorsque je change la vitesse à très lentement le cube se déplace vers le centre et avance rapidement sur la zone limite. Mais le cube devrait se déplacer lentement tout autour de la zone entre les murs. Au lieu de cela, il se déplace rapidement mais sur une petite surface. Pas certain de pourquoi. Même lorsque vous utilisez MoveTowards. https://www.youtube.com/watch?v=OSO63iw3wH4&feature=youtu.be –