小编Sus*_*ary的帖子

如何加载具有相同名称的资产,但是将其放在assetbundle的不同文件夹中?

我正在使用unity5.3.3,我想知道如何从资产包中获取资产,其名称相同但保存在不同的文件夹中.我的AssetBundle文件夹按以下方式设置:

 MyAssets -> this Folder is packed as an AssetBundle
  -ThemeOne(folder)
     - Logo.png
  -ThemerTwo(folder)
     - Logo.Png
Run Code Online (Sandbox Code Playgroud)

当我这样做AssetBundle.LoadAssetAsync("Logo").我结束了在第一个(ThemeOne)文件夹中获取徽标.那么如何访问其他文件夹中的文件?

我刚刚创建了一个示例项目,以便您可以查看它.检查Folder Assets\AssetBundleSample\SampleAssets\Theme和脚本LoadAssets

unity-game-engine assetbundle unity5

5
推荐指数
1
解决办法
2921
查看次数

使用线程和 EventWaitHandle 的生产者/消费者模式

我想这是一种代码审查,但这是我对生产者/消费者模式的实现。我想知道的是,是否会出现ReceivingThread()orSendingThread()方法中的 while 循环停止执行的情况。请注意,它EnqueueSend(DataSendEnqeueInfo info)是从多个不同线程调用的,我可能无法在这里使用任务,因为我肯定必须在单独的线程中使用命令。

private Thread mReceivingThread;
private Thread mSendingThread;
private Queue<DataRecievedEnqeueInfo> mReceivingThreadQueue;
private Queue<DataSendEnqeueInfo> mSendingThreadQueue;
private readonly object mReceivingQueueLock = new object();
private readonly object mSendingQueueLock = new object();
private bool mIsRunning;
EventWaitHandle mRcWaitHandle;
EventWaitHandle mSeWaitHandle;

private void ReceivingThread()
{
    while (mIsRunning)
    {
        mRcWaitHandle.WaitOne();
        DataRecievedEnqeueInfo item = null;
        while (mReceivingThreadQueue.Count > 0)
        {
            lock (mReceivingQueueLock)
            {
                item = mReceivingThreadQueue.Dequeue();
            }
            ProcessReceivingItem(item);
        }
        mRcWaitHandle.Reset();
    }
}

private void SendingThread()
{
    while (mIsRunning)
    {
        mSeWaitHandle.WaitOne(); …
Run Code Online (Sandbox Code Playgroud)

c# multithreading producer-consumer blockingcollection tpl-dataflow

4
推荐指数
1
解决办法
5643
查看次数

在两个c#程序集之间共享代码

1)我有一个名为SocketServer的项目,其中有一个Class Room,这个项目是一个编译的exe,也可以编译为DLL.

2)在另一个名为MyGame的项目中,有一个名为MyAwesomeGame的类,我需要在其中执行以下操作:

public class MyAwesomeGame
{
    public Init(Room room)
    {
        //I can get data from Room
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,MyGame Project被编译成MyGame.DLL,并放置在相对于SocketServer.exe的某个地方,SocketServer.exe在运行时加载MyGame.DLL并实例化MyAwesomeGame类并调用Method Init并将room作为参数传递.代码是SocketServer项目是这样的:

public class Room
{
     private InstantiateGameRoom()
     {
          //Load External MyGame.DLL Assembly 
          Task<MyAwesomeGame> task = Task<MyAwesomeGame>.Factory.StartNew(() => (MyAwesomeGame)Activator.CreateInstance(classType, new object[] { this }));
          MyAwesomeGame instance = task.result;
          instance.init(this);
     }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是我如何能得到类的参考房间在MyGame项目?我应该添加我的SocketServer项目的引用吗?如果我这样做,它会不会被我的MyGame.dll编译?

ps:我还打算将socketserver.dll作为API分发给第三方用户.

.net c#

3
推荐指数
1
解决办法
251
查看次数