2015-04-15 3 views
1

Я хочу зарегистрировать динамические переменные C# в движке сценариев Lua.Зарегистрируйте динамические переменные C# в Lua

Я попробовал (пример :) luaVM["PlayerHealth"] = gameValues.PlayerHealth. Как и ожидалось, переменная, по общему признанию, добавляется в таблицу глобальной переменной, но во время выполнения сценария Lua она сохраняет свое начальное значение, например. 100. Так что я могу только обучать двигателю разные игровые значения один раз перед выполнением скрипта.

Но я хочу, чтобы двигатель знал текущее значение gameValues.PlayerHealth во время выполнения скрипта, так как PlayerHealth естественно изменяется.

Я мог бы зарегистрировать функцию, которая возвращает текущее значение, но это выглядит своего рода неловко:

if (PlayerHealth() == 50) then ... end (looks stupid) 

Вместо:

if (PlayerHealth == 50) then ... end (looks cool) 

Я действительно не знаю, что искать, так что помочь будет очень признателен. Не стесняйтесь спрашивать все, что вам нужно знать.

+0

Глобальная среда представляет собой таблицу в формате lua 5.1, поэтому вы можете использовать любые трюки метаданных, которые вы хотите использовать для прокси-поиска и т. Д. Подобные трюки возможны с использованием '_ENV' в lua 5.2 и 5.3. –

+1

Неважно, как выглядит ваш код, если он логически звучит и управляем. – hjpotter92

+0

Я передал объект Lua в другой поток, который обновляет такие переменные: – chris2k15

ответ

0

Кажется, вы можете передать объект Lua на фоне потока и обновить переменные оттуда:

public void RefreshLuaVariables(Lua luaVM) 
    { 
     while (true) 
     { 
      try 
      { 
       luaVM["PlayerX"] = vsc.PlayerX; 
       ... 

       luaVM["TargetX"] = vsc.TargetX; 
       ... 

       luaVM["SystemDate"] = DateTime.Now.ToString(); 
      } 
      catch (Exception e) 
      { 
       Print(e.Message); 
      } 
      Thread.Sleep(100);    
     } 
    } 

Но это может привести к случайным ДТП.

Смежные вопросы