初入unity开发的一些感想(二)

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);像这样,我们直接可以通过刚体找到他的物体,然后对物体进行操作。

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值