首页 > 编程语言 >SYSU-SSE 3D游戏编程与设计 学习笔记(6)--模型与动画

SYSU-SSE 3D游戏编程与设计 学习笔记(6)--模型与动画

时间:2022-12-24 17:46:39浏览次数:78  
标签:动画 游戏 动作 SYSU 玩家 -- SSE 宝藏 巡逻兵

智能巡逻兵

游戏代码: 游戏代码
游戏演示视频: 演示视频

编程内容

实现思路

  • 组织游戏资源,将地图、巡逻兵和玩家做成预制,其中巡逻兵和玩家模型来自于AssetStore 玩家 巡逻兵

    巡逻兵添加了RigidBody组件和两个Collider组件,一个为自身大小范围,用于判断巡逻兵是否抓到玩家;另一个为大范围,并勾选Collider的 is Trigger 用于判断玩家是否接近巡逻兵
  • Animator制作
    巡逻兵的Animator,其中bool变量run来决定巡逻兵在静止和奔跑的动画切换

    玩家的Animator,其中bool变量run来决定玩家在静止和奔跑的动画切换,trigger触发器来触发玩家死亡动画
  • 脚本设计
    • ChaseCollide
      用于判断玩家是否接近巡逻兵,搭载在巡逻兵上,当玩家碰撞到较大的Collider时会将巡逻兵信息的玩家成员变量由空转为玩家,当玩家离开区域时,将其变回空并调用 GameEventManager 进行加分
    • PatrolCollide
      用于判断玩家是否与巡逻兵碰撞,搭载在巡逻兵上,当玩家碰撞到较小的Collider时巡逻兵会将玩家的Animator中 die 触发器触发,玩家进入死亡并调用 GameEventManager 使游戏结束
    • TreasureCollide
      用于判断玩家是否与宝藏碰撞,搭载在宝藏上,当玩家碰撞到宝藏时,宝藏消失并调用 GameEventManager 进行加分和减少宝藏数
    • TreasureFactory
      用于生成宝藏并注册减少宝藏数事件
    • CameraFlow
      用于控制相机跟随、滚轮实现拉近拉远,右键实现旋转视角
    • PatrolInfo
      用于记录巡逻兵基本信息,如起始位置,离开起始位置的最大距离
    • PatrolFactory
      巡逻兵工厂,用 List 保存生成的巡逻兵
    • SSAction
      SSAction类是所有动作的基类,SSAction继承了ScriptableObjectScriptableObject 是不需要绑定 GameObject 对象的可编程基类。这些对象受 Unity 引擎场景管理。根据门面模式将其功能抽象为SSActionManager,通过protected 防止用户自己 new 对象;使用 virtual 申明虚方法,通过重写实现多态。利用接口(ISSACtionCallback)实现消息通知,避免与动作管理者直接依赖
    • PatrolAction
      巡逻兵按固定区间的随机的距离来进行矩形的巡逻,当发现玩家时便会通过回调调用 ChaseAcion 来追逐玩家,当重新进入巡逻时会先返回起点再进行巡逻
    • ChaseAction
      巡逻兵追逐玩家,当巡逻兵离起点太远时会通过回调调用 PatrolAction 来重新巡逻
    • SSActionManager
      这是动作对象管理器的基类,实现了所有动作的基本管理,执行动作。实现游戏对象与动作的绑定,确定回调函数消息的接收对象。管理动作之间的切换
    • CCActionManager
      使巡逻兵开始巡逻
    • Director
      利用单例模式创建导演,一个游戏导演只能有一个,这里继承于System.Object,保持导演类一直存在,不被Unity内存管理而管理,导演类类似于生活中的导演,安排场景,场景切换,都是靠它来指挥。
    • Singleton
      运用模板,可以为每个MonoBehavior子类创建一个对象的实例
    • ScoreController
      用于计分并注册加分事件
    • GameEventManager
      作为发布者负责游戏结束、加分、减少宝藏数三个动作
    • FirstController
      主控制模块,加载资源,玩家移动的逻辑,游戏结束和重置等等,并且注册了游戏结束事件
    • UserGUI
      显示分数,规则按钮,重置按钮和游戏结束提示,并接收键盘输入来移动玩家
  • 运行截图


标签:动画,游戏,动作,SYSU,玩家,--,SSE,宝藏,巡逻兵
From: https://www.cnblogs.com/joshf/p/17003053.html

相关文章

  • Vue过滤器
     过滤器         定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理)。        语法:         ......
  • 个人开发环境搭建
    环境总览系统Windows10Jdk,MavenIdeaApifox,Navicat,AnotherRedisDesktopUbuntu20.04Jdk,Node,Go,PythonMysql,Redis,ElasticSearch,Kibana,Logsta......
  • 机器学习--苹果和西红柿分类
    一、选题背景苹果和西红柿有着相似的外表和颜色,一个属于蔬菜类,一个属于水果类。在果蔬加工厂中凭借工人的肉眼很难对苹果和西红柿做到又快又准的分类效果。所以,在效率......
  • 抢红包
    抢红包:一个大V直播发起了抢红包活动,分别有:9,666,188,520,99999五个红包.请模拟粉丝抽奖,按照先来先得,随机抽取,抽完即止,注意:一个红包只能被抽一次,先抽或后抽哪一个......
  • Ribbon负载均衡
                    ......
  • 恶意软件加密通信概要分析——端口分布、协议分布、恶意软件类型分布,20年的文章
    恶意软件加密通信概要分析主编 • 2020年1月9日上午10:51 • 恶意软件, 网络攻击 • 阅读20800恶意加密流量是当前流量安全检测的难点和难点。机器学习可以......
  • Vue之v-text指令
    我们学过的指令:            v-bind :单向绑定解析表达式,可简写为:xxx            v-model:双向数据绑定 ......
  • 经纬度距离计算Vincenty's formulae算法
    维基百科公式原始论文importmathfromgeopy.distanceimportgeodesic#计算两点之间的椭球面距离#使用Vincent算法,使用WGS84参考椭球体。#输入两个点的经纬度......
  • CS3331软件工程课程总结
     经过软件工程课程的一整个学期的学习,我基本掌握了进行软件工程实践的基本理论知识,在传统方法学中,我学到了如何进行可行性研究、需求分析、对软件进行形式化说明、总体设......
  • numpy中...和:的区别
    ...代指多个:,:。importnumpyasnpw1=[]forjinrange(5):  ifj!=0:    w1.append((j*1,j*1+1,0))w1=np.array(w1)#print(w1)#print(w1[:,:-1])e......