總目錄
1.攻擊碰撞盒的創(chuàng)建
在玩家下面新建兩個(gè)空物體命名為攻擊一和攻擊二。然后為兩個(gè)物體分別添加碰撞盒,根據(jù)幀動(dòng)化來調(diào)整碰撞盒位置。并都打開觸發(fā)器
為倆個(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
注意:幀事件的腳本必須添加在有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)閉碰撞盒
.
3.測(cè)試 ,新建一個(gè)標(biāo)簽為items的物體desk。
為這個(gè)物體添加剛體,碰撞盒,標(biāo)簽設(shè)置為items(新建)
主角主動(dòng)攻擊思路如下圖
?
下一篇文章來源:http://www.zghlxwxcb.cn/news/detail-404105.html
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)!