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

制作于2017.12.16

价格 免费

食物随机生成。

上下11.左14.右21.

 

 

SetParent.false.

 

[展开全文]

[任务13:10-第一个食物的随机生成]

导入(老师是说加上)UnityEngine.UI

要在最开头

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

加上using UnityEngine.UI;

就是这样

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

下面附上本节课的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class FoodMaker : MonoBehaviour {
    public int xlimit = 20;
    public int ylimit = 11;
    public int xoffset = 8;
    public GameObject foodPrefab;
    public Sprite[] foodSprites;
    private Transform foodHolder;

    private void Start()
    {
        foodHolder=GameObject.Find("FoodHolder").transform;
        MakeFood();
    }

    void MakeFood()
    {
        int index = Random.Range(0, foodSprites.Length);
        GameObject food = Instantiate(foodPrefab);
        food.GetComponent<Image>().sprite = foodSprites[index];
        food.transform.SetParent(foodHolder, false);
        int x = Random.Range(-xlimit + xoffset, xlimit);
        int y = Random.Range(-ylimit , ylimit);
        food.transform.localPosition = new Vector3(x * 30, y * 30, 0);

    }

}
 

[展开全文]

int  xlimit=21,;int ylimit=11;

int xoffset =7;

Transform FoodHolder;

GameObject food;

Sprite[]  footSprites;

int index = Random.Range(0,foodSprite.

length);

GameObject foood= Instantiate(food);

[展开全文]

 

 

 

 

1.食物注意:生成的位置需要让蛇能够吃到,所以以蛇头的长宽做网格,生成在有效的网格内

 食物需要生成在 下-6*30,上6*30,左7*30,右11*30

 

 

2.制作食物的prefab,Image,设置合适大小

 

3.创建归类用的空物体,FoodHolder

注意:在UI中,如果创建一个归类用的空物体,那么最好将大小锚点设置到父物体四个角上

 

3.添加脚本FoodMaker

//上下左右食物生成坐标的限制

public int xRightLimit = 11;

public int yLimit = 6;

public int xLeftLimit = 7;

public GameObject food;

//图片数组,Sprite用来存储图片

public Sprite[] foodSprites;

 

private Transform foodHolder;

 

void Start()

{

  foodHolder = GameObject.Find("FoodHolder").transform;

MakeFood();

}

 

//生成条件:开始生成一个,被吃掉生成一个

void MakeFood()

{

    int index = Random.Range(0,foodSprites.Length);  

 

 

//将食物实例化出来(面板拖出来) 

    GameObject food = Instantiate(foodPrefab);

 

//

food.GetComponent<Image>().sprite = foodSprites[Index];

 

 

//食物归类到父物体,且不调整food的transform

   food.transform.setParent(foodHolder,false)

 

 

//随机位置

int x=Ramdom.Range(-xLeftLimit,xRightLimit );

int y = Ramdom.Range(-yLimit,yLimit);

food.transform.localPosition = new Vector(x*30,y*30,0);

 

 

}

 

4.创建一个空物体,专门用来挂脚本,然后将FoodPrefab赋值,foodSprites全选图片拖住赋值

 

 

 

 

 

 

 

 

 

 

[展开全文]

public int xlimit= 21;
public int ylimit= 11;
public int xoffset= 7;
public GameObject foodprefab:
public Sprite[] foodsprites;
private Transform foodHolder;
 
void Start()
foodHolder=GameObject.Find("FoodHolder").transform; MakeFood();

void MakeFood(){
int index = Random.Range(0,foodsprites.Length);
GameObject food = Instantiate(foodPrefab);

food.GetComponent<Image>().sprite=foodsprites[index];


food.transform.SetParent(foodHolder,false);
int x= Random.Range(-xlimit +xoffset,xlimit);
int y = Random.Range(-ylimit,ylimit);
food.transform.localPosition = new Vector3(x* 30,y* 30,0);

}

[展开全文]

食物的随机生成

食物生成是要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()实例化

 

[展开全文]

 // C# => public void SetParent(Transform parent, bool worldPositionStays); 
        //设置实例物体的父物体.
        //这个方法是把一个对象找个父级,
        //如果worldPositionStays为true,那么该对象会保持世界坐标不变,相对于父级位置、缩放和旋转修改该对象,使得该对象保持与之前世界坐标空间一样的位置,旋转和缩放。
        //如果为false那么该对象会保持局部坐标不变。 


        food.transform.SetParent(foodHolder, false);

[展开全文]

食物要生成在Step范围之内

计算食物生成范围

[展开全文]

食物随机生成 step的整数倍  从000到上端 11步

-11~11(*30)      21步右 左13

变量  上下左右限制  预制体公共 foodHolder transform

只需一个预制体 到时候直接填图片即可 (同质)

图片数组

方法 

1start里找到 foodHolder.transform

2存下索引 随机遍历  实例化  坐标随机  再赋给food vector3坐标  这样的话就不用在Instantiate里写坐标了

3再拿到food身上的image组件。sprite=数组 索引

4加上unityUI的namespace

最后在start里调用makefood 还要专门找一个物体来放这个脚本

而之前是用数组 再随机?

吃掉再生成

再创建一个空物体?锚点 四周定位 把创建出来的食物放在他的子物体 SetParent(这个可以说是很常见了 flase 不然会自动缩放

[展开全文]

在ControPanel下建Image,Width:40,Height:40,再写脚本FoodMaker

{

 public int xlimit=21;

public int ylimit=11;

public int xoffset=7;

public GameObject foodPrefab;

public Sprite[] foodSprites;

private Transform foodHolder;

void Start()

{

foodHolder=GameObject.Find("FoodHolder").transform;

MakeFood();

}

 

void MakeFood()

{

 int index=Random.Range(0,foodSprites.Length);

GameObject food=Instantiate(foodPrefab);

food.GetComponent<Image>().sprite=foodSprites[index];

food.transform.SetParent(foodHolder,false);

int x=Random.Range(-xlimit+xoffset,xlimit);

int y=Random.Range(-ylimit,ylimit);

food.transform.localPosition=new Vector3(x*30,y*30,0);

 

}

}

创建一个GameObject,重命名ScriptsHolder,将Food Maker放里,把Icon文件里的Food放入 Food Sprites。

[展开全文]