unity吃豆人

吃豆人2d

脚本格式:脚本选中内容——Ctrl+k——Ctrl+f

准备

3d工程 改为2d工程:file——project setting——editor——default behavior mode

基础设置:file——build setting——player setting——公司名称、图标、分辨率

取消全屏、512*512、取消Dialog

导入资源 文件夹、包

  • audio音频
  • font(像素风字体)
  • sprites图片
  • Animation
  • Scripts

素材图片大小

  • 物体大小scale

  • 摄像机大小size——16

  • 素材文件 每单位像素点pixel per unit——改为8 、apply

坐标原点

迷宫左下角为原点:图片文件maze——pivot设置为bottom left

迷宫

墙壁:碰撞器box collider2d

宽度size为0.25的整数倍

方法:

  • 空物体父级下,放多个挂碰撞器的物体(每个墙体分开)

  • 迷宫物体上,挂多个碰撞器组件box collider2d

  • 编辑器扩张,读取Excel的值,代码生成多个碰撞器组件

  • 自动识别墙体。。

吃豆人动画

图片文件:

模式multiple

sprite editor

切割图片slice

按照格子切割cell count

自动切割会监测图片边缘

动画

选择多张图片,拖到面板

创建动画clip

新建文件夹Animations存放动画

windows——Animation查看

动画状态控制机windows——animator

添加clip

进入后默认向右移动

参数float- DirX,float- DirY

添加condition——单个条件,float类型 0.1

取消可以转换到自己

动画不融合transition duration为0

speed为0.8

像素游戏——不斜着移动

  • 从任何状态 转到上下左右移动动画
  • 进入
  • 退出

吃豆人移动

添加圆形碰撞器circle collider 2d——设置半径

添加刚体rigidbody2d——gravity设为0

创建脚本文件夹Scripts——创建脚本

移动方式:

  • 瞬移
  • 插值移动
    • Vector2.MoveTowards()保证速度不超
    • Vector2.Lerp()

移动方法:

  • 改变Transform
  • 物理移动 有刚体组件的物体rigidbody2d

Update调用:取决于fps帧率

FixedUpdate:物理帧

》PacmanMove

(有问题?碰到豆点动不了??)

public float speed=0.35f;//速度
private Vector2 dest=Vector2.zero;//移动的目的地

void Start()
{
    dest=this.transform.position;//游戏初始 留在原地 不动 (this可以省略)
}

void FixedUpdate()
{
    Vector2 temp=Vector2.MoveTowards(transform.position,dest,speed);//插值得到 要移动到dest位置的下一次移动坐标(当前位置,目标位置,速度)
    GetComponent<Rigidbody2D>().MovePosition(temp);//用刚体rigidbody2d设置位置
    
    if((Vector2)transform.position==dest)//必须先到达上一个dest的位置,才可以发出新的目的地设置指令
    {
        //键盘输入(箭头或者wasd) 检测目的地是否可以到达
    	if((Input.GetKey(KeyCode.UpArrow)||Input.GetKey(KeyCode.W)) &&Valid(Vector2.up))
    {
        dest=(Vector2)transform.position+Vector2.up;//强行转换类型
    }
    	if((Input.GetKey(KeyCode.DownArrow)||Input.GetKey(KeyCode.S)) &&Valid(Vector2.down))
    {
        dest=(Vector2)transform.position+Vector2.down;
    }
    	if((Input.GetKey(KeyCode.LeftArrow)||Input.GetKey(KeyCode.A)) &&Valid(Vector2.left))
    {
        dest=(Vector2)transform.position+Vector2.left;
    }
    	if((Input.GetKey(KeyCode.RightArrow)||Input.GetKey(KeyCode.D)) &&Valid(Vector2.right))
    {
        dest=(Vector2)transform.position+Vector2.right;
    }
        
        //动画状态机
        Vector2 dir=dest-(Vector2)transform.position;//移动方向
        GetComponent<Animator>().SetFloat("DirX",dir.x);//与animator中设置的参数相同
        GetComponent<Animator>().SetFloat("DirY",dir.y);    
    }    
}

private bool Valid(Vector2 dir)//检测目的地是否可到达 (位置增量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值