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

制作于2017.12.16

价格 免费

Sh里,加Box collider 2D,Width:45 Height:45 Size X: 28  Y:28,选中Is Trigger,,加Rigidbody 2D,且不启用重力。

Food里,加Box collider 2D,Width:40 Height:40 Size X: 28  Y:28,选中Tags,输入food标签

{

public float velocity=0.35f;

public int step;

private int x;

private int y;

private Vector3 headPos;

void Start()

{

  InvokeRepeating("Move",0,velocity);

x=0;y=step;

}

void Update()

{

 if(Input.GetKeyDown(KeyCode.Space))

{

CancelInvoke();

InvokeRepeating("Move",0,velocity-0.2f);

}

 if(Input.GetKeyUp(KeyCode.Space))

{

CancelInvoke();

InvokeRepeating("Move",0,velocity);

}

if(Input.GetKey(KeyCode.W)&&y!=-step)

{ gameObject.transform.localRotation=Quaternion.Euler(0,0,0);

 x=0;y=step;

 }

if(Input.GetKey(KeyCode.S)&&y!=step)

{

gameObject.tranform.localRotation=Quaternion.Euler(0,0,180);

 x=0;y=-step;

 }

if(Input.GetKey(KeyCode.A)&&x!=step)

{

gameObject.tranform.localRotation=Quaternion.Euler(0,0,90);

 x=-step;y=0;

 }

if(Input.GetKey(KeyCode.D)&&x!=-step)

{

gameObject.tranform.localRotation=Quaternion.Euler(0,0,-90);

 x=step;y=0;

 }

 

 void Move() 

 {

headPos=gameObject.transform.localPosition

gameObject.transform.localPosition=new Vector3(headPos.x+x,headPos.y+y)

}

private void OnTriggerEnter2D(Collider2D collision)

{

  if(collision.gameObject.CompareTag("Food"))

  {

  Destroy(collision.gameObject);

  FoodMaker.Instance.MakeFood();

}

}

[展开全文]

处理食物被吃掉并再生成。。

碰撞器更小一点。

辨别,加标签。

碰撞检测。

埋头干就完事了。

[展开全文]

isTrigger属性要打上勾,不会和别人碰撞,但是会记住谁撞的我,只勾上一个蛇头,别的不用勾了。

[展开全文]

invokerepeating(gameobject, delaytime, longtime)

food.transform.SetParent(foodHolder, false);

private static FoodMake _instance;
    public static FoodMake Instance
    {
        get
        {
            return _instance;
        }
    }

 

 

 

[展开全文]
  • 2D碰撞器相交也会触发OnTriggerEnter() 此时需要将碰撞器面积设置得稍小一些。
[展开全文]

我用和你一样做的方法,但是我的触发检测不检测

 

[展开全文]

食物吃掉之后在生成

把蛇头添加box collider 

istrigger勾选

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

ontriggerenter2d

 

[展开全文]

1.为蛇头,食物添加碰撞器

2.碰撞器需要比蛇头本体,食物本体要小一圈,否则擦过时会发生碰撞

3.蛇头IsTrigger勾上,碰撞器变成触碰器,碰撞器与碰撞器间不会有撞击效果

 食物不勾

 

4.蛇头添加刚体,不启用重力(重力比例=0)

 

5.为food添加tag:

监视面板-tag-添加tag-加号-“food”

返回监视面板-tag-标签设为food

 

6添加吃到食物的代码

1)蛇头脚本中添加函数

    private void OnTriggerEnter2D(Collider2D collison)
    {
        Destroy (collison.gameObject);
        FoodMaker.Instance.FoodMake ();

    }

 

 

 

2)在食物脚本中创建一个单例模式使得另外一个脚本可以调用该脚本内的函数

    private static FoodMaker _Instance;
    public static FoodMaker Instance
    {
        get{return _Instance; }
    }

    void Awake()
    {
        _Instance = this;
    }

将MakeFood函数公开

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]

 

 

给食物添加标签,和碰撞器。

在蛇头添加2D碰撞器,自己手动设置碰撞器 挂上刚体,要比图片小一点,istrigger选上。

给蛇头添加触发检测方法,销毁食物,

 

单例模式

static

get

 

[展开全文]

is Trigger 勾上后不会被其他碰撞器挡住,会检测碰撞

碰撞的两边只能有一个勾is Trigger

勾上 is Trigger的碰撞器称为触发器

用private void OnTriggerEnter2D来调用触发器函数

碰撞的两边只要有一个挂刚体就可以了,不用两边都挂

蛇头上挂刚体

[展开全文]

碰撞销毁再生成

给蛇头填collider 再填size 精准碰撞 小于30 trigger(不会和别人发生碰撞 但会检测谁撞到了我)(两边只能钩一个)

刚体 给食物+Tag

On。。。方法  括号中间无逗号!!! 两种识别标签的方法只记一种

怎么通知Maker呢

在Maker中创建一个静态的单例模式 可以直接从类名来访问它

再用一个变量 访问get 直接  return _instance给他!把它转变为私有

再在sh下加入访问Instance 记得把Makefood 改成public

再在Awake()里给他_instance里赋值this(必须赋值)

[展开全文]

碰撞器要小一圈

两个物体必须都要有2D碰撞器(注意碰撞器是否一样)

碰撞器的判断要放在蛇头的身上

 

[展开全文]

授课教师

SiKi学院讲师

课程特色

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