Unity3d 之 Survival Shooter 菜鸟教程系列二

前言:不得不自我批评一下,更新的速度有点慢,距离上一篇已经有2个月了。接下来要赶下进度了……


这篇文章主要介绍,如何添加一个敌人角色,并自动跟踪Player对象。

步骤一:之前系列一,忘记添加场景了。补上。即将预设体Environment拖拽到Hierarchy场景中。如下:

这里写图片描述

步骤二:将敌人zombunny对象拖拽到场景中。位置如下:

这里写图片描述

同时,把HitParticles预设体拖拽到zombunny对象上,使其成为zombunny的子物体。作用:Player对象击中敌人zombunny,产生粒子特效。位置如下:

这里写图片描述

步骤三:将zombunny的Layer层,设置为shootable层(后面代码控制, 只有这一层的对象才能被Player对象进行攻击),意味着它可以被主角Player进行攻击。如下:

这里写图片描述

步骤四:给zombunny添加一个胶囊碰撞组件: Add Component–>Physics–>Capsule Collider

目的:用于碰撞。才不会使得zombunny直接穿透场景的物体。

设置如下:

Center : X :0 | Y:0.8 | Z:0

Radius :0.5

Height:1.5

步骤五:给zombunny添加一个球型碰撞器组件:Add Component–>Physics–>Sphere Collider

目的:用于与主角Player对象进行碰撞触发检测。注意:Is Trigger 必须勾选!!!

设置如下:

Is Trigger : √ ,必须勾选

Center : X :0 | Y:0.8 | Z:0

Radius :0.8

步骤六:给zombunny添加一个Audio Source组件:Add Component –>Audio–>Audio Source

目的:zombunny被主角攻击时,会出现受伤的声音片段。

设置如下:

AudioClip(声音片段):选中zombunny Hurt

取消Play On Awake(开机自动播放)

步骤七:给zombunny添加Nav Mesh Agen组件:Add Component –>Navigation–>Nav Mesh Agen

目的:使zombunny角色能够自动寻径,跟踪Player对象

设置如下:

首先 window –>Navigation 打开Navigation面板,在Bake选项中设置: Agent Radius :0.75 | Agent Height:1.2 | Step Height :0.1

设置完,点击Bake,进行路径烘焙,效果如下:

这里写图片描述

蓝色的区域,表示烘焙后的效果,这部分区域,zombunny角色可以进行走动。而黑色区域,zombunny会绕道而走。

步骤八:为zombunny角色创建一个动画控制器,用于控制角色运动时的状态。

在2016_my_survival_Shooter目录下,右键–>create–>Animator Controller –>命名为yzx_Enemy —>拖拽该控制器到场景中的zombunny对象上;

打开Animator视窗,window–>Animator

默认有3个状态 (Any State 、Entry 、Exit),右键空白处,分别创建三个状态(右击–>Create State–>Empty),并分别重命名为Move、Idle 和 Death;

接下来,点击Parameters,点击“+”号,添加两个参数。两个参数均设置为Trigger(触发型): Dead 和 PlayerDead ,并记得勾选。

最后,设置好整个控制器状态的逻辑。

Entry—>Move; 默认状态

Move–>Idel (右击–>Make Transition) 并选中过渡线,设置过渡条件,在Inspect视图中,找到Conditions,选中“+”,把刚才设置的参数添加进来(这里选择PlayerDead);

Any State–>Death (过渡条件设置为 Dead);

整体的效果如下:

这里写图片描述

步骤九:写一个zombunny的运动脚本。

在2016_my_survival_Shooter下的子目录yzx_script下,新建一个C#脚本,并命名为EnemyMovement ,并将脚本拖拽到zombunny对象上。其中,EnemyMovement.cs脚本代码如下:

using UnityEngine;
using System.Collections;

public class EvemyMovement : MonoBehaviour {

    Transform player;    //定义一个private变量,类型为Transform类型
    NavMeshAgent nav;   //定义一个private变量,类型为NavMeshAgent类型
    // Use this for initialization

    void Start () {
        player = GameObject.FindGameObjectWithTag ("Player").transform; //根据Tag标签找到Player对象,如果你有印象,你会发现上一篇系列一,Player角色的设置Tag设置为Player
        nav = GetComponent<NavMeshAgent> (); //由于该脚本是绑定在zombunny上的,而NavMeshAgent组件也在zombunny对象上,所以直接GetComponent就可以得到zombunny上的组件。
    }

    // Update is called once per frame
    void Update () {

        nav.SetDestination (player.position); //设置nav对象的最终目的地,也就是zombunny的最终位置,其位置为Player角色的实时位置,那么zombunny就会跟踪Player对象了。
    }
}

暂时就到这了……


附上整个项目的工程。链接:http://pan.baidu.com/s/1dEESvXf 密码:4w2h

本次场景存放的路径为:2016_yzx_survival_shooter\Assets\2016_my_survival_Shooter.unity

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值