예제 #1
0
    private void onLeaveWorld(Entity entity)
    {
        Debug.LogFormat("World::Entity(id={0},class={1}) leave world.", entity.id, entity.className);
        EntityUnityComponent component = null;

        if (!_entityDict.TryGetValue(entity.id, out component))
        {
            return;
        }
        if (entity.renderObj == null)
        {
            return;
        }
        if (component == null)
        {
            //Debug.LogErrorFormat("Entity资源加载后,竟然没有EntityUnityComponent!,entityId={0}, className={1}", entity.id, entity.className);
            return;
        }
        _entitySynchronizerDict.Remove(entity.id);

        if (OnEntityLeave != null)
        {
            OnEntityLeave(entity.id);
        }
        _entityDict.Remove(entity.id);
        _entityList.Remove(component);
        UnityEngine.GameObject.Destroy((UnityEngine.GameObject)entity.renderObj);
        entity.renderObj = null;
    }
예제 #2
0
    public EntityUnityComponent FindEntity(int entityId)
    {
        EntityUnityComponent r = null;

        if (_entityDict.TryGetValue(entityId, out r))
        {
            return(r);
        }
        return(null);
    }
예제 #3
0
    void OnEntityResLoaded(string resName, string resPath, UnityEngine.Object resObject, System.Object userData)
    {
        IGameObject go     = userData as IGameObject;
        Entity      entity = userData as Entity;

        if (go == null || entity == null)
        {
            throw new Exception("World::OnResLoaded: userData cannot transfer to IGameObject or Entity");
        }
        if (KBEngineApp.app.findEntity(entity.id) == null)
        {
            Debug.LogWarningFormat("World::OnEntityResLoaded:发现entity已经不存在,则不需要加载资源了");
            return;
        }
        float y = entity.position.y;
        //if (entity.isOnGround)
        //	y = 1.3f;
        Vector3    pos       = new Vector3(entity.position.x, y, entity.position.z);
        Quaternion rotation  = Quaternion.Euler(EngineUtils.EngineDirectionToUnity(entity.direction));
        GameObject renderObj = GameObject.Instantiate(resObject, pos, rotation) as GameObject;

        renderObj.name = entity.className + "_" + entity.id;
        //该方法会由Entity的实现类去完成Unity相关组件的添加和初始化
        go.SetRenderObj(renderObj);
        var synchronizer = renderObj.GetComponent <BaseSynchronizer>();

        if (synchronizer != null)
        {
            synchronizer.SetDestPosition(entity.position);
            synchronizer.SetDestDirection(EngineUtils.EngineDirectionToUnity(entity.direction));
            synchronizer.SpaceID = KBEngineApp.app.spaceID;
            _entitySynchronizerDict.Add(entity.id, synchronizer);
        }



        EntityUnityComponent component = null;

        if (entity.isPlayer())
        {        //如果是玩家自己,需要先disable一下,等待地形完成加载
            _playerEntity = renderObj.GetComponent <EntityUnityComponent>();
        }
        component = renderObj.GetComponent <EntityUnityComponent>();

        if (component == null)
        {
            Debug.LogErrorFormat("Entity资源加载后,竟然没有EntityUnityComponent!,entityId={0}, className={1}", entity.id, entity.className);
            return;
        }
        _entityList.Add(component);
        _entityDict.Add(entity.id, component);

        if (OnEntityEnter != null)
        {
            OnEntityEnter(component);
        }

        if (entity.isPlayer())
        {
            if (_terrain != null)
            {
                FinishMyselfLoadTask();
            }
        }
    }
예제 #4
0
 void OnMyselfEntered(EntityUnityComponent entity)
 {
     _btn_hello.gameObject.SetActive(true);
 }