Unity3D 从入门到放弃(六)-----巡逻兵

Unity3D 从入门到放弃(六)

—–巡逻兵


2017.5.9修改:修改了UML图。


作业需求

游戏规则:

  • 创建一个地图和若干巡逻兵;
  • 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次
    确定下一个目标位置,用自己当前位置为原点计算;
  • 巡逻兵碰撞到障碍物如树,则会自动选下一个点为目标;
  • 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
  • 失去玩家目标后,继续巡逻;
  • 计分:每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;

先上UML图:

这里写图片描述


做完后的游戏动画:

这里写图片描述

(这游戏真难玩)

PS:源码在GitHub上,链接如下:

https://github.com/bilibiliChangKai/Unity3D.git

下面说一下我遇到的一些问题。


游戏制作过程:

实例化部分:

本次我运用到了两个外部实例Ami和King,这两个实例可以在我源码中下载。

这里写图片描述

两个实例的动作控制如下:
这里写图片描述
这里写图片描述
其中Speed属性判断动作,toDie触发器触发死亡。

将两个预设加上刚体(虽然没用上物理学),和胶囊触发器, 设置触发器的大小即可。

地板和墙用plane和cube实现即可。


动作部分:

动作部分分为巡逻兵UI和主角控制两个动作,分别在两个脚本实现,最后挂在到预设中。

巡逻兵:

首先,需要实现巡逻兵的三个动作:静止,走路,追击(主角)
我用三个继承SSSAction的基类分别实现它们,通过改Animator中的Speed实现动画切换。

    public class IdleAction : SSAction
    {
        private float time;
        private Animator ani;
        // 站立持续时间

        public static IdleAction GetIdleAction(float time, Animator ani)
        {
            IdleAction currentAction = ScriptableObject.CreateInstance<IdleAction>();
            currentAction.time = time;
            currentAction.ani = ani;
            return currentAction;
        }

        public override void Start()
        {
            ani.SetFloat("Speed", 0);
            // 进入站立状态
        }

        public override void Update()
        {
            if (time == -1) return;
            // 永久站立
            time -= Time.deltaTime;
            // 减去时间
            if (time < 0)
            {
                this.destory = true;
                this.callbac
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值