20675人加入学习
(123人评价)
Unity初级案例 - 贪吃蛇(Unity2017.2.0)

制作于2017.12.16

价格 免费

1:移动方式,继承上一个位置,最后一个移动到第一个(改颜色)

2:吃东西,加到最后一个位置,看颜色

3;gu

[展开全文]

Snake   Disabled

Display Besolution Dialog

 

[展开全文]

 完成换肤

记录的文件名,通过加载名称

使用resources文件夹,把需要加载的图片复制到resources文件夹中

使用一个方法去加载://通过resources.load

resources.load()

foreach(遍历父物体的所有的子物体  )

 

[展开全文]

 让蛇可以通过边界进行传送(撞自己和边界都会死亡)然后发生粒子特效  

 

[展开全文]

处理蛇身的移动方法二:

void move()//移动函数

{

headpos用来记录蛇头的位置

然后再实例化出来

gameobject .transform.localposition=new vector3(上次蛇头的x位置加上移动x,上次的蛇头y的位置加上移动的y,蛇头的z位置);

如果蛇身的长度大于零

 {//思路:让最后的蛇身往前挪一个,一直到接近原来蛇头的那一个,移动到新的蛇头位置的后面

for(i=bodylist.count-2;i>=0;i--){

bodylist[i+1].localposition=bodylist[i].localposition

}

bodylist[0].localposition=headpos;

}

}

[展开全文]

食物吃掉之后在生成

把蛇头添加box collider 

istrigger勾选

添加刚体(不要使用重力)

ontriggerenter2d

 

[展开全文]

食物的随机生成

食物生成是要step的倍数

public int x=21;

public in y=11;

public in y=11;

public gameobject foodprefab;

public sprite[] foodsprites;

 

void makefood()

{

int idex=random.range(0, foodsprites.lenth)

}

food .getcomponent

instantiate()实例化

 

[展开全文]

为什么不直接使用Horizontal,Vertical来控制上下左右移动?

float h = Input.GetAxis("Horizontal");      //前后移动
        transform.Translate(Vector3.right * h * Time.deltaTime * 10f);
        float v = Input.GetAxis("Vertical");      //上下移动
        transform.Translate(Vector3.up * v * Time.deltaTime * 10f);
四元数.旋转

gameObect.transform.localRotoin=Quaternion.Euler(0,0,180);//向后

gameObect.transform.localRotoin=Quaternion.Euler(0,0,90);//向右边

gameObect.transform.localRotoin=Quaternion.Euler(0,0,-90);//向左边

代码加速

if(input.Getkeydown(keycode.space)

{

cancelinvoke();

invokerepeat()

}

 

[展开全文]

制作蛇头移动

image

创建脚本:snakehead

public float  vlocity=0.35f;//速度

public int step;

private vecto3 headpos;

private int x; 

private int y;//下一步要去的增量

void start()

{

invokerepete("传入要调用的函数方法",隔多久调用,速度)//重复调用

}

void update ()

{

}

 

void  move()

{

gameObect.transform.localpostion=new vector3( );

 

 }

 

 

[展开全文]

边界模式

invoke repeat (隔一段时间)

蛇身有两种移动方式:

第一种:让后面的东西继承上一个的位置

第二种:只挪开蛇屁到蛇脖子,后面的身子继续跟随(颜色会会混乱)不采用

吃东西:

蛇头碰到食物(蛇身在后面加)

死亡

自由模式

 

 

 

[展开全文]

所有的移动都是对头而言的。碰撞盒

实现功能:移动头和身、吃食物加长身体和销毁事物

transfrom 直接控制改变值

enke 一点点移动的目的

2种移动方法:每个物体都移动到它的前一个位置(使用第一种因颜色不同具有奇偶性);把最后的骨头移动到头后的首位 其余的不动

吃东西:往最后面加

死亡:撞到边界和蛇身

跳到上一次蛇头的位置 利用transform

[展开全文]

1、蛇身预制体,添加box collider,设置尺寸

2、list集合存储蛇身的transform组件

3、生成蛇身的函数:

  • 三元表达式,,确定新生成蛇身的
  • 设置蛇身图片
  • 设置蛇身的父物体
  • 更新list集合
[展开全文]

image与canvas对齐方法:右边的边框按alt后选最后对齐

锚点和四个点的关系保持相对静止

[展开全文]

1、头的方向问题,要与step一致,比如;按W时,step不能是负的

[展开全文]

Unity中Invoke 和 InvokeRepeating的区别

Invoke() 方法是 Unity3D 的一种委托机制

如: Invoke("Test", 5);   它的意思是:5 秒之后调用 Test() 方法;

使用 Invoke() 方法需要注意 3点:

1 :它应该在 脚本的生命周期里的(Start、Update、OnGUI、FixedUpdate、LateUpdate)中被调用;

2:Invoke(); 不能接受含有参数的方法;

3:在 Time.ScaleTime = 0; 时, Invoke() 无效,因为它不会被调用到

Invoke() 也支持重复调用:InvokeRepeating("Test", 2 , 3); 

这个方法的意思是指:2 秒后调用 Test() 方法,并且之后每隔 3 秒调用一次 Test() 方法

还有两个重要的方法:

  1. IsInvoking:用来判断某方法是否被延时,即将执行
  2. CancelInvoke:取消该脚本上的所有延时方法

 

[展开全文]

授课教师

SiKi学院讲师

课程特色

图文(1)
视频(23)
下载资料(1)