2016-07-31 1 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 


    } 
} 

:ThirdPersonControllerとThirdPersonControllerは、(1)歩いているときにキャラクターを180度回転させるにはどうすればいいですか?私は2つのThirdPersoncontroller持つ階層内

を私はThirdPersonControllerにスクリプトを入れて、プレハブはThirdPersonControllerである(1)、それはより多くの15 ThirdPersonControllersをクローニングしています。

次に、クローン作成された15人のプレーヤーのそれぞれが別の速度で歩いています。 更新機能でSキーを押すとThirdPersonControllerが180度回転し、クローンされた15人のプレイヤーもすべて180度回転してこの方向に歩き続けます。

私がしたいのは、Zポジションになっているプレイヤーの1人がこのプレイヤーだけを180度回転させ、180度回転させて2回転目を180度回転させた後、向きを変えて歩くことです。

私は現在、Sキーを条件として使用していますが、それはThirdPersonControllerを回しており、すべてのクローンが彼に従って回転し、方向を変えて歩いています。

私はgos [0] .transformもgos [5] .transformを使用しようとしましたが、5番目のクローンだけを回転させるのではなく、すべて180度にします。

私は(gos [0] .transform.position.z == 108.9377f)またはif(gos [0] .transform.position.z == 100)の条件を試しましたが、次の行はブレークポイントを使いました。

答えて

0

よりもむしろあなたは私がすべての文字が同じ行動を歩いている理由のためにあなたと今Vector3.Distance

を使用してウェイポイント間の距離をチェックしたい正確な値は、このためのラインであることを到達したときに確認します:

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

あなたは、私はちょうどstumblあなたの更新に

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

をこのような何かをしたいと思いますあなたの次の質問に編集:http://stackoverflow.com/questions/38681737/how-can-i-make-my-waypoints-to-workあなたは私の答えを使用しているようです。この質問に回答してください。 – spatbord

関連する問題