日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity—英雄无敌(前方高能)

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity—英雄无敌(前方高能) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

英雄無敵(VR Project)【前方高能】:敵人模塊、武器模塊、HTC VIVE、玩家模塊

可以學習考參一下本文章的思想、思路甚至是細節呦!*需求分析是重點

目錄

敵人模塊:

·敵人沿指定路線運動

·受擊后減血死亡

·運動播放跑步動畫,攻擊播放攻擊動畫,攻擊間隔播放閑置動畫,死亡播放死亡動畫

·到達終點,攻擊玩家

敵人生成器模塊

策劃

需求分析:

代碼實現:


敵人模塊:

·敵人沿指定路線運動

需求分析:創建腳本—敵人馬達EnemyMotor,提供移動、旋轉,尋路功能

代碼實現:

public class EnemyMotor:MonoBehaviour

{

public void MovementForward()//向前移動

public void LookRotation(Vector3 point)//point:注視的目標點

{//提示:當前物體注視目標點旋轉}

public bool Pathfinding()

{ return true;//需要繼續尋路

? Return false;//到達終點,無需尋路

//如果到達目標點(判斷當前位置與目標點間距 Vector3.Distance)

//更新目標點(向下一路口移動)

//朝向目標點

//向前移動

}

}

using?System.Collections;using?System.Collections.Generic;using?UnityEngine;///?<summary>///?敵人馬達,提供移動、旋轉、尋路功能///?</summary>public?class?EnemyMotor?: MonoBehaviour{public?Transform[] points;//當有路線腳本時:public WayLine line;//當前路點索引private?int?currentPointIndex;private?float?moveSpeed = 2;public?void?MovementForward(){this.transform.Translate(0, 0, moveSpeed * Time.deltaTime);}public?void?LookRotation(Vector3 targetPoint){//提示:當前物體注視目標點旋轉this.transform.LookAt(targetPoint);}public?bool?Pathfinding(){if?(points == null?|| currentPointIndex >= points.Length) return?false;//沒有下一個點了//if?(line== null?|| currentPointIndex >= line.WayPoints.Length) return?false;(有了路線腳本后,改變的位置//把坐標換成路線)//朝向目標點LookRotation(points[currentPointIndex].position);//LookRotation(line.WayPoints[currentPointIndex]);//向前移動MovementForward();//如果到達目標(當前位置接近于目標點)if?(Vector3.Distance(this.transform.position, points[currentPointIndex].position) <0.5f)//if(Vector3.Distance(this.transform.position,line.WayPoints[currentPointIndex]< 0.5f)currentPointIndex++;return?true;//可以繼續尋路}//private void Update()//{// ???Pathfinding();//}}

?

·受擊后減血死亡

需求分析:創建腳本—敵人狀態信息EnemystatusInfo,定義血量,提供受傷,死亡的功能

代碼實現:

public class EnemystatusInfo:MonoBehaviour

{

public?EnemySpawn spawn;//敵人生成器的引用

public float HP=0;//當前血量

public float maxHP=200;//血量最大值

public float deathDelay=3;//死亡延遲銷毀時間

//受傷

public void Damage(float amount)//amount需要扣除的血量

{ //扣血

HP-=amount;

//血量為0時,調用死亡方法

if(HP<=0)

Death();

}

public void Death()

{ Debug.Log(“陣亡”);

//播放當前畫面

var anim=GetComponent<EnemyAnimation>();

animaction.Play(anim.deathAnimName);

//銷毀當前物體

Destroy(this.gameObject,deathDelay);

//設置路線狀態

GetComponent<EnemyMotor>().line.IsUsable=true;

//產生一下個敵人

Spawn.GenerateEnemy();

}

}

·運動播放跑步動畫,攻擊播放攻擊動畫,攻擊間隔播放閑置動畫,死亡播放死亡動畫

需求分析:創建腳本—敵人動畫EnemyAnimation,定義各種動畫名稱,提供動畫播放的功能

public class EnemyAnimation:MonoBehaviour

{ //敵人動畫,定義需要播放的動畫片段名稱

public string anim.idleAnimName;//攻擊后的閑置動畫

public string runAnimName;

public string attckAnimName;

public string deathAnimName

public AnimationAction action;//AnimationAction行為類

public void Awake()

{ action=new Animation GetComponentInChildren<Animation>();

}

}

//動畫行為類,提供有關動畫的行為

public class AnimationAction

{ //附加在敵人模型上的動畫組件引用

private Animation anim;

public AnimationAction(Animation anim)

{this.anim=anim;}//得到物體的引用

//播放動畫

public void Play(string animName)

{anim.CrossFade(animName);}

//判斷指定動畫是否正在播放

public bool IsPlaying(string animName)//animName動畫片段名稱

{return anim.IsPlaying(animName);}

}

·到達終點,攻擊玩家

需求分析:創建腳本—敵人AI EnemyAI,通過判斷狀態,執行尋路或者攻擊

代碼實現:

敵人AI

[RequireComponent(typeof(EnemyAniamtion))]

[RequireComponent(typeof(EnemyMotor))]

[RequireComponent(typeof(EnemyStatusInfo))]

//把EnemyAI拖給腳本,上邊三個腳本也直接帶著

public class EnemyAI:MonoBehaviour

{

//定義敵人狀態的枚舉類型

public enmu State

{ Attack, //攻擊狀態

PathFinding //尋路狀態

}private State currentState=State.PathFinding;

private EnrmyMotor motor;

private EnemyAnimation anim;

private float atkTimer;

public float atkInterval=3;//攻擊間隔

public void Start()

{ anim=GetComponent<EnemyAnimation>();

motor=GetComponent<EnemyMotor>();//找馬達

}

public void Update()

{ //判斷

Switch(currentState)

case State.PathFinding;

//執行尋路,調用馬達中尋路方法,播放跑步動畫

anim.action.Play(anim.runAnimName);

if(motor.Pathfinding()=false)//執行尋路結束,把切換狀態

currentState=State.Attack;

break;

case State.Attack;

Attack();

break;

}

private void Attack()

{ ?//如果攻擊動畫沒有播放

if(anim.action.IsPlaying(anim.attackAnimName)==false)

anim.action.Play(anim.idleAnimName)//播放閑置動畫

//發起攻擊

if(atkTimer<=Time.time)

{ anim.action.Play(anim.attackAnimName);

atkTimer=Time.time+atkInterval;//下一幀再調用就不滿足條件

}

}(//ctrl+R+m可以提個方法)

}

AI怎樣調用的動畫:先找到引用EnemyAnimation,調用action,通過action調用AnimationAction里的實例方法

敵人生成器模塊

策劃

·開始時生成指定數量的敵人

·為每人隨機選擇一條可以使用的路線

要求:敵人類型,產生的延遲時間隨機

·當敵人死亡后,再產生下一個敵人,直到生成數量達到上限為止

需求分析:

·創建跟路線,并添加多條配有路點的路線

·創建腳本—敵人生成器EnemySpawn,附加到跟路線中,提供生成敵人的功能

·創建類—路線WayLine,包含屬性:路點坐標Vector3[] Points,是否可用bool IsUseable

當生成器啟用后,計算所有子物體[路線]的路點坐標

當生成敵人時,隨機選擇一條可以使用的路線

代碼實現:

//路線類

public class WayLine

{ public Vector3[] WayPoints{get;set;}

public bool IsUseable{get;set;}

//成員變量聲明完,WayPoints默認是null,IsUseable默認是false

}

using?System.Collections;using?System.Collections.Generic;using?UnityEngine;public?class?WayLine{public?Vector3[] WayPoints { get; set; }//聲明完之后裝的是null,因此要newpublic?bool?IsUseable { get; set; }public?WayLine(int?wayPointCount){WayPoints = new?Vector3[wayPointCount];IsUseable = true;}}

//敵人生成器(腳本給路線點)

//腳本在路點,怎么找敵人?

public GameObject[] enemyType;//創建的敵人預制件數組

public int maxCount=5;//創建敵人最大數目

public int StartCount=2;

private int enemyCount;//已經創建的敵人數量

//生成一個敵人

public void GenerateEnemy()

{ //選擇一條可以使用的路線?

//延遲時間隨機

//Object.Instantiate(敵人預制件,位置,旋轉角度)=Random.Range(0,enemyType.Length);

//創建敵人

GameObject go=Instantiate(enemyType[randomIndex],路線的第一個路點,Quaternion.identity)as GameObject;

//配置信息

go.GetComponent<EnemyMotor>();

}

using?System.Collections;using?System.Collections.Generic;using?UnityEngine;public?class?EnemySpawn?: MonoBehaviour{public?GameObject[] enemyType;//創建敵人的預制件public?int?maxCount = 5;public?int?StartCount = 2;//開始同時創建敵人的數量private?int?spawnedCount;//已經創建敵人數量private?int?maxDelay = 10;//延遲調用的最大時間private?void?Start(){CalculateWayLines();//計算所有路點//創建敵人for?(int?i = 0; i < StartCount; i++)GenerateEnemy();}private?WayLine[] lines;//路線的數組是空的private?void?CalculateWayLines(){lines = new?WayLine[this.transform.childCount];//根據路線數量創建路線數組,路線的數組有了但具體是什么還是空的for(int?i=0;i<lines.Length;i++){//每一個路線//路線變換組件的引用Transform wayLineTF = this.transform.GetChild(i);//獲取每條路線的路點數//創建路線對象lines[i] = new?WayLine(wayLineTF.childCount);//lines[0] {F12WayLine(WayPoints:Vector3[4]}//找點的坐標:把點的坐標給到路線的路點里去for(int?pointIndex=0; pointIndex<wayLineTF.childCount; pointIndex++){ ??//給路線路點賦值lines[i].WayPoints[pointIndex] = wayLineTF.GetChild(pointIndex).position;}}}//選擇所有可以使用的路線private?WayLine[] SelectUsableWayLine(){List<WayLine> result = new?List<WayLine>(lines.Length);//遍歷所有路線foreach(var item in?lines){//如果可以使用,添加到result列表中if?(item.IsUseable) result.Add(item);}return?result.ToArray();//把集合變為數組返回}public?void?GenerateEnemy(){spawnedCount++;//如果生成數量,已達到上限if(spawnedCount >=maxCount)return;//延遲產生一個敵人Invoke("CreateEnemy", Random.Range(1, maxDelay));}private?void?CreateEnemy(){//選擇一條可以使用的路線?//選擇所有可以使用的路線WayLine[] usableWayLines = SelectUsableWayLine();//隨機選擇一條WayLine line = usableWayLines[Random.Range(0, usableWayLines.Length)];//延遲時間隨機?int?randomIndex = Random.Range(0, enemyType.Length);//創建敵人GameObject go = Instantiate(enemyType[randomIndex], line.WayPoints[0], Quaternion.identity) as?GameObject;//配置信息EnemyMotor motor = go.GetComponent<EnemyMotor>();motor.line = line;//傳遞路線line.IsUseable = false;//傳遞生成器對象引用【建議使用委托代替】(“回掉”為了敵人能調生成方法,把自己的引用傳遞進去)go.GetComponent<EnemyStatusInfo>().spawn = this;}}

總結

以上是生活随笔為你收集整理的Unity—英雄无敌(前方高能)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久94 | 美脚の诱脚舐め脚视频播放 | 香蕉在线影院 | 秋霞av鲁丝片一区二区 | 亚洲成人第一网站 | 操亚洲女人 | 日韩一页 | 日本性爱动漫 | 精品国产乱码久久久久久1区二区 | 依依成人在线视频 | 在线观看亚洲精品 | 黄色大片一级片 | av天堂一区二区 | 亚洲欧美日韩动漫 | 人妻洗澡被强公日日澡电影 | 日本特黄一级片 | 亚洲少妇激情 | 日韩欧美视频免费在线观看 | 亚洲自拍偷拍网站 | 国产一区网站 | 亚洲日本色图 | 国产精品成人在线观看 | 中文字幕视频网站 | 特黄aaaaaaa片免费视频 | 免费看黄色的视频 | 中国黄色a级 | 国产又黄又嫩又滑又白 | 久久涩| 国产九九久久 | 免费成人av片 | 99碰碰| 午夜激情福利在线 | 欧美精品xxx| 88av网 | 毛片在线免费观看视频 | 人成免费在线视频 | 337p亚洲欧洲色噜噜噜 | 男人免费视频 | 天天躁日日躁bbbbb | 性欧美视频在线观看 | 欧美日韩亚洲一区二区 | 超碰干 | 亚洲熟妇中文字幕五十中出 | 激情五月婷婷网 | 第一区免费在线观看 | 久久久亚洲欧洲 | 少妇激情四射 | 四虎影视精品 | 香蕉视频一级片 | 成年人午夜视频 | 一本色道久久综合亚洲二区三区 | 激情综合图区 | 夜夜嗨老熟女av一区二区三区 | 美女调教视频 | 亚洲a在线视频 | 青青草成人免费 | 国产精品一级片在线观看 | 国产精品美女久久久久久 | 四虎一级片 | 99视频在线观看免费 | 亚洲欧洲精品视频 | 白丝动漫美女 | 91精品视频免费观看 | 久操视频网 | 青青伊人影院 | 国产黄色免费在线观看 | 国产在线综合视频 | 免费日韩视频 | 亚洲va韩国va欧美va | 久久久久亚洲色欲AV无码网站 | 免费日批网站 | 欧美在线 | 国产无遮挡又黄又爽又色视频 | 阿v视频在线免费观看 | 国产ts在线播放 | 亚洲精品影院 | 免费在线观看网址入口 | 国产精品久久久久三级无码 | 日本乱偷人妻中文字幕在线 | 91一区二区三区四区 | 成人污污视频在线观看 | 偷偷操不一样的久久 | 99热免费精品 | 97久久国产精品 | 7777在线视频| 影音先锋中文在线 | 亚洲最大中文字幕 | 痴汉电车在线播放 | 波多野结衣视频免费观看 | 福利资源导航 | 国产高清免费在线观看 | 成人免费在线小视频 | www.av黄色| 日韩一区二区三区在线观看视频 | 国产精品视频99 | 日韩在线第一区 | 男女精品视频 | 青草视频在线看 | 亚洲一区二区三区在线 |