真Unity3d_C#基本语法1

其实我写C#有好多年,我也不用太谦虚,估计这里写C#没人比我早,因为我从.net 1.0开始写的

但原来很多语法我都不会,相反一些商业游戏框架里面蕴含的语法,写这些代码的人对C#的掌握程度反而让我惊艳


1.注入

注入的意思就是注入,也不知道怎么解释好,反正JAVA语法直译也就是这个意思

例如下面的代码,其实如果vp_itemPickup这个类需要用到collider这个component的,这样写之后捏,在unity editor添加Component: itemPickup的时候,直接同时会把collider,注入完成(也就是加载的前一刻,加载完成所需前置的类,也就能完全调用前置类的实现方法,而这个前置类不是在unity editor ,而是发起注入的这个源类决定的,甚至是动态决定的, 或者某个配置文件里面写死的, 主要也就是需要加载前一刻才“注入”的效果)

RequireComponent 真的是很棒,相当于注入

其实[]这样的写法,我当时学C#的时候已经是相当于JAVA的注入

C#这么写

[System.Serializable]
public class vp_Item

而Java这么写

@Serializable
public class vp_Item


其实我暂时还不知道System.Serializable有什么用,之前看过好像是序列化之后,UnityEditor能直接用,太晚了今天,所以不好意思,后面再补上吧

[RequireComponent(typeof(SphereCollider))]
[System.Serializable]
public class vp_ItemPickup : MonoBehaviour

我不得不记录下这样的注入写法,注入并不是一个方法或实现,他在C#里真的就是标签 | 特性,并没有具体实现,但就是说明要注入这么一个特性(不止是标签,是一些特性的实现)

/// <summary>
/// 
/// </summary>
public class vp_ItemAmountAttribute : PropertyAttribute
{

	public vp_ItemAmountAttribute()
	{
	}

}

/// <summary>
/// 
/// </summary>
[CustomPropertyDrawer(typeof(vp_ItemAmountAttribute))]
public class vp_ItemAmountDrawer : PropertyDrawer
{
//这里有不少逻辑代码,篇幅问题,没列出来
}


上面的代码对于
vp_ItemAmountAttribute 我的理解就是把
vp_ItemAmountDrawer 注入到 
CustomPropertyDrawer 里



2.作用域和虚函数

protected(保护方法)就是所有继承这个类的类都能调用该方法,无法在外部调用,外部类甚至见不到这个方法,

virtual(虚函数)就是继承这个类的类都能重写这个方法,这个类的子类同样能命名方法,如:private void InputAttack(),这个类的这个虚方法就不会被执行,而直接执行子类的InputAttack()方法

protected virtual void InputAttack()
{
	// TIP: 这个方法已经有一个实现了
}




最后,想法就是有这么一个配置问题文件,我需要一个伤害值的计算公式

<info un32ID="1200501">
		<szName>瞬刺等级1</szName>
		<CameraType>0</CameraType>
		<SkillType>2,5</SkillType>
		<bIsInstant>0</bIsInstant>
		<bIfNormalAttack>0</bIfNormalAttack>
		<bIsConsumeSkill>0</bIsConsumeSkill>
		<eSummonEffect>0</eSummonEffect>
		<eEffectiveAttackWay>0</eEffectiveAttackWay>
		<eReleaseWay>2</eReleaseWay>
		<n32UpgradeLevel>1</n32UpgradeLevel>
		<n32UseMP>30</n32UseMP>
		<n32UseHP>0</n32UseHP>
		<n32UseCP>0</n32UseCP>
		<n32PrepareAction>0</n32PrepareAction>
		<n32PrepareTime>0</n32PrepareTime>
		<n32PrepareEffect>0</n32PrepareEffect>
		<n32PrepareSound>0</n32PrepareSound>
		<n32ReleaseAction>skill</n32ReleaseAction>
		<n32ReleaseSound>0</n32ReleaseSound>
		<n32ReleaseTime>270</n32ReleaseTime>
		<n32CoolDown>12000</n32CoolDown>
		<n32SkillLastTime>0</n32SkillLastTime>
		<n32ReleaseDistance>900</n32ReleaseDistance>
		<eUseWay>1</eUseWay>
		<n32TriggerRate>1000</n32TriggerRate>
		<bIfAffectBuilding>0</bIfAffectBuilding>
		<bIfAffectHero>1</bIfAffectHero>
		<bIfAffectMonster>1</bIfAffectMonster>
		<affectString></affectString>
		<eTargetType>5</eTargetType>
		<bIsCheckTargetSta>1</bIsCheckTargetSta>
		<SkillIcon>05</SkillIcon>
		<info>瞬间移动至目标位置,可以对友方单位使用</info>
		<EventID>170003</EventID>
	</info>


看到这么一串数字,其实有点晕,因为这样的配置表还有很多

当然我可以再加几个elements,例如hp attack, physic attack那要再+几个elements才够呢,如果策划又说改攻击力计算公式,是不是又再加elements

所以最好做成一个公式(字串),让他们自己改去吧


大概最后做成

public class SkillManagerConfig
{
	/// <summary>
	/// 后添加的,创伤公式字串
	/// 做成可编程式字串(虽然可能只是替换)
	/// 用entity的物理攻击,法术攻击等替换公式字串的内容
	/// </summary>
	public string affectString;

}




这只是开头,我好像也不记得什么语法能做这个,

正则表达式?

还是Convert.toString?

有知道什么C#语法比较好做这种语法字串(学术上好像叫,语意转换)的小伙伴在么?



如果你想要知道一点C#基本语法,其实1,2本书就够了,包含几乎所有语法,我也可以介绍给你,还是10年前1.0的书


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值