1.预制体-profob
unity中一个很重要的概念(个人认为)在开发当中当我们需要创建多个相同的对象时,或者说他们的属性,所包含的组件的类型是相似的。我们就可以用预制体来实现。比如游戏中的npc,贪吃蛇中随机生成的食物对象。比如下面这段代码
int index=Random.Range(0,foodSprites.Length);
GameObject food = Instantiate(foodprofab);
food.GetComponent<Image>().sprite = foodSprites[index];
food.transform.SetParent(foodholder,false);
foodprofab是一个预制体,看名字我可以知道是关于食物的预制体。预制体创建出来后就是一个对象,它的Image属性中的sprite属性(就是图片)通过foodSprites[index]来设置。实现每次生成图标的随机性就是靠上面的Random.Range(0,foodSprites.Length);
2.获取公共的函数或者属性。
比方说我控制蛇移动的逻辑写在Snake_move这个脚本中,但我foodMaker也想调用他我们可以采取以下方法。在Snake_move中声明
private static snake_move _instance;
public static snake_move Instance
{
get
{
return _instance;
}
} void Awake()
{
_instance = this;
}
这样在其他地方就可以用snake_move.Instance.move()来获取了。
3.物理系统和刚体以及触发器
unity当中有自带的物理系统,Rigidbody 2D
因为是2d所以后面是2D,我们可以看到里面有一个Gravity Scale这是重力,这是系统自带的。会给一个向下的重力,像一些跳跃类的游戏需要这样的重力设置。我们做一个平面游戏像是贪吃蛇,推箱子这种一般把它变成0就好了。
碰撞是一个重中之重的概念,物体的交互,由触发引申而来的判定都离不开碰撞。所以我们要添加刚体组件,在unity中物体的碰撞实则是和刚体碰撞产生的。
刚体组件是什么呢 this
刚体的碰撞是有默认的逻辑的,也就说我我们什么都不设置。在场景当中两个刚体相撞时也会和现实中相撞带来的一样。它们的位移将会发生变化。看到那个is Trigger了嘛。这就是触发器,勾选了以后我们可以在设置碰撞触发的逻辑(不是所有都要物理的碰撞来的),比如和npc的交互,我们不就是碰到npc后触发了聊天或者购买物品的逻辑吗。我们下面看一个实例
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("food"))
{
Debug.Log("触发器触发了1次");
Destroy(collision.gameObject);
mainui.Instance.updateUI(); Grow();
food_maker.Instance.Makefood();
Debug.Log("识别出来撞到啦,这是吃掉后的生成");
}
else if(collision.gameObject.CompareTag("body"))
{
Die();
Debug.Log("撞到自己身体了");
}
首先处理这些触发器的事件都是在rivate void OnTriggerEnter2D(Collider2D collision)这个函数中实现的。一个场景中有很多个触发器还有很多个判断。我们怎么知道什么时候该判断哪个触发事件呢。
collision.gameObject.CompareTag("food")我们可以用这个tag来进行识别,
我们看到每个对象都可以设置它的tag,我们也就用这个来实现。
Destroy(collision.gameObject);像这样,我们直接可以通过刚体找到他的物体,然后对物体进行操作。