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

4.Unity2D 橫版 幀事件+攻擊判定+沖砍挑飛+更真實(shí)的打擊

這篇具有很好參考價(jià)值的文章主要介紹了4.Unity2D 橫版 幀事件+攻擊判定+沖砍挑飛+更真實(shí)的打擊。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

4.Unity2D 橫版 幀事件+攻擊判定+沖砍挑飛+更真實(shí)的打擊

總目錄

1.攻擊碰撞盒的創(chuàng)建

在玩家下面新建兩個(gè)空物體命名為攻擊一和攻擊二。然后為兩個(gè)物體分別添加碰撞盒,根據(jù)幀動(dòng)化來調(diào)整碰撞盒位置。并都打開觸發(fā)器

4.Unity2D 橫版 幀事件+攻擊判定+沖砍挑飛+更真實(shí)的打擊

為倆個(gè)攻擊盒添加觸發(fā)器事件

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

public class attackTrigger : MonoBehaviour
{
    private Transform player;//獲取人物
    private Animator ani;//獲取人物動(dòng)畫器
    private AnimatorStateInfo state;//動(dòng)畫狀態(tài)

    public float atkItemsBack = 1;
    public float atkItemsUp = 1;
    public float playerSpeedInfectBack = 1;
    // Start is called before the first frame update
    void Start()
    {
        player = gameObject.transform.parent;
        ani = player.GetComponent<Animator>();
   
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    public void OnTriggerEnter2D(Collider2D collision)
    {
        //攻擊到了物品或敵人產(chǎn)生擊退
        if (collision.tag == "items" || collision.tag == "enemy")
        {
            //獲取人物與物品位置向量
            Vector3 v = collision.transform.position-player.position ;
            //凍結(jié)z軸
            v.z = 0;
            //獲取橫軸,速度影響擊退距離
            float h = Input.GetAxis("Horizontal");
       
            //如果處于動(dòng)畫2,4時(shí)額外實(shí)施向上的力、速度
            //挑飛
            state = ani.GetCurrentAnimatorStateInfo(0);
            if (state.IsName("attack2") || state.IsName("attack4"))
            {
                v.y += (atkItemsBack * 5*atkItemsUp);
            }
            collision.GetComponent<Rigidbody2D>().velocity=v* atkItemsBack+Vector3.right*h* playerSpeedInfectBack*5;
    
        }


    }
}

?2.幀事件的創(chuàng)建

2.Unity2D 橫版 幀動(dòng)畫sprite animation+動(dòng)畫狀態(tài)機(jī)animator+絲滑連擊動(dòng)作_ζ?? ??霧 ??狼 ???的博客-CSDN博客Unity2D 橫版 幀動(dòng)畫sprite animation+動(dòng)畫狀態(tài)機(jī)animator+絲滑連擊動(dòng)作 為什么設(shè)置了attack之后還要設(shè)置normalizedTime參數(shù)?因?yàn)槿绻O(shè)置一個(gè)參數(shù)的話,你點(diǎn)擊攻擊按鈕會(huì)直接跳轉(zhuǎn)到下一個(gè)動(dòng)作。并不能完整的將攻擊動(dòng)作放完,那么就多添加一個(gè)。他們參數(shù)用來判斷行為達(dá)到哪個(gè)階段,并通過腳本來控制他們參數(shù)在進(jìn)入因?yàn)楹屯顺鲂袨闀r(shí)都設(shè)置normalizedTime成零。這樣就可以使得你點(diǎn)擊攻擊按鈕動(dòng)作放完了之后才到下一個(gè)動(dòng)作。.........https://blog.csdn.net/qq_54263076/article/details/125631721?spm=1001.2014.3001.5501

教學(xué)鏈接https://blog.csdn.net/qq_15020543/article/details/83443966?spm=1001.2014.3001.5506

4.Unity2D 橫版 幀事件+攻擊判定+沖砍挑飛+更真實(shí)的打擊

4.Unity2D 橫版 幀事件+攻擊判定+沖砍挑飛+更真實(shí)的打擊

注意:幀事件的腳本必須添加在有animator組件的物體下,通過幀事件調(diào)運(yùn)腳本里面的函數(shù)

在玩家player下加入新腳本 AttackBox

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

public class AttackBox : MonoBehaviour
{
    public float attackMovedis = 1;//攻擊移動(dòng)距離
    private Rigidbody2D rig;//獲取剛體
    private Animator ani;//獲取動(dòng)畫器
    private AnimatorStateInfo state;//動(dòng)畫狀態(tài)
    private Transform attack1;//子物體
    private Transform attack2;
    // Start is called before the first frame update
    void Start()
    {
        rig=gameObject.GetComponent<Rigidbody2D>();
        ani = gameObject.GetComponent<Animator>();
        attack1 = transform.Find("attack1");
        attack2 = transform.Find("attack2");
      
    }
    // Update is called once per frame
    void Update()
    {
        
    }
    //幀事件
    public void Attackenemy()
    {
        state = ani.GetCurrentAnimatorStateInfo(0);
        float dir = Input.GetAxisRaw("Horizontal");//按住方向-1 0 1
        float lookatdir = gameObject.transform.localScale.x;//朝向
        //攻擊移動(dòng)
        if(dir == 0) {
            if (state.IsName("attack1") || state.IsName("attack3"))
            {
                rig.velocity = new Vector3(attackMovedis * 5 * lookatdir / Mathf.Abs(lookatdir), 0, 0); //按住方向鍵大移動(dòng)-對(duì)于動(dòng)畫1,3沖刺動(dòng)畫
            }
            
        }
        else
        {
            rig.velocity = new Vector3(attackMovedis * 10 * dir, 0, 0);//不按方向鍵小移動(dòng)
        }

        //激活攻擊碰撞盒
        if (state.IsName("attack1") || state.IsName("attack3"))
        {
      
            attack1.gameObject.SetActive(true);
        }
        else if (state.IsName("attack2") || state.IsName("attack4"))
        {
            attack2.gameObject.SetActive(true);
        }
        Invoke("endAttackenemy", 0.05f);//延時(shí)調(diào)運(yùn),關(guān)閉碰撞盒
    }
    //結(jié)束攻擊 因我第2節(jié)課設(shè)置了連擊動(dòng)畫95%到下一動(dòng)畫,所以結(jié)束事件應(yīng)該在最后一幀前面
    public  void endAttackenemy()
    {
        state = ani.GetCurrentAnimatorStateInfo(0);

        //關(guān)閉攻擊碰撞盒
        if (state.IsName("attack1") || state.IsName("attack3"))
        {
            attack1.gameObject.SetActive(false);
        }
        else if (state.IsName("attack2") || state.IsName("attack4"))
        {
            attack2.gameObject.SetActive(false);
        }

    }
}

在這兩個(gè)幀事件中,我在關(guān)鍵攻擊幀中觸發(fā)了攻擊攻擊,在攻擊事件中我又增加了角色攻擊時(shí)微小向前移動(dòng)和沖刺攻擊。然后在?Invoke("endAttackenemy", 0.05f);時(shí)間要足夠小,不然在endAttackenemy函數(shù)中判斷狀態(tài)時(shí)會(huì)略過這個(gè)狀態(tài),延時(shí)調(diào)運(yùn),關(guān)閉碰撞盒

4.Unity2D 橫版 幀事件+攻擊判定+沖砍挑飛+更真實(shí)的打擊.

3.測(cè)試 ,新建一個(gè)標(biāo)簽為items的物體desk。

為這個(gè)物體添加剛體,碰撞盒,標(biāo)簽設(shè)置為items(新建)

主角主動(dòng)攻擊思路如下圖

4.Unity2D 橫版 幀事件+攻擊判定+沖砍挑飛+更真實(shí)的打擊

?

下一篇

5.Unity2D 橫版 對(duì)象池的創(chuàng)建_ζ?? ??霧 ??狼 ???的博客-CSDN博客Unity2D 橫版 對(duì)象池的創(chuàng)建。對(duì)象池的好處是不用頻繁的毀壞和創(chuàng)建重復(fù)預(yù)制體,而是通過激活與非激活來對(duì)重復(fù)預(yù)制體進(jìn)行管理。增加了游戲的流暢性。https://blog.csdn.net/qq_54263076/article/details/125667394文章來源地址http://www.zghlxwxcb.cn/news/detail-404105.html

到了這里,關(guān)于4.Unity2D 橫版 幀事件+攻擊判定+沖砍挑飛+更真實(shí)的打擊的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 10.Unity2D 橫版 簡(jiǎn)單AI 之 敵人隨機(jī)移動(dòng)+自動(dòng)巡邏+障礙物跳躍+懸崖處轉(zhuǎn)身+射線檢測(cè)

    10.Unity2D 橫版 簡(jiǎn)單AI 之 敵人隨機(jī)移動(dòng)+自動(dòng)巡邏+障礙物跳躍+懸崖處轉(zhuǎn)身+射線檢測(cè)

    總目錄 9.Unity2D 簡(jiǎn)單AI 之 敵人跳躍條件優(yōu)化+自動(dòng)范圍內(nèi)檢測(cè)敵人發(fā)起攻擊(索敵)+對(duì)象池優(yōu)化+主角受傷死亡_ζ?? ??霧 ??狼 ???的博客-CSDN博客 Unity2D 簡(jiǎn)單AI 之 敵人跳躍條件優(yōu)化+自動(dòng)范圍內(nèi)檢測(cè)敵人攻擊+敵人二連擊。在敵人預(yù)制體下,創(chuàng)建空物體EnemyCanAttack,改成不

    2023年04月20日
    瀏覽(61)
  • Unity2D學(xué)習(xí)筆記-Tilemap

    Unity2D學(xué)習(xí)筆記-Tilemap

    tilemap算是接觸了幾次,但是無論是看視頻還是看文章都一知半解,這次把編輯地圖的開始步驟搞清楚。 首先要知道tilemap是做什么的。 這里提到的Tilemap其實(shí)不止是Tilemap:Tilemap本身是地圖編輯器(雖然我更傾向于理解為“場(chǎng)景”,不過編輯地圖才是核心)。之前學(xué)的印象是,

    2023年04月09日
    瀏覽(26)
  • 【Unity2D】角色動(dòng)畫的切換

    【Unity2D】角色動(dòng)畫的切換

    第一種方法是設(shè)置一個(gè)中間狀態(tài),從中間狀態(tài)向其余各種狀態(tài)切換,且各狀態(tài)向其他狀態(tài)需要設(shè)置參數(shù) 實(shí)現(xiàn)動(dòng)作轉(zhuǎn)移時(shí)右鍵點(diǎn)擊Make Transition即可? 實(shí)現(xiàn)動(dòng)畫轉(zhuǎn)移需要設(shè)置條件 點(diǎn)擊一種動(dòng)畫到另一種動(dòng)畫的線 ,然后點(diǎn)擊加號(hào)添加Condition 比如機(jī)器人從向左走切換到向右走的條件

    2024年02月15日
    瀏覽(20)
  • Unity2D實(shí)現(xiàn)子彈追蹤目標(biāo)

    Unity2D實(shí)現(xiàn)子彈追蹤目標(biāo)

    實(shí)現(xiàn)子彈追蹤目標(biāo)有很多種方法,首先是一開始就選定了目標(biāo)的位置,然后按照曲線運(yùn)動(dòng)軌跡的方式,持續(xù)運(yùn)動(dòng)到目標(biāo)點(diǎn),不過如果目標(biāo)移動(dòng)了,就得將對(duì)應(yīng)的軌跡重新計(jì)算一次,另外如果需要設(shè)置范圍的話更不好做。另一種是銳角追蹤,就是在目標(biāo)進(jìn)入識(shí)別范圍后,將子彈

    2024年02月06日
    瀏覽(28)
  • Unity2d游戲項(xiàng)目--小狐貍

    Unity2d游戲項(xiàng)目--小狐貍

    (一) 在文件夾中找到back圖片,并在檢查器面板中將back圖片的每單位像素?cái)?shù)設(shè)置為16。 (文件所在地) (面板設(shè)置) (二) 將圖片拖入到場(chǎng)景中 (一) 生成矩形的瓦片地圖 (二) 打開平鋪調(diào)色板 (三) 新建并命名為map,在原目錄新建一個(gè)文件夾,用于存放你在這個(gè)瓦

    2024年02月03日
    瀏覽(31)
  • Unity2D控制角色左右移動(dòng)

    Unity2D控制角色左右移動(dòng)

    1.在Hierarchy一欄中選中角色; 2.在inspector欄最底端找到Add Component選項(xiàng)并點(diǎn)擊; 3.添加Rigidbody2D,合適的collider和new script; 4.將添加的Rigidbody2D拖到new script中; ? 5.在project欄中找到新添加的C#文件并雙擊打開(如果還沒有編輯代碼的工具,推薦Vscode) 6.代碼如下: using System.Nu

    2024年02月14日
    瀏覽(30)
  • Unity2D繪制游戲地圖

    Unity2D繪制游戲地圖

    首先,我們選擇我們的地圖素材(由于筆者在前段時(shí)間已經(jīng)進(jìn)行切割,最近才開始整理這一段,所以這個(gè)是用的老素材,可能有朋友就會(huì)覺得切割前后不一致,但是思路是一樣的,大家學(xué)習(xí)思路即可) ?接著,我們找到右上角的Slice進(jìn)行圖片切割,我這邊簡(jiǎn)單介紹一下這個(gè)切

    2024年02月08日
    瀏覽(30)
  • Unity2D小狐貍教程筆記

    Unity2D小狐貍教程筆記

    下載 https://unity.cn/releases 默認(rèn)顯示方式 window - layout - default SampleScene : Project - 文件目錄 Scene -游戲畫面 asset store - 素材商店 在asset store下載素材 sunnyland shift + sapace 放大窗口 1.背景導(dǎo)入 每個(gè)格子16像素: Pixels Per Unit 16px 2.繪制瓷磚式地圖 新建瓦片圖層:左上角/右鍵 2D object

    2024年01月24日
    瀏覽(32)
  • Unity2D-使人物翻轉(zhuǎn)的方法

    方法①:使用組件: SpriteRenderer 使用 GetAxis() 和 GetAxisRaw() 沒有區(qū)別 方法②:使用組件: Transform 情況1:使用 GetAxisRaw() ;沒有剎車效果,及翻轉(zhuǎn)過程沒有過渡, m o v e F a c t o r moveFactor m o v e F a c t or 取-1,1,0 情況1:使用 GetAxis() ;有剎車效果,及翻轉(zhuǎn)過程有過渡, m o v e F a c t

    2024年02月12日
    瀏覽(23)
  • Unity2D子彈朝向鼠標(biāo)位置發(fā)射

    Unity2D子彈朝向鼠標(biāo)位置發(fā)射

    廢話不多說,先說明一下我使用的變量 float attack_time 用于表示每次攻擊的間隙時(shí)間 float current_time 攻擊時(shí)間的冷卻 Rigidbody2D body 2D剛體組件 Object bomb 需要發(fā)射的物體對(duì)象 創(chuàng)建一枚子彈,unity的Instantiate()函數(shù)就可以實(shí)現(xiàn),這里需要的三個(gè)參數(shù)是物體對(duì)象(Object),生成位置(Vecto

    2024年02月10日
    瀏覽(48)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包