2016-07-31 15 views
-1
using System; 
using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 
using UnityStandardAssets.Characters.ThirdPerson; 

public class Multiple_objects : MonoBehaviour { 

    public GameObject prefab; 
    public GameObject[] gos; 
    public int NumberOfObjects; 
    private ThirdPersonCharacter[] thirdPersonCharacter; 
    private Animator[] _animator; 
    private int count = 0; 
    private List<float> floats = new List<float>(); 

    public float smooth = 1f; 
    private Vector3 targetAngles; 

    void Awake() 
    {  
     Vector3 v3 = prefab.transform.position; 
     _animator = new Animator[NumberOfObjects]; 
      gos = new GameObject[NumberOfObjects]; 
     for(int i = 0; i < gos.Length; i++) 
     { 
      count = count + 2; 
      GameObject clone = (GameObject)Instantiate(prefab, Vector3.zero, Quaternion.identity); 
      gos [i] = clone; 
      gos [i].transform.position = new Vector3 (v3.x - count, v3.y, v3.z); 
      _animator [i] = gos[i].GetComponent<Animator>(); 
      float randomspeed = 0f; 
      // Keep repeating this until we find an unique randomspeed. 
      while(randomspeed == 0f || floats.Contains(randomspeed)) 
      { 
       randomspeed = UnityEngine.Random.Range(1.0f, 15.0f); 
      } 
      floats.Add (randomspeed); 
      //float vertInput = 1.0f; 
      _animator [i].SetFloat ("Speed", randomspeed); 
      if (randomspeed != 0.0f) 
       _animator[i].speed = randomspeed; 
      else 
       _animator [i].speed = 1.0f; 
     } 
    } 

    // Use this for initialization 
    void Start() { 

    } 

    // Update is called once per frame 
    void Update() { 

     if(Input.GetKeyDown(KeyCode.S)) // some condition to rotate 180 
      targetAngles = gos[5].transform.eulerAngles + 180f * Vector3.up; // what the new angles should be 

     transform.eulerAngles = Vector3.Lerp(gos[5].transform.eulerAngles, targetAngles, smooth * Time.deltaTime); // lerp to new angles 


    } 
} 

In der Hierarchie ich habe zwei ThirdPersoncontroller: ThirdPersonController und ThirdPersonController (1)Wie kann ich einen Charakter machen, der sich beim Gehen um 180 Grad dreht?

ich das Skript auf dem ThirdPersonController setzen und das Fertig ist der ThirdPersonController (1), dann ist es mehr 15 ThirdPersonControllers klonen.

Dann läuft jeder der geklonten 15 Spieler in einer anderen Geschwindigkeit. Nun in der Update-Funktion, wenn ich auf die S-Taste drücke, dreht sich der ThirdPersonController um 180 Grad und dann drehen sich alle geklonten 15 Spieler ebenfalls um 180 Grad und laufen weiter in diese Richtung.

Was ich tun möchte ist, wenn einer der geklonten Spieler in Z-Position 180 Grad nur diesen Spieler drehen und schalten 180 Grad für eine Sekunde oder zwei gehen auf Platz drehen dann weiter in die gedrehte Richtung.

Also in der Update-Funktion verwende ich jetzt die S-Taste als Bedingung, aber es dreht sich der ThirdPersonController und alle Klone drehen sich nach ihm und gehen in die gedrehte Richtung.

Ich habe versucht, gos [0] .transform auch gos [5] .transform zu verwenden, aber es wird nicht nur der fünfte Klon gedreht, sondern alle um 180 Grad gedreht.

Und die Bedingung habe ich versucht, wenn (gos [0] .transform.position.z == 108.9377f) oder wenn (gos [0] .transform.position.z == 100), aber es wird nie zu bekommen In der nächsten Zeile habe ich einen Breakpoint benutzt.

Antwort

0

Anstatt Überprüfung, wenn Sie erreichen, dass genauer Wert, ich Abstand zwischen Ihnen überprüfen würde und der Wegpunkt all Vector3.Distance

nun aus dem Grunde verwendet die Zeichen die gleiche Aktion gehen, weil diese Linie ist

transform.eulerAngles = Vector3.Lerp(gos[5].transform.eulerAngles, targetAngles, smooth * Time.deltaTime); 

Sie wollen würde

for(int i = 0; i < gos.Length; i++) 
{ 
    //if(Input.GetKeyDown(KeyCode.S)) // some condition to rotate 180 
    // targetAngles = gos[i].transform.eulerAngles + 180f * Vector3.up; 

    // If the Distance between gos[i] and Vector3(0,0,100) is smaller than 3f 
    if(Vector3.Distance(gos[i].transform.position, new Vector3(0,0,100)) < 3f) 
    { 
     targetAngles = gos[i].transform.eulerAngles + 180f * Vector3.up; 
    } 

    gos[i].transform.eulerAngles = Vector3.Lerp(gos[i].transform.eulerAngles, targetAngles, smooth * Time.deltaTime); 
} 
+0

ich so etwas wie dies in Ihrem Update zu tun, nur stumbl: ed auf deine nächste Frage: http://stackoverflow.com/questions/38681737/how-can-i-make-my-waypoints-to-work wo du meine Antwort zu verwenden scheint. Könnten Sie diese Frage bitte als beantwortet markieren? – spatbord