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

【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】

這篇具有很好參考價值的文章主要介紹了【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機


?????個人主頁:@元宇宙-秩沅

????? hallo 歡迎 點贊?? 收藏? 留言?? 加關(guān)注?!

????? 本文由 秩沅 原創(chuàng)

????? 收錄于專欄unityUI專題篇
【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機


?抽象父類繼承實現(xiàn)?

【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機



??前言

【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機


???


??(A)常用關(guān)鍵API


【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機
【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機


??(B)需求分析


【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機


??(C)行為實現(xiàn)——小地圖和相機跟隨


【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機


  • Target Texture 行為渲染

——————————————【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機
___________________________【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________項目:     
//___________功能:     地圖相機跟隨
//___________創(chuàng)建者:_______秩沅_______
//_____________________________________
//-------------------------------------
public class cameraFollow : MonoBehaviour
{
    public Transform  Tank;
    private Vector3 offset;
    public float heiht;
    private float OffX;
    private float offZ;

    private void Start()
    {
        heiht = transform.position.y; 
    
    }
    private void LateUpdate()    //注意點1:相機相關(guān)邏輯存放點
    {
        if (Tank == null) return; //注意點2:為空判斷

        //只有相機的Z軸和X軸跟著Tank變化,y則是距離地面的高度
        offset.x  = Tank.position.x;
        offset.z  = Tank.position.z;
        offset.y = heiht;
        gameObject.transform.position = offset;

       
    }
}


??(D)行為實現(xiàn)——撿起武器發(fā)射炮彈


【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機
【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機

【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機

?????? 步驟


1.靠近武器,碰撞檢測
2.將武器位置于坦克發(fā)射位置重合
3.武器中封裝了發(fā)射方法
4.發(fā)射方法中封裝了炮彈實例化并且發(fā)射的邏輯

坦克基類的封裝

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________項目:       
//___________功能: 坦克基類——集中子類相同點
//___________創(chuàng)建者:______秩沅______
//___________________________________
//-------------------------------------
public abstract  class TankFather : MonoBehaviour
{
    //攻擊和防御相關(guān)
    public int attack;
    public int defence; 
    public int nowBlood;
    public int maxBlood;
    //移動和轉(zhuǎn)速相關(guān)
    public int moveSpeed;
    public int RotateSpeed;
    public int HeadSpeed;
    public Transform  Head;
    //擊敗特效
    public GameObject diedEffect;
  

    //受傷行為
    public virtual  void Heart(TankFather other)
    {
        //當(dāng)攻擊力大于防御力時才生效
        if (other.attack - defence > 0)
        {
            nowBlood -= (other.attack - defence);
        }
        if(nowBlood <= 0 )
        {
            nowBlood = 0;
            Death();
        }
       //更新血條
        GamePlane.SingleInstance.UpdataBlood(maxBlood ,nowBlood );
    }

    //死亡行為
    public virtual  void Death()
    {
        Destroy(this);
        //將特效實例化相關(guān)邏輯
        GameObject effect = Instantiate(diedEffect, this.transform.position ,this.transform.rotation);
        AudioSource soudClip = GetComponent<AudioSource>();
        soudClip.enabled  = MusicContol.SingleMusicContol.nowMusicData.soundSwitch;
        soudClip.volume = MusicContol.SingleMusicContol.nowMusicData.soundRoll ;
        soudClip.mute = false;
        soudClip.playOnAwake = true;
    }

    //開火行為
    public abstract void Fire();  //子類中每一個的開火方式都不同,作為抽象方法
    
   
}


主坦克的運動邏輯的封裝

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________項目:       
//___________功能:  坦克的移動和旋轉(zhuǎn)
//___________創(chuàng)建者:_______秩沅_______
//_____________________________________
//-------------------------------------
public class TankSport : TankFather
{
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________項目:       
//___________功能:  坦克的移動和旋轉(zhuǎn)
//___________創(chuàng)建者:_______秩沅_______
//_____________________________________
//-------------------------------------
public class MainTank : TankFather
{
    //主坦克專有特征
    public  Weapon nowWeapon;
    private Vector3 zero = new Vector3(0,0,0);
  

    //特征屬性初始化
    private void Awake()
    {
        Head = transform.GetChild(1).GetChild(0);
        maxBlood = 100;
        nowBlood = 100;
        attack = 30;
        defence = 10;
        moveSpeed = 5;
        RotateSpeed = 50;
        HeadSpeed = 500;
    }

    private void Update()
    {
        //坦克的移動 = 大小*方向
        transform.Translate(Input.GetAxis("Vertical") *Vector3.forward*moveSpeed *Time.deltaTime );
        //坦克的旋轉(zhuǎn) = 大小*軸向
        transform.Rotate(Input.GetAxis("Horizontal") *Vector3.up *RotateSpeed *Time .deltaTime );
        //頭部炮管的旋轉(zhuǎn) = 大小*軸向
        Head.Rotate(Input.GetAxis ("Mouse X") *Vector3.up*HeadSpeed*Time .deltaTime );
        //左鍵發(fā)射炮彈
        if(Input.GetMouseButtonDown(0))
        {
            Fire();

        }
    }

   

    //撿武器行為
    public void ChangeWeapon(GameObject weapon)
    {
        
        nowWeapon = weapon.GetComponent<Weapon>();
        //依附成為子對象______待優(yōu)化
        weapon.gameObject.transform.position = Head.GetChild(0).transform.position ;
        weapon.gameObject.transform.rotation = Head.GetChild(0).transform.rotation;
        weapon.gameObject.transform.SetParent(Head.GetChild(0));
        attack += nowWeapon.attack;
     
    }

    //開火行為重寫
    public override void Fire() 
    {
        nowWeapon.Shoot(); 
    }

   
  
}


武器類的封裝

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________項目:       ______________
//___________功能:  武器的邏輯相關(guān)控制
//___________創(chuàng)建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Weapon :MonoBehaviour 
{
    public GameObject Tank;             //掛載的坦克對象
    public GameObject bullet;           //子彈對象
    public Transform []  bulletNum;     //子彈數(shù)量及位置
    public int attack;                  //攻擊力    
    public float bulletSpeed = 1000f;   //速度
    private  AudioSource shootSound;    //發(fā)射音效

    private void Start()
    {
        //加載發(fā)射音效
        
        shootSound = GetComponent<AudioSource>();
        
        //同步設(shè)置中音效大小

        shootSound.enabled = MusicContol.SingleMusicContol.nowMusicData.soundSwitch;
        shootSound.volume = MusicContol.SingleMusicContol.nowMusicData.soundRoll;
        shootSound.enabled = false;

        //加載子彈發(fā)射數(shù)量
        bulletNum = new Transform[transform.GetChild(0).childCount];

        for (int i = 0; i < transform.GetChild (0) .childCount ; i++)
        {
            bulletNum[i] = transform.GetChild(0).GetChild(i);
        }
    }

    //銷毀行為
    public void Vanish()
    {
        Destroy(this.gameObject );
    }

    //射擊行為
    public virtual void Shoot()
    {
        shootSound.enabled = true;
        shootSound.Play();

        //實例化炮彈,并進行發(fā)射
        for (int i = 0; i < bulletNum.Length ; i++)
        {
            GameObject ball = Instantiate(bullet, bulletNum[i].position, bulletNum[i].rotation );
            BulletMove movScript = ball.GetComponent<BulletMove>();          
            Rigidbody shootBall = ball.GetComponent<Rigidbody>();

            shootBall.AddForce(transform.forward * bulletSpeed);

            movScript.Tank = Tank;  //聲明子彈是由誰打出去的
        }     
    }

    //如果碰到標簽是主坦克玩家 并且 武器沒有主人
    private void OnCollisionEnter(Collision collision)
    {
        
        if (Tank == null && collision.transform.name  == "Player")
        {
            Tank = collision.gameObject;
            MainTank player = collision.gameObject.GetComponent<MainTank>();           
            player.ChangeWeapon(this.gameObject);           
            print("玩家");
        }
    }

}



??(E)行為實現(xiàn)——炮彈的銷毀和特效


【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機

——————————【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】,# UnityGUI篇,# unity簡單游戲demo制作,unity,游戲,數(shù)碼相機

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________項目:       ______________
//___________功能:  子彈的邏輯相關(guān)
//___________創(chuàng)建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class BulletMove : MonoBehaviour
{
    public  GameObject Tank;          //掛載在哪個坦克上
    public  GameObject DeidEffect;
    public  AudioSource distorySound; //銷毀的音效
    private float endTime = 15f; //銷毀倒計時

    private void Start()
    {
       
    }
    //子彈的銷毀及特效
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Environment"))
        {
            if (DeidEffect != null)
            {
                GameObject eff =  Instantiate(DeidEffect, transform.position, transform.rotation);
                //音效控制
                distorySound = eff.GetComponent<AudioSource>();
                distorySound.enabled = MusicContol.SingleMusicContol.nowMusicData.soundSwitch;
                distorySound.volume = MusicContol.SingleMusicContol.nowMusicData.soundRoll;
                eff.AddComponent<SelfDestroy>();
            }
            Destroy(this.gameObject);          
        }    
    }
    
    private void Update()
    {
        //當(dāng)未碰撞時自動銷毀
        endTimeDistory(gameObject);
        
    }

    //倒計時銷毀
    public void endTimeDistory( GameObject instans)
    {
        endTime = Mathf.MoveTowards(endTime, 0, 0.1f);
        if (endTime <= 0) Destroy(instans);
    }
}


總結(jié):

問題: 為什么炮彈生成了卻無法射出 ; 原因: FreezePosition被鎖定了

問題:往前走時,發(fā)射方向和炮口方向相反

?相關(guān)文章?


?【2023unity游戲制作-mango的冒險】-6.關(guān)卡設(shè)計

?【2023unity游戲制作-mango的冒險】-5.攻擊系統(tǒng)的簡單實現(xiàn)

?【2023unity游戲制作-mango的冒險】-4.場景二的鏡頭和法球特效跟隨

?【2023unity游戲制作-mango的冒險】-3.基礎(chǔ)動作和動畫API實現(xiàn)

?【2023unity游戲制作-mango的冒險】-2.始畫面API制作

?【2023unity游戲制作-mango的冒險】-1.場景搭建

?“狂飆”游戲制作—游戲分類圖鑒(網(wǎng)易游學(xué))

?本站最全-unity常用API大全(萬字詳解),不信你不收藏



你們的點贊?? 收藏? 留言?? 關(guān)注?是我持續(xù)創(chuàng)作,輸出優(yōu)質(zhì)內(nèi)容的最大動力!文章來源地址http://www.zghlxwxcb.cn/news/detail-585907.html

到了這里,關(guān)于【unity之IMGUI實踐】游戲玩法邏輯實現(xiàn)【四】的文章就介紹完了。如果您還想了解更多內(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īng)查實,立即刪除!

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

相關(guān)文章

  • 【2023unity游戲制作-mango的冒險】-7.玩法實現(xiàn)

    【2023unity游戲制作-mango的冒險】-7.玩法實現(xiàn)

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity常用API ??? 讓CSDN的浪漫彌漫女神節(jié) ?? ?【2023unity游戲制作-mango的冒險】-4.場景二的鏡頭和法球特效跟隨 ?【2023unity游戲制作-

    2024年02月10日
    瀏覽(20)
  • 【unity之IMGUI實踐】單例模式管理數(shù)據(jù)存儲【二】

    【unity之IMGUI實踐】單例模式管理數(shù)據(jù)存儲【二】

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unityUI專題篇 ??? ??????:步驟實現(xiàn) 1.首先將音樂數(shù)據(jù)封裝在類中,不采用單例模式 2. 而后封裝一個游戲數(shù)據(jù)類為單例模式:功能

    2024年02月16日
    瀏覽(26)
  • 【unity之IMGUI實踐】單例模式管理面板對象【一】

    【unity之IMGUI實踐】單例模式管理面板對象【一】

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unityUI專題篇 ??? API:簡單的旋轉(zhuǎn) 解析: 1.采用單例模式,原因: 單例模式無法被纂改基類,適合當(dāng)管理者 2.基類提取了子類所有的共

    2024年02月15日
    瀏覽(28)
  • Unity開發(fā)日記-進入游戲按鈕和退出游戲按鈕的邏輯實現(xiàn)

    Unity開發(fā)日記-進入游戲按鈕和退出游戲按鈕的邏輯實現(xiàn)

    本篇文章只是總結(jié)一下UGUI中進入游戲和退出游戲的邏輯代碼的兩種實現(xiàn)方式,方便以后查閱,以后如果有其他的方法也會隨時更新(Unity版本為2021) 首先是在UI的Image(背景圖)上掛載腳本 代碼如下 兩種方法各有各的好。方法一代碼量少但項目大的時候管理比較麻煩;方法

    2024年02月11日
    瀏覽(84)
  • 【Unity3D游戲魔坦之爭】敵方邏輯封裝實現(xiàn)【六】

    【Unity3D游戲魔坦之爭】敵方邏輯封裝實現(xiàn)【六】

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unityUI專題篇 ??? ??????:步驟實現(xiàn) 1.炮臺的行為邏輯封裝:旋轉(zhuǎn),觸發(fā)檢測,發(fā)射炮彈及特效 2.檢測玩家后自動瞄準攻擊 3.玩家扣

    2024年02月11日
    瀏覽(28)
  • Unity中敵人簡單邏輯的實現(xiàn)(來回走動,攻擊)2D

    Unity中敵人簡單邏輯的實現(xiàn)(來回走動,攻擊)2D

    unity自帶一套自動巡航系統(tǒng),但是目前應(yīng)該先了解最基本的使用代碼控制敵人實現(xiàn)邏輯(1來回走動,2發(fā)現(xiàn)玩家時追著玩家,3進入敵人攻擊范圍時進行攻擊),一般來說這是最基本的敵人的功能 分析完敵人所具備的能力后,就將敵人的能力進行拆解,分別進行實現(xiàn) 一 來回走

    2024年02月12日
    瀏覽(111)
  • Unity3D 如何把全部游戲邏輯都放到lua層實現(xiàn)詳解

    Unity3D是一款非常流行的游戲開發(fā)引擎,它支持C#、JavaScript和Boo等腳本語言。然而,有時候我們可能希望將全部游戲邏輯都放到Lua層實現(xiàn),這樣可以更方便地進行游戲邏輯的修改和調(diào)試。本文將詳細介紹如何使用Unity3D將全部游戲邏輯都放到Lua層實現(xiàn)。 對啦!這里有個游戲開發(fā)

    2024年01月16日
    瀏覽(26)
  • unity 簡單實現(xiàn)三階魔方游戲

    unity 簡單實現(xiàn)三階魔方游戲

    魔方體驗地址 工程文件免費下載 實現(xiàn)思路 一、魔方的旋轉(zhuǎn) 三階魔方由26個方塊與 9個旋轉(zhuǎn)軸組成。旋轉(zhuǎn)軸旋轉(zhuǎn)時帶動在其控制范圍的方塊旋轉(zhuǎn)。 旋轉(zhuǎn)軸如何帶動方塊旋轉(zhuǎn)? 把旋轉(zhuǎn)軸控制范圍內(nèi)的方塊設(shè)置成旋轉(zhuǎn)軸的子物體,旋轉(zhuǎn)軸旋轉(zhuǎn)時便會帶動子物體旋轉(zhuǎn)。 如何得到旋

    2024年02月12日
    瀏覽(19)
  • Unity 簡單跑酷游戲策劃與實現(xiàn)

    Unity 簡單跑酷游戲策劃與實現(xiàn)

    游戲名稱:無盡探險跑酷(Endless Adventure Runner) 游戲類型:無盡跑酷 游戲背景 在一個充滿未知和奇跡的世界中,玩家將扮演一名勇敢的探險家,穿越各種神秘的地域,躲避重重障礙,收集寶藏,并挑戰(zhàn)自己的極限。 核心玩法 跑酷冒險 :玩家控制角色在無盡的道路上不斷前

    2024年02月03日
    瀏覽(30)
  • 【Unity實戰(zhàn)】實現(xiàn)一款簡單的FPS游戲

    實現(xiàn)一款FPS游戲需要以下步驟: 1.創(chuàng)建場景:在Unity中創(chuàng)建3D場景,設(shè)定地形、燈光、天氣等環(huán)境,新增角色、武器等道具。 2.角色控制:創(chuàng)建角色,并添加Unity內(nèi)置的角色控制器或自定義控制器腳本,處理角色的移動、射擊、跳躍、動作等。 3.武器系統(tǒng):創(chuàng)建武器模型,添加

    2024年02月06日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包