686
社区成员




这个作业属于哪个课程 | 2023年福大-软件工程实践-W班 |
---|---|
这个作业要求在哪里 | 团队作业——站立式会议+alpha冲刺 |
这个作业的目标 | 对整个Alpha冲刺的阶段性总结 |
其他参考文献 | 《构建之法》 |
游戏场景预览
代码规范的制定
完成数据管理器
角色跳跃、下蹲代码
主菜单、设置界面UI和部分逻辑
人物素材
场景素材
修正数据表格式,生成Data与json,完善各个UI,完成道具显示界面,定义部分实体,定义敌人AI状态机,完善资源管理
增加消息提示框
实现人物控制器
using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using Unity.VisualScripting.Dependencies.NCalc;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Rigidbody2D rb;
private BoxCollider2D coll;
[Header("移动参数")]
public float speed = 8f;
//下蹲时速度除以的基数
public float crouchSpeedDivisor = 3f;
public float jumpForce = 4f;
float jumpTime;
[Header("状态")]
public bool isCrounch;
public bool isOnGround;
public bool isJump;
[Header("环境检测")]
public LayerMask groundLayer;
//x轴力的方向
private float xVelocity;
//按键设置
bool jumpPressed;
bool jumpHeld;
bool crouchHeld;
//碰撞体尺寸
Vector2 colliderStandSize;
Vector2 colliderStandOffset;
Vector2 colliderCrouchSize;
Vector2 colliderCrouchOffset;
void Start()
{
rb = GetComponent<Rigidbody2D>();
coll = GetComponent<BoxCollider2D>();
colliderStandSize = coll.size;
colliderStandOffset = coll.offset;
colliderCrouchSize = new Vector2(coll.size.x, coll.size.y * 0.5f);
colliderCrouchOffset = new Vector2(coll.offset.x, coll.offset.y-0.25f*coll.size.y);
}
void Update()
{
jumpPressed = Input.GetButtonDown("Jump");
// jumpHeld = Input.GetButton("Jump");
crouchHeld = Input.GetButton("Crouch");
}
private void FixedUpdate()
{
PhysicsCheck();
GroundMovement();
AirMovement();
}
void PhysicsCheck()
{
if (coll.IsTouchingLayers(groundLayer))
{
isOnGround = true;
isJump = false;
}
else
{
isOnGround = false;
}
}
private void GroundMovement()
{
if (crouchHeld && !isCrounch && isOnGround)
Crouch();
else if (!crouchHeld && isCrounch)
StandUp();
else if (!isOnGround && isCrounch)
StandUp();
xVelocity = Input.GetAxis("Horizontal");
if (isCrounch)
xVelocity /= crouchSpeedDivisor;
rb.velocity = new Vector2(xVelocity * speed, rb.velocity.y);
FlipDirection();
}
private void AirMovement()
{
if (jumpPressed && isOnGround && !isJump)
{
isOnGround = false;
isJump = true;
rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
//Debug.Log("jump");
}
}
//左右翻转角色
private void FlipDirection()
{
if (xVelocity < 0)
transform.localScale = new Vector2(-1.77f, 1.35f);
if (xVelocity > 0)
transform.localScale = new Vector2(1.77f, 1.35f);
}
private void Crouch()
{
isCrounch = true;
coll.size = colliderCrouchSize;
coll.offset = colliderCrouchOffset;
}
private void StandUp()
{
isCrounch = false;
coll.size = colliderStandSize;
coll.offset = colliderStandOffset;
}
}
完成角色动画控制
人物移动代码
怪物AI
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Monster_Slime : MonoBehaviour
{
public Animator anim;
private Collider2D coll;
private Rigidbody2D rb;
public int speed;
//---------上面照旧----------
public Transform left, right;//左边边界的引用
private float leftMargin, rightMargin;//Frog可以移动的左右边界
private bool faceRight = true;//开始青蛙是面向右的
void Start()
{
anim = GetComponent<Animator>();
coll = GetComponent<Collider2D>();
rb = GetComponent<Rigidbody2D>();
//分别获得左右边界位置的x轴的大小
leftMargin = left.position.x;
rightMargin = right.position.x;
//防止左边边界跟随敌人移动,获得后直接销毁
Destroy(left.gameObject);
Destroy(right.gameObject);
}
void Update()
{
Movement();
}
//基础移动
void Movement()
{
//如果面向右
if (faceRight)
{
anim.SetBool("run", true);
rb.velocity = new Vector2(speed, rb.velocity.y);
//当敌人超过右边界时
if (transform.position.x > rightMargin)
{
rb.velocity = new Vector2(0, 0);
transform.localScale = new Vector3(-1, 1, 1);
faceRight = false;
}
}
else
{
anim.SetBool("run", true);
rb.velocity = new Vector2(-speed, rb.velocity.y);
//当敌人越过左边界时
if (transform.position.x < leftMargin)
{
rb.velocity = new Vector2(0, 0);
transform.localScale = new Vector3(1, 1, 1);
faceRight = true;
}
}
}
}
完成人型动画控制、完成地图生成
完成角色地面移动
完成角色空中移动以及左右转向
完道具管理和拾取逻辑
完成战斗界面主界面逻辑
使用Teambition进行团队项目管理
使用GitCode上传后端与前端的内容
通过线下站立式会议的方式进行进度对接,特殊情况下也会使用腾讯会议进行开会
实现战斗交互
制作人员面板
丰富地图生成逻辑
完善后台功能
部署到服务器上
确认所有游戏道具以及收集相关素材
UI界面素材
游戏数值设计
备战场景的搭建
添加游戏音效