今天视频讲解的有很乱,我觉得他可能用的代码不对,我自己找了一个用的挺好的,我在这里写一写
void FixedUpdate()
{
float moveHorizontal=Input.GetAxis(“Horizontal”);
float moveVertival=Input.GetAxis(“Vertival”);
Vector2 movement=new Vector2(moveHorizontal,moveVertival);
Getcomponent《Rigidbody2D》.velocity=movementspeed;
}
这样我觉得走的不错,但是有一个问题如果视频中没有讲的话我肯定没有想到,就是玩家不能斜着走,为了防止斜着走
if(moveHorizontal>0)
{
moveVertival=0;
}
很有意思的写法,意思就是当横向有输入的时候,竖向归零
我刚刚又试了一下,我觉得我代码带来的效果就是太快了,有点影响我游戏体验
但是按照视频上的代码写呢,因为他写的是rigidbody.MovePosition(Vector2.Lerp(transform.position,targetPos,smoothingTime.deltaTime));
这样每帧都会移动因此会移动很多次,距离就很远
为了更正这个错误,我们给玩家每次移动之后都要有一个休息的时间, 讲真我这个休息时间没有搞懂我自己也不想再搞了,我把这一期写完我就不理你了这个游戏实在无聊提不起我的兴趣来。
玩家移动结束之后到了玩家接触wall然后攻击wall,既然提到了墙我们首先给墙加上碰撞盒然后给墙加上脚本,脚本里面是墙的血量和墙收到攻击之后受伤图片更换,其实这里面的东西在小鸟哪里都学过,但是现在用起来不太熟练,就比如destroy掉墙体是destroy(gameObject),但是我有点忘记了为什么是gameObject,gameObject是脚本挂载的物体,实例化不用自己实例化。
更换图片首先获取到图片实例
GetComponent《SpriteRenderer》().sprite=damageSprite;
首先想要强调的是组件是SpriteRenderer而不是Sprite,更换图片直接.sprite就可以更换。
然后就是碰撞检测,用的是Linecast
意思就是发射射线看有没有碰撞盒,但是因为玩家本身就有碰撞盒,因此要先将玩家身上的碰撞盒禁用掉,然后再进行碰撞检测:
RaycastHit2D hit = Physics2D.Linecast(targetPos, targetPos + new Vector2(moveHorizontal, moveVertical));
因为这里移动用的是movePosition,就是检测targetPos和将要到达的地方的地方之间有没有碰撞盒
如果hit.transform==null则将targetPos += new Vector2(moveHorizontal, moveVertical);
否则要判断碰撞的到底是外墙还是围墙,如果是围墙的话则进行攻击
这里验证了我上次的一个猜想,就是当是碰撞体的时候,不管是不是同一个脚本,方法都可以随便传递
hit.collider.SendMessage("TakeDamage);
然后在wall脚本里有一个TakeDamage方法,来更换图片和销毁物体。
拾荒者2D游戏——主角移动
最新推荐文章于 2022-06-10 13:53:41 发布