zoukankan      html  css  js  c++  java
  • unity的Tilemap学习笔记

      1,如果要实现当tilemap里面的格子与其他的对象发生碰撞后,消除碰撞的那个格子,使用如下代码。

    void OnCollisionEnter2D(Collision2D collision)
        {
            Vector3 hitPosition = Vector3.zero;
            if (tilemap != null && tilemapGameObject == collision.gameObject)
            {
                foreach (ContactPoint2D hit in collision.contacts)
                {
                    hitPosition.x = hit.point.x - 0.01f * hit.normal.x;
                    hitPosition.y = hit.point.y - 0.01f * hit.normal.y;
                    tilemap.SetTile(tilemap.WorldToCell(hitPosition), null);
                }
            }
        }
    

      其中,tilemap就是发生碰撞的tilemap对象,代码来自,unity的github https://github.com/Unity-Technologies/2d-techdemos/tree/2018.2

    2,如何给unity的tileMap里的cell添加特定的属性。

    做法就是写一个类,继承至TileBase,然后这个类你可以写任何你可以自定义的函数。

    但值得注意的是,这里创建的是一个模板,我们依然无法让2个一样模板的tile状态不同。

    代码如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Tilemaps;
    
    [CreateAssetMenu]
    public class MarkTile : TileBase
    {
        public string markType = "";
        public Sprite look;
    
        public override void GetTileData(Vector3Int position, ITilemap tilemap, ref TileData tileData)
        {
            tileData.sprite = look;
            base.GetTileData(position, tilemap, ref tileData);
        }
    }
    

      加完之后,就可以在游戏界面的Assets--create 里面看到这个叫做markTile的资源创建选项了。

    tileData.sprite = look;
    

      这句很关键,是可以让你设置你这个自定义的tile在地图上的显示图片的。

  • 相关阅读:
    Hibernate保存方式的区别
    活动图
    Apache新增站点配置
    Apache安装
    360度全方位沟通向上沟通
    时间转换
    PostgreSQL 9.2中将引入生成JSON数据功能
    Delphi 读取dbgrid中的选中一行的代码及定位函数
    彻底解决Delphi的DBGrid控件鼠标滚轮问题(转)
    DB2与PostgreSQL开发的异同
  • 原文地址:https://www.cnblogs.com/beatless/p/11623709.html
Copyright © 2011-2022 走看看