金庸3DUnity重置入门系列文章
金庸3dUnity重置入门 - lua 语法
金庸3dUnity重置入门 - UniTask插件
金庸3dUnity重置入门 - Cinemachine 动画
金庸3dUnity重置入门 - 大世界实现方案
金庸3dUnity重置入门 - 素材极限压缩
(部分可能放到付费博客)
2022年底~2023年初
2021年中开始的项目,到现在只要从Github下载,即是完全可运行版本,虽然整个项目有点大,素材什么的总共 几个G吧,但还是很靠谱的一个项目,稳定,迭代足够
开头动画比较复杂,只需要修改 lua ”脚本“
个人不建议新手学这套Lua,真正实战的Lua语法和应用可完全是2回事,
就好像少林长拳和九阳真经练到9重的区别。
练十年长拳真的只能强身健体,成了火头工或者扫地僧
一些基本命令所在目录, BuildResource/Lua
一些事件、故事脚本所在目录, Mods/JYX2/Lua
修改,开头智冠动画 ka691”脚本“:
--ka691.lua
----------------------------
SetRoleFace(1);
jyx2_Wait(2.4) --等待2.4秒后再播放黑屏幕,
-- jyx2_SetTimelineSpeed(3); --播放速度X3
-- jyx2_PlayTimeline("[Timeline]ka691_小虾米居_醒来", 0, false);
-- jyx2_Wait(1);
-- Talk(0, "啊!头好痛呀!是不是最近K书K太凶了,所以有点恍惚了……我记得我正在玩“金庸群侠传”啊!怎么突然就睡着了。管他的,我得赶紧起来玩,这游戏可是等了半年多才玩到的,非第一个破关不可。", "talkname0", 1);
-- PlayAnimation(-1, 6890, 6932);
-- jyx2_PlayTimeline("[Timeline]ka691_小虾米居_站起", 0, false);
-- jyx2_Wait(10);
-- Talk(0, "咦!我的电脑呢?", "talkname0", 1);
-- PlayAnimation(-1, 6934, 6986);
-- jyx2_PlayTimeline("[Timeline]ka691_小虾米居_迷惑", 0, false);
-- jyx2_Wait(10);
-- Talk(0, "奇怪,我什么时候换了衣服的,我都不知道。哎!还是古装的?", "talkname0", 1);
-- PlayAnimation(-1, 6988, 7000);
-- PlayAnimation(-1, 6988, 7000);
-- Talk(114, "好了,不能再说下去了,游戏设计者叮咛过我,话不能说太多,否则会犯了游戏的大忌,俗语说……“好GAME不多话”。BYE!BYE!", "talkname114", 0);
DarkScence(); --增加过场(黑场)
-- jyx2_StopTimeline("[Timeline]ka691_小虾米居_醒来");
-- jyx2_StopTimeline("[Timeline]ka691_小虾米居_站起");
-- jyx2_StopTimeline("[Timeline]ka691_小虾米居_迷惑");
-- jyx2_StopTimeline("[Timeline]ka691_小虾米居_四处观察");
-- jyx2_StopTimeline("[Timeline]ka691_小虾米居_转身");
-- jyx2_StopTimeline("[Timeline]ka691_小虾米居_软体娃娃跳起");
-- jyx2_StopTimeline("[Timeline]ka691_小虾米居_软体娃娃打招呼");
-- jyx2_SetTimelineSpeed(1); --播放速度还原
-- SetRoleFace(0); --修正朝向角度
LightScence(); --增加过场(黑场还原)
修改, 在开头动画一开始旁边的箱子事件 ka695 ”脚本“:
--ka695.lua
----------------------------
--这个代码应该是保证宝箱只打开一次,暂时屏蔽,因为哥需要多次触发宝箱(录屏几次)
--ModifyEvent(-2, -2, -2, -2, -1, -1, -1, 2492, 2492, 2492, -2, -2, -2);
AddItem(1, 3);
Talk(500, "刚才调整了开头动画,使用的即是Lua脚本,但个人不建议新手学这套Lua,真正实战的Lua语法和应用可完全是2回事,就好像少林长拳和九阳真经练到9重的区别。", "talkname200", 2)
Talk(0,"刚才写Lua脚本,每个逻辑结束时也没有写分号;个人是“逍遥派”,不写分号派,但也不想破坏原作者的规范,后续不会在Lua脚本上深究了","",2)
Talk(0,"总结一下就是:github下载源码;Unity2020.3打开;修改Lua脚本(Mode/JYX2/Lua/691.lua;File->BuildSettings找到启动界面;运行即可","",5)
do return end;
或者完全不管,直接使用GM工具
case "zuoyouhubo": //主角学会左右互搏
{
GameRuntimeData.Instance.Player.Zuoyouhubo = int.Parse(paras[1]);
StoryEngine.DisplayPopInfo(
"主角设置左右互搏:" + (GameRuntimeData.Instance.Player.Zuoyouhubo == 1 ? "开" : "关"));
break;
}
case "transportwei":
{
TransportWei();
break;
}
default:
Debug.Log("没有识别的指令,将执行lua替代:" + cmd);
string luaContent = cmd;
Jyx2.LuaExecutor.ExecuteLuaAsync(luaContent);
break;
自定义GM工具(”脚本“,程序实现)
因为经常碰到(也可能是个人原因)提示已经在执行事件,其他任何交互功能(事件)变得不可执行了,所以需要一个扩展调试功能:查看当前正在执行什么事件。
原理,就是修改开头动画的 ka691.lua”脚本“即可,因为只要你使用jx 2的默认mod,则必然会执行开头动画,也能使用 eventlua方法了,只要在对话框输入:eventlua(),点执行
SetRoleFace(1);
jyx2_Wait(2.4)
function eventlua( ... )
print("eve")
end
-- jyx2_SetTimelineSpeed(3); --播放速度X3
-- jyx2_PlayTimeline("[Timeline]ka691_小虾米居_醒来", 0, false);
流个尾巴(TODO)
1.不启动游戏,直接执行修改lua文件并执行
2.Xlua自动转换c#代码 + Profiler + 断点调试
3.在事件脚本 ka691等等中注入lua