2017-12-05 8 views
1

私はThirdPersonControllerをプレイヤーとして使用しています。私もキューブを試しました。 FindDirections底の内側フォワード方向が選択されているにもかかわらず、プレーヤーが決して進まない理由は何ですか?

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using System.Linq; 
using System.IO; 

public class DirsFinder : MonoBehaviour 
{ 
    enum Directions 
    { 
     Forward,Backward,Left,Right 
    } 

    public Transform player; 

    private Transform start; 
    private Transform end; 
    private GridGenerator gridgenerator; 
    public List<Vector3> possibleDirections = new List<Vector3>(); 
    private Vector3 direction; 
    private float m_distanceTraveled = 0f; 

    public void Find() 
    { 
     gridgenerator = GetComponent<GridGenerator>(); 
     GenerateStartEnd(); 
     FindDirections(); 
     m_distanceTraveled = 0; 
    } 

    private void FindDirections() 
    { 
     possibleDirections = new List<Vector3>(); 
     Vector3 playerPosition; 
     playerPosition = player.localPosition; 

     if (playerPosition.x > 0) 
     { 
      // can go left 
      possibleDirections.Add(Vector3.left); 
     } 

     if (playerPosition.x + 1.5f < gridgenerator.gridWidth * 1.5f) 
     { 
      // can go right 
      possibleDirections.Add(Vector3.right); 
     } 

     if (playerPosition.z > 0) 
     { 
      // can go backward 
      possibleDirections.Add(Vector3.back); 
     } 


     if (playerPosition.z + 1.5f < gridgenerator.gridHeight * 1.5f) 
     { 
      // can go forward 
      possibleDirections.Add(Vector3.forward); 
      print("I'm moving forward !!!!!"); 
     } 

     direction = possibleDirections[Random.Range(0, possibleDirections.Count - 1)]; 

     if (player.position == start.position) 
      player.forward = direction; 
    } 

    private void Update() 
    { 
     if (m_distanceTraveled < 1.5f) 
     { 
      Vector3 oldPosition = player.position; 
      player.position += direction * Time.deltaTime * 1f; 
      m_distanceTraveled += Vector3.Distance(oldPosition, player.position); 
     } 
    } 

    private List<Vector3> GenerateStartEnd() 
    { 
     GameObject walls = GameObject.Find("Walls"); 
     List<Transform> wallsParents = new List<Transform>(); 
     List<Vector3> startEndPos = new List<Vector3>(); 

     foreach (Transform child in walls.transform) 
     { 
      wallsParents.Add(child); 
     } 

     for (int i = 0; i < 2; i++) 
     { 
      wallsParents.Remove(wallsParents[Random.Range(0, wallsParents.Count)]); 
     } 

     var childsWall0 = wallsParents[0].GetComponentsInChildren<Transform>().ToList(); 
     var childsWall1 = wallsParents[1].GetComponentsInChildren<Transform>().ToList(); 
     childsWall0.RemoveAt(0); 
     childsWall1.RemoveAt(0); 

     start = childsWall0[Random.Range(0, childsWall0.Count)]; 
     player.position = start.position; 
     end = childsWall1[Random.Range(0, childsWall1.Count)]; 
     end.tag = "End"; 
     startEndPos.Add(start.position); 
     startEndPos.Add(end.position); 

     start.GetComponent<Renderer>().material.color = Color.red; 
     end.GetComponent<Renderer>().material.color = Color.blue; 

     return startEndPos; 
    } 
} 

私が選択した方向に直面するプレイヤーを作ってるんだ:

if (player.position == start.position) 
    player.forward = direction; 

は、その後の更新で私が選択した方向に1.5 fistanceことでプレイヤーを移動しています。

これは、3つの方向に罰金働いている:左、右、後方

しかし、それは、私はプレイヤーが右に移動している参照順方向を選択します。 私は何度も試してみましたが、決してグリッド上を進むことはありません。

フォワード方向を選択するのはなぜか前進しない理由がわかりませんが、プレーヤをグリッド上で前進させるわけではありません。

スクリーンショットでは、グリッドの例です。青い円はプレーヤーです。赤い矢印はプレーヤーが移動しているもので、黒い矢印は前方にあるはずですが、決してその方向を動かすことはありません。それは決して黒い矢印の方向に右に動いて楽しみだときのように前方にする必要があります:

Grid example

答えて

0

問題:Random.Rangeライン:

direction = possibleDirections[Random.Range(0, possibleDirections.Count - 1)]; 

策:削除するには - 1

direction = possibleDirections[Random.Range(0, possibleDirections.Count]; 
関連する問題