2017-06-30 15 views
0

私はスペクトラムからゲーム "Snake Pit"のレプリカを作っています。あなたはあなたのプレイヤーとして移動でき、複数のAIコントロールヘビがいます。そして、あなたのすぐ隣にいるときにスネークヘッドを自分の位置に移動させる方法を見つけようとしています。ここに私が実装したいコードがあります。AIの範囲内の特定のオブジェクトを検出するにはどうすればよいですか?

public class SnakeController : MonoBehaviour { 

public int maxSize; 
public int currentSize; 
public GameObject snakePrefab; 
public Snake Head; 
public Snake Tail; 
public Vector2 nextPos; 
public int NESW; 
int Random; 
float lineTimer; 
int NESWTemp; 

// Use this for initialization 
void Start() { 
    InvokeRepeating("TimerInvoke", 0, .3f); 
    lineTimer = UnityEngine.Random.Range(0, 2.5f); 
    currentSize = 1; 
} 

// Update is called once per frame 
void Update() { 
    lineTimer -= Time.deltaTime; 
    if (lineTimer <= 0) 
    { 
     ComChangeD(); 
     lineTimer = UnityEngine.Random.Range(0, 2.5f); 
    } 
} 

void TimerInvoke() 
{ 
    Movement(); 
    if(currentSize >= maxSize) 
    { 
     TailFunction(); 
    } 
    else 
    { 
     currentSize++; 
    } 
} 

void Movement() 
{ 
    GameObject temp; 
    nextPos = Head.transform.position; 

    if(nextPos.y > 3.22) 
    { 
     NESW = 2; 
    } 

    else if (nextPos.y < -4.42) 
    { 
     NESW = 0; 
    } 

    else if (nextPos.x < -8.2) 
    { 
     NESW = 1; 
    } 

    else if (nextPos.x > 7.7) 
    { 
     NESW = 3; 
    } 

    switch (NESW) 
    { 
     case 0: 
      nextPos = new Vector2(nextPos.x, nextPos.y + 0.32f); 
      break; 
     case 1: 
      nextPos = new Vector2(nextPos.x + 0.32f, nextPos.y); 
      break; 
     case 2: 
      nextPos = new Vector2(nextPos.x, nextPos.y - 0.32f); 
      break; 
     case 3: 
      nextPos = new Vector2(nextPos.x - 0.32f, nextPos.y); 
      break; 
    } 

    temp = (GameObject)Instantiate(snakePrefab, nextPos, transform.rotation); 
    Head.SetNext(temp.GetComponent<Snake>()); 
    Head = temp.GetComponent<Snake>(); 
    return; 
} 

void ComChangeD() 
{ 
    NESWTemp = UnityEngine.Random.Range(0, 3); 
    if (NESW == 0) 
    { 
     switch (NESWTemp) 
     { 
      case 0: 
       NESW = 1; 
       break; 
      case 1: 
       NESW = 2; 
       break; 
      case 2: 
       NESW = 3; 
       break; 
     } 
    } 
    else if (NESW == 1) 
    { 
     switch (NESWTemp) 
     { 
      case 0: 
       NESW = 0; 
       break; 
      case 1: 
       NESW = 2; 
       break; 
      case 2: 
       NESW = 3; 
       break; 
     } 
    } 
    else if (NESW == 2) 
    { 
     switch (NESWTemp) 
     { 
      case 0: 
       NESW = 0; 
       break; 
      case 1: 
       NESW = 1; 
       break; 
      case 2: 
       NESW = 3; 
       break; 
     } 
    } 
    else if (NESW == 3) 
    { 
     switch (NESWTemp) 
     { 
      case 0: 
       NESW = 0; 
       break; 
      case 1: 
       NESW = 1; 
       break; 
      case 2: 
       NESW = 2; 
       break; 
     } 
    } 
} 
+1

通常、これらのゲーム内のロジックがあり、それは... – BugFinder

+0

@BugFinderまあでどこ..近いプレイヤーキャラクタへの1歩を踏み出します複数のヘビがあり、それがゲームを難しくするだろう、私はそれをテストし、調整することはありません。おそらくそれで私を助けることができますか?しかし、この機能を除いて、プレイヤーが隣にいればヘビがプレイヤーを殺すようになっています。今、彼らはただの場所に行き、プレイヤーを気にしません。 – Shanespeed

+0

私はその蛇のゲームが何であるかわからないが、なぜコライダーを使用しないのですか? –

答えて

0

空のゲームオブジェクトをヘビの頭の下に作成し、「DetectRange」などと呼んでください。それからあなたのヘビがプレイヤーに従うことを望む範囲の幅と高さにインスペクタの幅と高さを設定します。プレイヤーがその範囲に入ると、ヘビはそれに追従します。次に、Playerオブジェクトのタグを "Player"など(これはインスペクタの上部にある)に設定できます。そして、あなたはDetectRangeにスクリプトを添付して、その中に、あなたはない:AIがあるwhereever

public GameObject playerObject; //Drag player gameobject in inspector 
private float snakeSpeed = 1.0f; 


void OnTriggerStay(Collider col) 
{ 
    if(col.gameObject.Tag == "Player") //Check if player entered collider 
    { 
     playerObject.transform.position = Vector3.MoveTowards(playerObject.transform.position, col.gameObject.position, snakeSpeed); 
    } 
} 
+0

ありがとう!これは間違いなく私の問題を解決するでしょう! – Shanespeed

関連する問題