122
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 2302软件工程社区 |
|---|---|
| 这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
| 这个作业的目标 | 课程回顾与总结和个人技术总结 |
| 其他参考文献 | 《构建之法》 |
编写脚本用于声明该存储结构中存储的数据类型,如下图,下图中存储的就是一个我自己声明的PackageTableItem类,创建出的表格是以PackageItem为元素的List,用于存储所有可以放入背包中的物品的详细信息。
这是更加复杂的创建脚本,该对象中含有一个构造函数用于在获得灵兽后随机分配灵兽的天赋信息。
这是创建出的表格,里面所有信息都可以在这里直观展示,便于Unity开发过程中实时监测数据变化,可让测试效率大大提高。
该脚本中创建了各种基础的读取数据的方法,如下图:
这里展示了两个示例方法,ReturnItem(int id)和ReturnItem(string name)
用于根据输入的id或是物品名字来返回一个物品对象,用于在某些方法中识别物品。
加载对应的ScriptableObject,以下代码用于为playerItemTable和packageTable赋值,Resources.Load用于加载对应表,用于存取数据,此时playerItemTable和packageTable就分别对应了玩家背包内的物品表和存储了所有物品详细信息的表。
AddItem方法:可用于添加一个物品到玩家的背包内,id对应添加的物品id,num对应添加的物品数量。
下列代码中实现的是首先检测背包中是否存在该物品,然后查找到id对应的物品信息存入item对象中,再将物品放入背包中。
如果背包中已经存在该物品,则直接添加该物品在背包中的数量,如果不存在,则创建一个该物品对应的物品对象。
最后,引用SignController的ShowAddItem方法,用于在界面中显示已获取到当前物品。
在获取任务奖励中的金币后,将在界面上显示获取信息
以下是一些基础处理方法,获取指定id的物品在玩家背包中的数量,获取整个背包中的物品对象,以及对背包物品根据物品的id进行排序。
以下是另一种存取方法,首先声明一些需要的变量。
而后创建一个鼠标点击事件,在点击该按钮后可以执行相应的逻辑,根据ReadTable脚本中的方法,查找点击到的图片属于哪个法术对象,而后进行处理。
下图是任务界面的UI数据显示,显示当前的任务进度以及详细描述。
如下是对应代码,代码中的第一个for循环用于在打开该界面时可以清理之前的数据,保证数据的实时性,第二个foreach循环则负责查找TaskTable表中的award数据,及任务奖励,将其依次显示在界面右侧的任务奖励区域。
如下是更复杂的一个UI数据交互,用于进行NPC的交互,首先进行数据的声明和初始化。
而后根据NPC的位置和类型进行判断,判断成功则进入该方法,点击F与NPC对话,点击左键执行ShowNextChat方法。
下图则是执行对话功能中涉及到的数据交互,先从PlayerData.getNowNPC进行比较,如果id是当前的任务NPC则执行任务剧情相应对话,如果不是则进行该NPC的常规对话。
背包UI界面中会显示背包中所有物品的信息,在鼠标移入后会显示更加详细的信息
灵兽UI界面显示也会显示所有背包中的灵兽,鼠标移入后也会在界面右侧显示对应的灵兽信息。
这里我将玩家对象和相机对象看作一个整体,角色对象是图中的Navia,相机对象是图中的Main Camera
这是整体对象和两个子对象的详细层级结构,分为角色和相机。
下图是相应的代码实现,mouseX和mouseY分别为鼠标的水平和垂直输入,用于操作鼠标移动相机视角,rotationX是相机的水平移动角度,然后在计算完成垂直移动角度后执行cameraHandle.transform.LoaclRotation = Quaternion......计算出最终的相机视角角度。然后重置相机视角。
float scroll = Input.GetAxis("Mouse ScrollWheel")以下的代码是处理相机与角色距离的代码,在没有任何外力作用下只会根据鼠标滚轮的滚动而变化。
以下是相应的执行逻辑,第一张图是当前脚本的OnTriggerStay方法,用于判断是否有物体在相机的第一层碰撞体上,第二张图是CameraCollider脚本的方法,用于判断是否有物体在第二层碰撞体上,放置两层碰撞体进行检测是为了可以更流畅的进行视角变化,这样可以在碰撞到物品后自由移动相机距离,最大程度限制相机与地形重叠等问题。
horizontal与vertical用于获取键盘的横纵向输入,控制人物的前后移动,isSlide用于控制滑铲状态,disableInput用于控制禁止获取输入的状态。
控制人物攻击部分
控制灵兽召唤部分
部分人物控制逻辑的代码,这个是主要的移动逻辑,包括播放不同状态的动画,以及根据相机视角改变人物当前的朝向。
这里通过动画器来管理动画的状态,我的策略是利用动画器和代码组合进行动画管理,这样就组成了一个大致成型的动画逻辑,下图动画器中的箭头都存放了转变状态需要的条件。
这是挑选了其中一种灵兽的动画器,灵兽的动画器相较于角色来说更为简单一些,因为灵兽的大部分逻辑偏向于在代码中实现而不是依赖动画器。