2016-07-28 4 views
0

Я создаю игру с бегуном, как Hilclimb, Но я не знаю, как сгенерировать монету на поверхности зигзагообразного пути. Это мой Путь enter image description hereЕдинство: Как получить ось y во время запуска zigzag path

генерируется в случайном порядке. Но как получить позицию y в пути во время выполнения, потому что, когда монета генерируется в случайном положении, тогда монета находится некоторое время ниже и некоторое время выше пути.

Итак, пожалуйста, помогите мне, как получить позицию пути y во время выполнения, чтобы генерировать монету на поверхности.

Путь генерировать код - это и монета.

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 
public class TerrainGenerator : MonoBehaviour { 

    public chunk previousChunk; 
    public chunk currentChunk; 
    public chunk nextChunk; 
    public ManagePower power; 
    public GameObject character; 
    public Resize resize; 
    public Coin coin; 
    private PickupResize rise; 
    private pickupPower pick; 
    private PickupCoin pCoin; 
    // Use this for initialization 
    void Start() { 
     rise=FindObjectOfType<PickupResize>(); 
     pick=FindObjectOfType<pickupPower>(); 
     pCoin=FindObjectOfType<PickupCoin>(); 
     float widthprefabs = previousChunk.WidthGroundPrefab; 
     previousChunk.RepositionChunk (new Vector3(-widthprefabs*chunk.CHUNK_SIZE,0,0)); 
     currentChunk.RepositionChunk (Vector3.zero); 
     nextChunk.RepositionChunk (new Vector3(widthprefabs*chunk.CHUNK_SIZE,0,0)); 
     power.RepositionPower (new Vector3(widthprefabs*chunk.CHUNK_SIZE,-0.1f,0)); 
     resize.ResizeSquire (new Vector3(25f,-0.1f,0)); 
     coin.ResetCoin (new Vector3(5f,-0.17f,0)); 
    } 

    // Update is called once per frame 
    void Update() { 
     if(playerReachedNextChunk()){ 
      reassineChunk(); 
     } 
     if (rise.rePick) { 
      resize.ResizeSquire(new Vector3 (rise.distancere, -0.1f, 0)); 
      rise.rePick=false; 
     } 

     if (pick.poPick) { 
      power.RepositionPower (new Vector3 (pick.powerdist, -0.1f, 0)); 
      pick.poPick=false; 
     } 

     if (pCoin.distancere < ObjectScript.distance) { 
      int random = Random.Range (1, 10);   
      pCoin.distancere += random; 
      pCoin.reCoin = true; 

     } 

     if (pCoin.reCoin) { 
      coin.ResetCoin (new Vector3 (pCoin.distancere, -0.1f, 0)); 
      pCoin.reCoin=false; 
     } 

     //print ("ddhdhdhdhhd"+ObjectScript.distance); 

    } 

    private bool playerReachedNextChunk(){ 
     bool playerReachedNextChunk = false; 
     float distance = character.transform.position.x - nextChunk.transform.position.x; 
     //print ("Distance " +distance); 
     if (distance > 0) { 
      playerReachedNextChunk=true; 
     } 

     return playerReachedNextChunk; 
    } 

    private void reassineChunk(){ 
     chunk refToprivesChunk = previousChunk; 
     previousChunk = currentChunk; 
     currentChunk = nextChunk; 
     nextChunk = refToprivesChunk; 

     float xPosition = nextChunk.transform.position.x+3 * nextChunk.WidthGroundPrefab * chunk.CHUNK_SIZE; 
     nextChunk.RepositionChunk (new Vector3(xPosition,0,0));  


    } 
} 
+0

можете ли вы предоставить дополнительную информацию о том, как вы создаете и представляете свой путь? – TheDjentleman

+0

Имеет ли ваш сгенерированный путь коллайдер? Не возражаете ли вы опубликовать картину того, как она выглядит? – Programmer

+0

Да, я добавил многоугольный коллайдер по пути (как показано на рисунке выше) – Destro

ответ

1

Если у вас нет доступа к точным точкам на вашем пути, но вы используете коллайдер, которая аппроксимирует путь, то вы можете использовать Physics.Raycast или Physics2D.Raycast для определения у-координата пути, указанного x (и если вы находитесь в 3D-пространстве z).

Учитывая х (предполагая, что вы в 2D пространстве) можно выполнить следующие действия:
1. Выберите значение у, гарантированно будет ниже/выше вашего пути
2. Если выбрать значение у то есть выше, затем выполните Physics.Raycast, начиная с (x,y) в направлении Vector2.down. Вы также можете использовать маски слоя, чтобы убедиться, что вы попали только в коллайдер вашего пути.
3. Y-составляющая точки попадания - это значение для y пути, которое вы ищете