团队作业C#代码约定

一、命名约定

  1. 命名变量、属性、函数参数时,使用驼峰式大小写(“camelCasing”)。

  2. 命名类名、函数名时,使用帕斯卡拼写法(“PascalCasing”)。

  3. 命名常量时,使用全部大写写法(“ALLUPPER”)。

  4. 命名任何标识符都不使用拼音,标识符命名具有可阅读性,一些迭代变量可以使用当个字母,如i,j等等。

示例:

public class RiderController : MonoBehaviour
{
    private const float INITIALSPEED = 10f;     // 初始移动速度
    private const float SKILLCD = 30f;          // 技能CD
    private const float DISGUISECD = 5f;        // 伪装的CD

    float horizontalMove;                       // 水平移动
    float verticalMove;                         // 垂直移动
    public float speed;                         // 移动速度
    public NetworkAnimator networkAnimator;     // 网络动画
    public GameObject fakeBody;                 // 假身的预制体
    public float skillStartTime;                // 技能释放的初始时间
    public float disguiseStartTime;             // 进行伪装的初始时间
    public Sprite[] pic;                        // 假声可以替换的图片资源
    public SpriteRenderer spriteRenderer;       // 假身进行替换图片的组件

    // Start is called before the first frame update
    void Start()
    {
        speed = INITIALSPEED;
        sr = GetComponent<SpriteRenderer>();
        skillStartTime = -SKILLCD;
        disguiseStartTime = -DISGUISECD;
    }
}

二、布局约定

  好的布局利用格式设置来强调代码的结构并使代码更便于阅读。 我们的布局示例和样本需符合以下约定:

  1. 使用默认的代码编辑器设置(智能缩进4 字符缩进制表符保存为空格)。

  2. 每行只写一条语句

  3. 每行只写一个声明

  4. 当一个语句块位于另一个语句块的内部,它的缩进要在外部语句块基础上再缩进一个制表符(4个空格)。

  5. 在方法定义与属性定义之间添加至少一个空白行。

示例:

        horizontalMove = Input.GetAxis("Horizontal");
        verticalMove = Input.GetAxis("Vertical");
        if (horizontalMove != 0 || verticalMove != 0)
        {
            transform.Translate(new Vector3(horizontalMove, verticalMove, 0f) * speed * Time.deltaTime);
            if (horizontalMove < 0)
            {
                networkAnimator.SetBool("left", true);
            }
            else if (horizontalMove > 0)
            {
                networkAnimator.SetBool("left", false);
            }
            else
            {
                // 不进行操作
            }
        }

三、注释约定

  1. 变量注释放在代码行的末尾,注释内容为变量作用或者名称,要具有可描述性。
  2. 其他注释放在单独的行上,而非代码行的末尾。
  3. 在注释分隔符 (//) 与注释文本之间插入一个空格。
  4. 使用框架时,本身带有的注释不需要进行任何改变,即使它是英文。
  5. 在每个文件的开头加上代码注释,注释内容为这个文件的功能职责。

示例:

public class DragonController : MonoBehaviour
{
    private const float INITIALSPEED = 10f;                 // 初始移动速度
    private const float MAXTIME = 5f;                       // 冲刺技能持续时间
    private const float DASHSPEED = 2f * INITIALSPEED;      // 冲刺速度

    public NetworkAnimator animator;                        // 网络动画同步组件
    public float speed;                                     // 正常速度
    public float dashTime;                                  // 冲刺时间 
    public bool canDash;                                    // 是否可以冲刺

    // Start is called before the first frame update
    private void Start()
    {
        // 设置移动速度
        speed = INITIALSPEED;
        // 设置冲刺时间
        dashTime = 0f;
        // 设置是否可以冲刺
        canDash = false;
    }
}

四、变量约定

  1. 一般不使用全局变量,毕竟使用全局变量会增加代码的阅读困难。
  2. 代码中不出现具体的数值,变量的初始化数值统一放在一个接口文件,设置为静态常量,这样统一管理游戏参数,方便后期游戏的测试和维护。
  3. 每一个变量后面必须增加注释,注释内容为该变量的名称或者作用,要具有可描述性。
  	// 角色标号
    // 猎人
    public const int rabbitIndex = 0;
    public const int dragonIndex = 1;
    public const int smallWhiteIndex = 2;

    // 猎物
    public const int grassIndex = 3;
    public const int archerIndex = 4;
    public const int fisherIndex = 5;
    public const int riderIndex = 6;
    public const int mageIndex = 7;
    public const int godIndex = 8;

    //------------------------------------------------------------------------------------------------------

    // 角色速度
    public const float hunterSpeed = 12f;
    public const float preySpeed = 10f;
    public const float allSpeedUp = 18f;
    public const float singleSpeedUp = 20f;

    //------------------------------------------------------------------------------------------------------

    // 子弹速度
    public const float bullet = 30f;

    //------------------------------------------------------------------------------------------------------

    // debuff持续时间
    public const float stopTime = 2f;
    public const float stopSpeed = 0f;

    //------------------------------------------------------------------------------------------------------

    // tag
    public const string preyTag = "Prey";
    public const string fakeBodyTag = "fakeBody";

    //------------------------------------------------------------------------------------------------------

    // 技能CD
    public const float disguiseCD = 15f;                    // 猎物伪装CD
    public const float shootCD = 5f;                        // 猎人发射子弹CD

    // 猎人
    public const float rabbitECD = 30f;                     // 兔子E技能CD
    public const float dragonECD = 20f;                     // 龙E技能CD
    public const float smallWhiteECD = 15f;                 // 小白E技能CD

    // 猎物
    public const float grassECD = 20f;                      // 草E技能CD
    public const float archerECD = 15f;                     // 弓箭手E技能CD
    public const float fisherECD = 90f;                     // 鬼影迷踪E技能CD
    public const float riderECD = 30f;                      // 骑士E技能CD
    public const float mageECD = 120f;                      // 魔法师E技能CD(传送)
    public const float godECD = 45f;                        // 上帝E技能CD(上帝视角)

五、函数约定

  1. 函数与函数之间至少有一个空白行
  2. 一个函数只完成一个任务。
  3. 函数命名一般以动词开头,命名约定为帕斯卡拼写法(“PascalCasing”)。
  4. 函数的花括号位于函数的下方且单独占一行。
  5. 如果if、while、for等等语句块的内容只有一行,也必须要加花括号,且花括号开头位于语句的下方开始,而不是语句的末尾。
  6. 返回bool类型的方法、属性的命名,如果方法返回的类型是bool类型,则其前缀为Is,例如:IsHidden;如果某个属性的类型为bool类型,则其前缀为can,例如:canHidden。

示例:

	// 冲刺
    void Dash()
    {
        if (canDash)
        {
            float dashTimeLeft = Time.time - dashTime;

			// 判断冲刺持续时间是否大于冲刺技能持续时间,如果是,则结束冲刺。
            if (dashTimeLeft > MAXTIME)
            {
                canDash = false;
                speed = 10f;
            }
            else
            {
                speed = DASHSPEED;
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值