国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Unity】3D貪吃蛇游戲制作/WebGL本地測試及項目部署

這篇具有很好參考價值的文章主要介紹了【Unity】3D貪吃蛇游戲制作/WebGL本地測試及項目部署。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文是Unity3D貪吃蛇游戲從制作到部署的相關(guān)細(xì)節(jié)
項目開源代碼:https://github.com/zstar1003/3D_Snake
試玩鏈接:http://xdxsb.top/Snake_Game_3D
效果預(yù)覽:
【Unity】3D貪吃蛇游戲制作/WebGL本地測試及項目部署,Unity,unity,3d,游戲
試玩鏈接中的內(nèi)容會和該效果圖略有不同,后面會詳細(xì)說明。

游戲規(guī)則

經(jīng)典貪吃蛇游戲:蛇身隨著吃食物的增加不斷變長,通過A/D或方向鍵←→控制方向,蛇頭撞在蛇身上或四周墻壁會導(dǎo)致游戲失敗。

蛇身控制和碰撞檢測

蛇身控制和碰撞檢測的邏輯寫在SnakeController.cs文件中。

蛇頭運動的思路是將蛇頭不斷朝forward的方向前進(jìn),前進(jìn)速度等于速度數(shù)值x當(dāng)前時間。同時通過一個list來記錄蛇頭運動的歷史軌跡,蛇身通過該軌跡進(jìn)行運動。

為了區(qū)分延申出來的蛇身是初始蛇身還是新延申的蛇身,對新延申的蛇身打上Block標(biāo)簽,不進(jìn)行區(qū)分則會導(dǎo)致剛開始碰撞即觸發(fā)蛇頭蛇身碰撞,導(dǎo)致游戲結(jié)束。

完整代碼:

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

public class SnakeController : MonoBehaviour
{
    // 設(shè)置
    public float moveSpeed = 5f;
    public float steerSpeed = 180f;
    public float bodySpeed = 5f;
    public int Gap = 10;

    // 預(yù)制體
    public GameObject bodyPrefab;  //身體組件

    // 身體組件集合
    private List<GameObject> _bodyParts = new List<GameObject>();
    private List<Vector3> _positionHistory = new List<Vector3>();

    //音樂控制器
    public AudioController audioController; 

    private void Start()
    {
        addBodyPart();
        audioController = GameObject.FindGameObjectWithTag("Audio").GetComponent<AudioController>();
    }
    private void Update()
    {
        // 向前移動
        transform.position += transform.forward * moveSpeed * Time.deltaTime;

        // 方向操控
        float steerDirection = Input.GetAxis("Horizontal");  // 返回值從 -1 到 1
        transform.Rotate(Vector3.up * steerDirection * steerSpeed * Time.deltaTime);

        // 保存位置移動史
        _positionHistory.Insert(0, transform.position);

        // 移動身體組件
        int index = 0;
        foreach (var body in _bodyParts)
        {
            Vector3 point = _positionHistory[Mathf.Clamp(index * Gap, 0, _positionHistory.Count - 1)];

            // 讓貪吃蛇的身體組件沿著頭部的移動軌跡運動
            Vector3 moveDirection = point - body.transform.position;
            body.transform.position += moveDirection * bodySpeed * Time.deltaTime;

            // 讓身體組件朝向頭部移動的方向 
            body.transform.LookAt(point);

            index++;
        }
    }
       
    // 蛇身延長
    private void addBodyPart()
    {
        GameObject body = Instantiate(bodyPrefab, new Vector3(0, transform.position.y, 0), Quaternion.identity);
        _bodyParts.Add(body);
    }

    // 后續(xù)添加的body打上Block標(biāo)簽
    private void addBodyPart_Block()
    {
        GameObject body = Instantiate(bodyPrefab, new Vector3(0, _bodyParts.Last().transform.position.y, 0), Quaternion.identity);
        body.tag = "Block";
        _bodyParts.Add(body);
    }


    //觸發(fā)檢測
    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Food")
        {   
            //必須先刪除,否則會導(dǎo)致多次觸發(fā)
            Destroy(other.gameObject);
            addBodyPart_Block();
            GameObject.Find("SpawnPoint").GetComponent<SpawnItem>().SpawnItems();
            audioController.PlaySfx(audioController.eat);
        }
        else if (other.tag == "Block")
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
        }
    }
}

食物旋轉(zhuǎn)

控制食物旋轉(zhuǎn)比較簡單,在update中加入Rotate即可。

Food.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Food : MonoBehaviour
{
    void Start()
    {

    }
    void Update()
    {
        //旋轉(zhuǎn)
        transform.Rotate(Vector3.up);
    }
}

食物隨機(jī)生成

食物隨機(jī)生成我并沒有采用隨機(jī)數(shù)的方式,三維場景容易出現(xiàn)問題。因此這里在場景中添加了6個食物生成的點位,當(dāng)食物被觸發(fā)之后,在隨機(jī)的一個點位上生成新的食物。

SpawnItem.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpawnItem : MonoBehaviour
{
    public Transform[] SpawnPoints;
    public float spawnTime = 2.5f;
    public GameObject Items;
    void Start()
    {

    }

    void Update()
    {
        
    }

    public void SpawnItems()
    {
        int spawnIndex = Random.Range(0, SpawnPoints.Length);
        Instantiate(Items, SpawnPoints[spawnIndex].position, SpawnPoints[spawnIndex].rotation);
    }
}

【Unity】3D貪吃蛇游戲制作/WebGL本地測試及項目部署,Unity,unity,3d,游戲

場景切換

這里對于游戲開始界面和結(jié)束界面分別用不同的場景進(jìn)行隔離,切換時只需一行代碼:

SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);

這里的Index為打包時場景的序號順序。

本地WebGL測試

使用WebGL打包之后,會得到3個文件夾和一個index.html文件,直接打開index.html會報錯,需要使用服務(wù)器方式去運行。

首先在win10上配置服務(wù)器相關(guān)組件,參考之前的博文【實用技巧】Win10搭建局域網(wǎng)FTP服務(wù)器。

之后在打包的文件夾下新建一個文件web.config,輸入以下內(nèi)容:

<?xml version="1.0" encoding="utf-8"?>
<!--
  有關(guān)如何配置 ASP.NET 應(yīng)用程序的詳細(xì)信息,請訪問
  https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>  
  <system.webServer>
    <httpProtocol>
      <!-- 允許跨域配置 -->
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="X-Requested-With,Content-Type,Authorization" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE,OPTIONS" />
        <add name="Access-Control-Allow-Credentials" value="true" />
      </customHeaders>
    </httpProtocol>
        <staticContent>
            <remove fileExtension=".mem" />  
            <remove fileExtension=".data" />  
            <remove fileExtension=".unity3d" />  
            <remove fileExtension=".jsbr" />  
            <remove fileExtension=".membr" />  
            <remove fileExtension=".databr" />  
            <remove fileExtension=".unity3dbr" />  
            <remove fileExtension=".jsgz" />  
            <remove fileExtension=".memgz" />  
            <remove fileExtension=".datagz" />  
            <remove fileExtension=".unity3dgz" />  
            <remove fileExtension=".json" />  
            <remove fileExtension=".unityweb" />  
           
            <mimeMap fileExtension=".mem" mimeType="application/octet-stream" />  
            <mimeMap fileExtension=".data" mimeType="application/octet-stream" />  
            <mimeMap fileExtension=".unity3d" mimeType="application/octet-stream" />  
            <mimeMap fileExtension=".jsbr" mimeType="application/octet-stream" />  
            <mimeMap fileExtension=".membr" mimeType="application/octet-stream" />  
            <mimeMap fileExtension=".databr" mimeType="application/octet-stream" />  
            <mimeMap fileExtension=".unity3dbr" mimeType="application/octet-stream" />  
            <mimeMap fileExtension=".jsgz" mimeType="application/x-javascript; charset=UTF-8" />  
            <mimeMap fileExtension=".memgz" mimeType="application/octet-stream" />  
            <mimeMap fileExtension=".datagz" mimeType="application/octet-stream" />  
            <mimeMap fileExtension=".unity3dgz" mimeType="application/octet-stream" />  
            <mimeMap fileExtension=".json" mimeType="application/json; charset=UTF-8" />  
            <mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />  
        </staticContent>
  </system.webServer>
</configuration>

之后在iis中,新建一個http服務(wù)器,選擇一個不被占用的端口,我這里選擇8080端口。
【Unity】3D貪吃蛇游戲制作/WebGL本地測試及項目部署,Unity,unity,3d,游戲

開啟網(wǎng)站后,在瀏覽器輸入http://localhost:8080/,即可訪問測試。
【Unity】3D貪吃蛇游戲制作/WebGL本地測試及項目部署,Unity,unity,3d,游戲

Github部署

Github部署非常容易,新建一個倉庫,將打包出的內(nèi)容直接上傳。

【Unity】3D貪吃蛇游戲制作/WebGL本地測試及項目部署,Unity,unity,3d,游戲
然后在Settings/Pages選擇main分支,點擊Save,過幾分鐘就會在上方出現(xiàn)訪問網(wǎng)址。
【Unity】3D貪吃蛇游戲制作/WebGL本地測試及項目部署,Unity,unity,3d,游戲

遺留問題:打包前后測試不一致

目前該項目在untiy運行測試時正常, 但打包出webgl或exe時,卻出現(xiàn)蛇身分離的情況,看了一些打包時的選項,仍未解決該問題,有了解這一問題的讀者歡迎在評論區(qū)交流。文章來源地址http://www.zghlxwxcb.cn/news/detail-725744.html

到了這里,關(guān)于【Unity】3D貪吃蛇游戲制作/WebGL本地測試及項目部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Unity WebGL項目打包后本地打開報錯問題解決方法

    Unity WebGL項目打包后本地打開報錯問題解決方法

    在Unity打包WebGL項目后,本地打開html頁面出現(xiàn)錯誤提示。 Failed to download file Build/Unity Web.data.gz. Loading web pages via a file:// URL without a web server is not supported by this browser. ? 在網(wǎng)上試了好幾種方法,綜合起來終于跑起來了。以下是解決步驟: 1. 打開Web服務(wù) ,打開控制面板--程序--啟

    2024年02月14日
    瀏覽(162)
  • 【簡單3d網(wǎng)絡(luò)游戲制作】——基于Unity

    【簡單3d網(wǎng)絡(luò)游戲制作】——基于Unity

    目錄 Demo展示 前期知識點準(zhǔn)備 1.delegate委托 2.通信協(xié)議 3.List容器 4.dictionary容器 5.MethodInfo類 進(jìn)入創(chuàng)作 c/s通用通信協(xié)議: 客戶端? 1.場景搭建 2.BaseHuman刨析(Sync+Ctrl) ????????Ctrl腳本 ????????Sync完整代碼? ????????BaseHuman完整代碼 3.NetManager刨析 4.Main刨析 ??????

    2024年02月05日
    瀏覽(21)
  • Unity 3D游戲開發(fā)+腳本編程完整指南:制作第一個游戲:3D滾球跑酷

    Unity 3D游戲開發(fā)+腳本編程完整指南:制作第一個游戲:3D滾球跑酷

    教程相關(guān)資源 Unity 3D游戲開發(fā)+腳本編程完整指南(工程文件+PPT).zip 本節(jié)利用前面的知識來實現(xiàn)第一個較為完整的小游戲,如 圖 1-21 所示。 圖1-21 3D滾球跑酷游戲完成效果 1. 功能點分析 游戲中的小球會以恒定速度向前移動,而玩家控制著小球 左右移動來躲避跑道中的黃色障

    2024年02月21日
    瀏覽(31)
  • Unity打包WebGL的全過程及在打包和使用過程中會遇到的問題(本地測試)

    Unity打包WebGL的全過程及在打包和使用過程中會遇到的問題(本地測試)

    目錄 概要 Unity打包WebGL PlayerSettings設(shè)置 Resolution and Presentation Other Settings ?Publishing Settings 本地服務(wù)器測試環(huán)境配置 問題盤點 ? ? ? ? 盤點Unity在Build WebGL環(huán)境包時需要的配置以及遇到的難題 Resolution and Presentation Resolution and Presentation 界面主要設(shè)置打包后的WebGL界面的分辨率顯

    2024年02月05日
    瀏覽(215)
  • 使用Unity3D制作2D游戲的重點做法

    官網(wǎng)上有提供一個 2D游戲的教學(xué)范例 ,這個游戲只不過把鏡頭擺放在橫向位置跟隨角色移動,游戲內(nèi)物件運動時固定一個軸不動,使他像橫軸式的2D游戲來玩,本質(zhì)上其實還是個3D游戲,所以如果沒有3D建模的話不就沒辦法做2D游戲了?其實這些并沒有定論,就看制作者如何運

    2024年02月11日
    瀏覽(88)
  • 【Unity3D賽車游戲】【二】如何制作一個真實模擬的汽車

    【Unity3D賽車游戲】【二】如何制作一個真實模擬的汽車

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 :Unity游戲demo – ??????版本: Unity2021 ??????適合人群:Unity初學(xué)者 ??????學(xué)習(xí)目標(biāo):3D賽車游戲的基礎(chǔ)制作 ??????技能掌握

    2024年02月11日
    瀏覽(25)
  • SuperMap Hi-Fi 3D SDK for Unity制作游戲引擎材質(zhì)

    SuperMap Hi-Fi 3D SDK for Unity制作游戲引擎材質(zhì)

    kele ????在交通,電力,規(guī)劃等行業(yè)中,有的對象常常具有很強(qiáng)的質(zhì)感,比如金屬質(zhì)感的 鋼軌,電力塔;陶瓷材質(zhì)的絕緣子;玻璃材質(zhì)的建筑幕墻等,但常規(guī)方式的表現(xiàn)效果 往往差強(qiáng)人意。 ????游戲引擎(Unity3D)中已有豐富的材質(zhì)資源庫,比如玻璃,金屬等材質(zhì),這

    2024年02月09日
    瀏覽(21)
  • Unity3D學(xué)習(xí)之UI系統(tǒng)——用NGUI制作游戲登陸界面

    Unity3D學(xué)習(xí)之UI系統(tǒng)——用NGUI制作游戲登陸界面

    會省略一些東西,可以看我的NGUI的博客 設(shè)置UI分辨率自適應(yīng) 設(shè)置Root 的層級 和攝像機(jī)渲染的層級為UI 主攝像機(jī)不渲染UI 一般都是美術(shù)給一個示意圖,然后按示意圖上拼面板 3.1.1 制作圖集 制作兩個新圖集 3.1.2 拖面板 檢查DrawCall 3.1.3 面板基類 創(chuàng)建面板基類, 首先設(shè)置成單例

    2024年02月19日
    瀏覽(29)
  • Unity3d C#利用本地網(wǎng)頁快速打開螢石云監(jiān)控視頻流(ezopen)實現(xiàn)云臺,聲音等控制,支持WebGL平臺,替代UMP播放(含源碼)

    Unity3d C#利用本地網(wǎng)頁快速打開螢石云監(jiān)控視頻流(ezopen)實現(xiàn)云臺,聲音等控制,支持WebGL平臺,替代UMP播放(含源碼)

    之前我介紹了替代Universal?Media?PlayerUMP播放石云監(jiān)控視頻流(ezopen)的功能,效果還是很明顯的,筆者的測試是差不多3-5秒就能打開監(jiān)控畫面,不過稍微遺憾的是,之前的功能是iframe打開石云提供的播放網(wǎng)頁的形式,功能基本只有畫質(zhì)切換,聲音開關(guān)等;具體可以移步查看(https

    2024年02月13日
    瀏覽(93)
  • 【用unity實現(xiàn)100個游戲之19】制作一個3D傳送門游戲,實現(xiàn)類似鬼打墻,迷宮,鏡子,任意門效果

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包