中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

unity使用鏈表實現貪吃蛇游戲的方法

發布時間:2020-08-03 10:57:53 來源:億速云 閱讀:221 作者:小豬 欄目:編程語言

這篇文章主要講解了unity使用鏈表實現貪吃蛇游戲的方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

要實現的功能很簡單,按下空格鍵使蛇加長一節,每次按下空格就在蛇尾加一個cube。按下左方向鍵,控制蛇的移動。如圖所示:

//貪吃蛇的中心是:定義蛇身第一節,即鏈表頭為temp。鏈表的子節點為next。蛇頭帶著temp(鏈表頭)走,temp帶著next(鏈表子節點)走。

unity使用鏈表實現貪吃蛇游戲的方法

1. 創建一個cube設為預設體,作為蛇身的節點。在預設體上面添加BodyScript腳本。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class BodyScript : MonoBehaviour {
  //創建子物體的連接節點(next節點從鏈表的第二個元素開始,next是從算上蛇頭的第三節開始)
  //用來接收物體的臨時位置  
  private Vector3 myPos;
  /// <summary>
  /// 移動方法
  /// </summary>
  /// <param name="pos">pos</param>
  public void Move(Vector3 pos)
  {
    //將移動之前的位置記錄下來
    myPos = transform.position;   
    //更新物體位置--傳進來的父物體的位置坐標
    transform.position = pos;
    //如果當前cube還有子節點,不是蛇尾最后一節
    if (next != null)
    {
      //將子物體移動到父物體的位置
      next.Move(myPos);
    }
  }
}

2.在Hierarchy面板上,創建一個cube作為蛇頭。添加一個SnakeMove腳本。來控制蛇頭并且創建鏈表。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class SnakeMove : MonoBehaviour {
  //Cube預設體
  public GameObject body_prefab;
  //聲明一個計時器
  float timer = 0;
  //實例化蛇身的第一節。算上蛇頭的第二節(即鏈表的第一個節點)
  public BodyScript temp;  
  //指向最后生成的節點(相當于指針,始終指向蛇尾) 
  public BodyScript point;

  void Update () {
    //計時器
    timer += Time.deltaTime;
      //每隔0.2秒來執行移動
    if(timer >= 0.2f)
    {
      //移動
      Move();
      //計時器清零
       timer = 0;
    }
    //如果按下左方向鍵
    if(Input.GetKeyDown(KeyCode.LeftArrow))
    {
      //向左旋轉
      transform.Rotate(Vector3.up, -90);
    }
    //如果按下空格
    if (Input.GetKeyDown(KeyCode.Space))
    {        
      //實例化一個cube,作為蛇身的下一節(先把新生成的cube放置到視野外,現在還沒有把新生成的cube接到蛇身上)
      GameObject newBody = Instantiate(body_prefab, new Vector3(444, 0, 0), Quaternion.identity) as GameObject;
      //若子物體的節點為空(只有蛇頭的情況下,第一次按下空格,滿足這個if條件)
      if (temp == null)
      {
        //temp賦值。這時候,蛇身有了第一節,鏈表的第一個元素產生。
        temp = newBody.GetComponent<BodyScript>();
        //將指針指向蛇身的第一節(因為此時只有一節身體)
        point = temp;
      }
      //第二次,第三次生成時
      else
      {

        point.next = newBody.GetComponent<BodyScript>();
        //指向下一個物體的位置
        point = point.next;
      }      
    }
  }


  //創建接收物體的坐標
  Vector3 pos;
  void Move()
  {
    //獲取當前物體的坐標
    pos = transform.position;
    //默認向前移動
    transform.Translate(Vector3.forward);
    //若鏈表頭不為空(就是蛇身第一個cube生成了)
    if (temp != null)
    {
      //執行子物體移動的方法(鏈表頭開始移動)
   //貪吃蛇的重點是,蛇頭的移動帶動鏈表頭的移動,鏈表頭再帶動鏈表里的子節點移動
      temp.Move(pos);
    }     
  }
}

看完上述內容,是不是對unity使用鏈表實現貪吃蛇游戲的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巍山| 唐河县| 工布江达县| 同仁县| 定日县| 嘉禾县| 芜湖县| 武鸣县| 浮梁县| 彩票| 永康市| 车致| 金坛市| 湘乡市| 天津市| 衢州市| 封开县| 荔波县| 昌吉市| 二连浩特市| 遂溪县| 乐山市| 鲁甸县| 奉节县| 天峨县| 咸丰县| 松江区| 中西区| 峨山| 花垣县| 万年县| 舒城县| 营口市| 磐石市| 峨边| 开平市| 昭觉县| 荣成市| 体育| 辉县市| 涞源县|