一
梦想中的游戏终于写出来一点了(其实是扒别人的游戏)
刚刚看了一下我之前写的unity博客,简直太沙雕了,写的什么玩意。
那么就由本大佬,继续写吧。哇卡卡卡卡!
地图方面的话,进展还不是很大,网上有个同样的大佬写了一个脚本,非常适合我,
大概就是通过一个像素的图片,通过这个图片上不同的颜色替换成贴图生成地图,
大佬视频的传送门http://www.manew.com/thread-101206-1-1.html,感谢大佬。
这个是快速生成地图的packagehttps://download.youkuaiyun.com/download/cyrus_c/10650142
二
player人物移动方面,静止时播放一个静止的动画。
2.1
动画创建
把一个动画的几个图片拖动到Hierarcha面板里,就会提示创建一个 Animation,保存起来。
向各种其他方向移动,同样是创建动画。
动画与动画关联起来需要用到,window->Animator的面板。这个东西的学名好像叫做状态机。
、
就这个样子,右键上面的小方块,出现一个菜单选择Make Transition 然后把线连到需要的的方。
左边的Parameter里添加一个参数,参数类型多种,跟据需要创建。然后点击这个白色的连接线,
右边的面板上Conditions,点+号,添加状态变更条件,然后在script代码里更改这个参数就可以变动画状态了。
三
我的player人物添加了RigidBody2d刚体,BoxCollider2d碰撞盒子。刚体是为了物体受重力可以下落。碰撞盒子当然是为了
碰撞检测。
RigidBody2d:
这里边的BodyType属性默认值Dynamic是受重力影响,其他两个忘记了,自己百度(嘿嘿)。
player移动的时候不要用改变transform来移动(当然我也是看其他大佬这么说的,具体原因我也不知道)。
刚体组件的MovePosition函数用来移动刚体。
然而我的player下落的时候不垂直下落。
这里有一个属性 freezeRotation = true; //冻结旋转 来解决这个player走在地面边缘倾斜的问题。
Collider2d:
碰撞盒子的Is Trigger属性是触发器,勾选这个后,一个物体进入另一个物体的碰撞盒子会触发
void OnTriggerEnter2D(Collider2D other)这个函数,具体把这个触发器放在哪个物体上大家尝试一下就懂了。
可以用这个触发器做物品拾取,上代码!我这段代码是被拾取物体的script的勾选也是勾选的被拾取物体的Is Trigger,
player并没有勾选IsTrigger
private void OnTriggerEnter#D(Collider2D other)
{
if (other.tag == "player") //判断触碰的物体的tag标签,是不是player
{
gameObject.SetActive(false); //注销当前物体
}}
tag标签就是选中物体后右边的Inspector面板上上第二行的Tag,默认值是Untagger。
写这段代码的时候我才知道,gameObject可以直接获取到这个script挂载的物体。
四
我的当作背景的sprite挡住了我的player。
这里的解决办法是sorting layer属性。给不同的物体设置不的sorting layer来让他们的的渲染层级不同。
也就是谁先渲染,谁后渲染。sorting layer位置越靠后的越先渲染。
五
在游戏中我想获取角色player脚下的砖块,用来更改这个砖块的贴图sprite。解决办法是射线检测。
boxCollider.enabled = false;
RaycastHit2D hit = Physics2D.Linecast(strat, end);
boxCollider.enabled = true;
if (hit.transform != null)
{
Block dq = hit.transform.GetComponent<Block>() as Block;//判断贴图
if (dq.render.sprite == render.sprite)
{
Debug.Log("成功");
}
}
大概就是这样获取到我想要的坐标的物体的sprite。
就这样吧,累死啦。
一点一点完成这个游戏让我快乐。
2018.9.12 19:17更新
发现bug 我的player总是在水平方向走着走着就卡住了,原因是player的碰撞盒子BoxCollider2D是方形的,需要给属性
EdgeRadio 设置为一个小数,让碰撞盒子有一个弧度的角