查看: 1179|回复: 0
打印 上一主题 下一主题

[经验分享] Unity3D之角色攻击恢复实现详解

[复制链接]

100

主题

3

听众

7683

积分

高级设计师

Rank: 6Rank: 6

纳金币
2378
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-2-13 00:44:34 |只看该作者 |倒序浏览
前几天我写了自动寻径,今天结合自动寻径和模型上的静止(idle)、走(walk)、攻击(attack),做到让模型走到另一个模型身边攻击他,另一个模型消失,然后模型停止攻击动作恢复静止。
附在模型上的代码:
public float timer = 1f;
public static int lifetime = 1;
private NavMeshAgent agent;
public Transform hero;
bool flag = false;
void Start()
{
agent = GetComponent<NavMeshAgent>();
}
void Update () {
RaycastHit hit;
if (Input.GetMouseButtonDown(0)) {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray,out hit)){
agent.SetDestination(hit.point);
}
}
if (flag)
{
timer -= Time.deltaTime;
if (timer <= 0)
{
flag = false;
timer = 1f;
}
AnimationToAttack();
}
else
{
if (agent.remainingDistance == 0)
{
AnimationToIdle();
}
else
{
AnimationToWalk();
}
}
}
public void AnimationToIdle() {
hero.transform.animation.Play(“idle”);
}
public void AnimationToWalk() {
hero.transform.animation.Play(“walk”);
}
public void AnimationToAttack() {
hero.transform.animation.Play(“idle to working”);
}
void OnTriggerEnter(Collider a)
{
if (a.CompareTag(“life”))
{
flag = true;
}
}
附在武器上的代码:
public float enemylife = 2;
void OnTriggerEnter(Collider a){
if (a.CompareTag(“life”)) {
enemylife–;
if (enemylife == 0) {
Destroy(a.gameObject);
enemylife = 2;
move.lifetime++;
}
}
}
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-28 02:06 , Processed in 0.061170 second(s), 27 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部