本篇小型实例是为像本渣渣一样刚刚入门U3D的童鞋们制作的,当然理论上包括了设计一部完整游戏的主要内容,而不是单纯的讲某些函数怎么使用
——也就是说,大部分API里面使用频率高的内容并不会详细解释,并且对于游戏不会进行比较高效的优化
那么开始吧!
在某个遥远的二维世界里,有一个正方形——我们姑且叫它“方块君”,方块君的宿敌是五边形君,因为——
啊~~~五边~~~你比四边多一边~~~
什么鬼,emmmmm,你只需要记住这个事实就可以辣
但是方块君没有能够击败五边形君的力量,于是它向卡密撒嘛求助,卡密撒嘛告诉它,它可以许下一个愿望,获得某种能力,但是五边形君们也能获得同样的能力,于是方块君考虑再三,决定向神所要移动和攻击的能力什么原来方块君是不会动的吗 什么你不写脚本方块君能动吗
于是,这部脑子一热突发奇想的垃圾游戏就诞生了(由于压根没有什么美术资源又懒得去AssetsStore找,所有的东西都是几何图形拼成的):
你没有看错就是这么简单
于是乎,方块君怒了:你不就是把我放在一个梯形里面吗!
卡密撒嘛:别急嘛,之后你就能享受到“民主自由”的感觉了,等我敲个代码……将这些扔进FixedUpdate()里面就行辣
if (Input.GetKey(KeyCode.LeftArrow)&&transform.position.x>=-8f)//按住左方向键并限制范围
{
transform.Translate(Vector2.left* Time.deltaTime*5f);
}
if (Input.GetKey(KeyCode.RightArrow)&&transform.position.x<=8f)//右方向键
{
transform.Translate(Vector2.right* Time.deltaTime*5f);
}
这样也就实现了方块君的左右移动
但是方块君还不知足:光扭扭腰怎么行,我还得会飞,会时空折跃……教练我想学
卡密:滚犊子,我也想学,那就随便给你做一个“跳跃”吧!
懒惰是第一生产力,计算机图形学第一大定律——只要他看起来是对的,那么他就是对的,方块君的跳跃也可以用transform.Translate()进行模拟:
我们先定义两个状态:
public bool canJump = true, jumping;//是否可以起跳,是否正在跳跃
再定义一个浮空时间:可以根据个人喜好修改,如果是正无穷……恭喜方块君你会飞啦(当然原理其实不是这样的)
public float jumptime = 0.5f;
之后我们写一个跳跃函数!?怎么看起来这么辣鸡
void jump()
{
if (canJump)//如果能跳
{
canJump = false;//那么不能跳
jumping = true;//那么正在跳
jumptime = 0.5f;//那么重新设置跳跃时间
}
}
别急,真正的大头是要放在FixedUpdate()里面的:
if (transform.position.y <= -2f)//如果方块君在“地面”
{
canJump = true;//那么它可以再次起跳
}
if(Input.GetKey(KeyCode.UpArrow)){//如果按下上方向键
jump();
}
if(jumping){//如果正在跳
if(jumptime>0.375f){将时间分为三部分:上升,滞空,下降,比例理论上是1:2:1(当然你也可以按自己的喜好来)
transform.Translate(Vector2.up * Time.deltaTime * 8f);
}else if(jumptime<=0.15f&&jumptime>=0f){//这里是一个玄学的地方,本来应该是jumptime<=0.125f,但是这样会导致方块君回不到原来高度
transform.Translate(Vector2.down * Time.deltaTime * 8f);
}
jumptime -= Time.deltaTime;//计时器
}
if(jumptime<=0){//跳完啦
canJump = true;//恢复原来的设定
jumping = false;
}
那么我们还是对里面相关的东西进行解释:
·常数们:
由于我们做的只是一个单场景小游戏,所以很多功能还是使用常数效率更高,比如对移动距离的判定:
所以横坐标绝对值不超过8
·对于“跳跃”:
可以发现,如果一直按住上方向键,方块君的跳跃是有周期的,也就是说,一直按住该按键,呈现的是这样的一个函数图像
其中,y轴表示方块君跳起的高度,x轴表示时间,各位可以看一下方块君起跳的速度应该是8个单位每秒,在落地之后又可以再次起跳
我们通过计时器来进行这样的设计:
简单来说:一旦时间达到设定值,就可以执行一次操作,并且重设时间
所以,方块君的第一个愿望终于满足辣,接下来我们还会设计新操作让方块君可以射出子弹,拭目以待吧——当然对于大佬们根本不是什么问题吧……自己也要继续努力啊(懒得优化是病得治——虽然认真做项目的时候肯定会优化的辣)
啊啊啊不行写得好烂啊,求各位大佬可以指正一下啊啊啊
毕竟第一次写比较(专业?)的blog咩