这个作业属于哪个课程 | 软件工程A |
---|---|
这个作业要求在哪里 | 团队作业–站立式会议+alpha冲刺 |
作业目标 | 记录alpha冲刺Day2 |
团队名称 | 橘色肥猫 |
团队置顶集合随笔链接 | Alpha冲刺笔记-置顶-橘色肥猫-CSDN博客 |
站立式会议图片
项目燃尽图
成员描述
102101143 傅晗
Unity2d 背包逻辑是指在Unity游戏开发中,如何实现一个可以存储和管理物品的背包系统。背包的交互逻辑:如何让玩家可以对背包中的物品进行操作,例如拾取、使用、丢弃、交换、合成等。一种常用的方法是使用Unity的事件系统,给每个格子添加一个事件触发器组件,用来监听玩家的点击或拖拽事件,然后根据不同的事件类型,执行相应的逻辑,例如更新背包的数据和界面,调用物品的功能,播放音效或动画等。Unity2d 背包逻辑需要考虑到很多细节和情况,例如背包的容量限制,物品的堆叠规则,物品的分类和排序,物品的拾取和使用条件,物品的交互反馈等,这些都需要仔细的设计和测试,避免出现逻辑错误或BUG。
102101209 颜一虹
昨天站立式会议到现在的项目进展:设计第二部分场景切换顺序
存在的问题/遇到的困难:开发人员表示有部分切换场景无法理解
今天到明天会议安排:继续设计剧情场景切换逻辑顺序
心得体会:今天继续熟悉了游戏剧情的发展顺序,又因为缺少和开发人员的沟通,描述方式与开发人员的理解方式不同,所以花费了一定的时间进行交流整改,下次就不会啦。
102101237 翁国平
今天把剧情更加理顺,并且找到了几张符合剧情的素材
112100237 辜智荣
今天找到了一些和情节适配度较高的图片,也对情节切换方面提出了一些意见。困难主要是在图片中提示部分的安排,需要使不同场景之间的线索安排具有连贯性。
102101217苏锦森
发现图生图生成图片需要非常细致的观察力和创新思维。每一个细节都需要精心设计,每一个元素都需要和整体的游戏风格协调一致。这需要我在理解游戏背景、角色设定和故事情节的基础上,创造出符合游戏氛围的图片。
在实际操作中,我遇到了一些技术上的困难。比如,如何把握好图片的分辨率和大小,使其既能保证画质清晰,又不会过大影响游戏的运行速度。又比如,如何利用图像处理软件的各种功能,实现我想要的效果。这些都需要我不断学习和实践。
102101208 涂欣雨
昨天站立式会议到现在的进展:梳理出第二部分游戏场景的切换顺序
存在的问题/遇到的困难:剧本中存在一些逻辑模糊的地方
今天到明天会议的安排:继续梳理游戏场景的切换顺序,细化游戏线索
心得体会:今天根据剧本梳理了一下第二部分游戏场景的切换顺序,针对剧本逻辑模糊的地方与开发人员进行了沟通。
102101613 石贤炜
昨天站立式会议结束后,小组成员们回去后积极的执行分配到的任务。在今天的小组会议上,大家各自阐述了自己任务的完成情况,负责代码的同学向大家述说了自己编程中遇到的困难,然后与我们讨论代码编写出来的程序与剧情的适配度,负责素材与剧情策划的同学提了不少的意见,大家反复磋商,整场会议下来,感觉游戏又优化了不少,界面更加友好,用户交互的体验感应该会增强。我分配到的任务依旧是找素材,继续努力,继续加油,打造精品游戏!!!
102101225 张鸿诚
Unity 2d 人物移动是一个非常基础和重要的功能,让玩家可以通过键盘、鼠标、触摸屏等输入设备来控制人物的移动方向和速度,以及人物的跳跃和攻击等动作,可以让游戏有更多的互动性和动态性,让玩家有更好的游戏体验和沉浸感。
Unity 2d 人物移动需要考虑到很多细节和情况,例如人物的动画和物理的匹配和平滑,人物的控制的灵敏和准确,人物的移动的限制和边界,人物的移动的反馈和提示,以及重力加速度等。
代码签入签出记录
实现背包逻辑
Item.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Item : MonoBehaviour
{
// Start is called before the first frame update
public ItemName itemName;
public void ItemClicked()
{
InventoryManager.Instance.AddItem(itemName);
this.gameObject.SetActive(false);
}
}
Inventory Manager
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InventoryManager : Singleton <InventoryManager>
{
public ItemDataList_SO itemData;
[SerializeField] private List<ItemName> itemList = new List<ItemName>();
private void OnEnable()
{
EventHandler.ItemUsedEvent += OnItemUsedEvent;
EventHandler.ChangeItemEvent += OnChangeItemEvent;
EventHandler.AfterSceneloadEvent += OnAfterSceneUnloadEvent;
}
private void DisEnable()
{
EventHandler.ItemUsedEvent -= OnItemUsedEvent;
EventHandler.ChangeItemEvent -= OnChangeItemEvent;
EventHandler.AfterSceneloadEvent -= OnAfterSceneUnloadEvent;
}
private void OnAfterSceneUnloadEvent()
{
if (itemList.Count == 0)
EventHandler.CallUpdateUIEvent(null, -1);
else
{
for(int i = 0; i < itemList.Count; i++)
{
EventHandler.CallUpdateUIEvent(itemData.GetItemDetails(itemList[i]), i);
}
}
}
private void OnChangeItemEvent(int index)
{
if(index >=0&&index <itemList.Count) {
ItemDetails item = itemData.GetItemDetails(itemList[index]);
EventHandler.CallUpdateUIEvent(item, index);
}
}
private void OnItemUsedEvent(ItemName itemName)
{
var index = GetItemIndex(itemName);
itemList.RemoveAt(index);
if (itemList.Count == 0)
EventHandler.CallUpdateUIEvent(null, -1);
}
public void AddItem(ItemName itemName)
{
if (!itemList.Contains(itemName)){
itemList.Add(itemName);
EventHandler.CallUpdateUIEvent(itemData.GetItemDetails(itemName), itemList.Count - 1);
}
}
private int GetItemIndex(ItemName itemName)
{
for (int i = 0; i < itemList.Count; i++)
{
if (itemList[i] == itemName)
return i;
}
return -1;
}
}
ItemDataList_SO.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "ItemDataList_SO", menuName = "Inventory/ItemDataList_SO")]
public class ItemDataList_SO : ScriptableObject
{
public List<ItemDetails> itemDetailsList;
public ItemDetails GetItemDetails(ItemName itemName)
{
return itemDetailsList.Find(i=>i.itemName == itemName);
}
}
[System.Serializable]
public class ItemDetails
{
public ItemName itemName;
public Sprite itemSprite;
}
Player control
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerControl : MonoBehaviour
{
private Animator ani;
private Rigidbody2D rBody;
void Start()
{
ani = GetComponent<Animator>();
rBody = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
if (horizontal != 0)
{
ani.SetFloat("Horizontal", horizontal);
ani.SetFloat("Vertical", 0);
}
if(vertical != 0)
{
ani.SetFloat("Horizontal", 0);
ani.SetFloat("Vertical", vertical);
}
Vector2 dir = new Vector2(horizontal, vertical);
ani.SetFloat("Speed", dir.magnitude);
rBody.velocity = dir * 0.5f;
}
}
CameraControl
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraControl : MonoBehaviour
{
public Transform target;
public float MinY;
public float MaxY;
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 v3 = transform.position;
v3.y = target.position.y;
if(v3.y>MaxY) v3.y = MaxY;
if(v3.y<MinY) v3.y = MinY;
transform.position = v3;
}
}