调整变量
打开Variables.uss,将内容修改如下:
CSS
:root
{
/* 颜色 */
--colors-dark-grey-0: #111111;
--colors-dark-grey-1: #1D1D1D;
--colors-dark-grey-2: #242424;
--colors-dark-grey-3: #292929;
--colors-dark-grey-4: #2F2F2F;
--colors-dark-grey-5: #353535;
--colors-dark-grey-6: #3A3A3A;
--colors-dark-grey-7: #404040;
--colors-dark-grey-8: #464646;
--colors-light-grey-0: #eeeeee;
--colors-light-grey-1: #dddddd;
--colors-light-grey-2: #cccccc;
--colors-light-grey-3: #bbbbbb;
--colors-light-grey-4: #aaaaaa;
--colors-yellow: #FDD057;
--colors-blue: #50DDE7;
--colors-red: #CC2222;
/* 数值(无单位) */
--metrics-0: 0;
--metrics-1: 1;
--metrics-20: 20;
/* 数值(像素) */
--metrics-pixels-0: 0px;
--metrics-pixels-1: 1px;
--metrics-pixels-2: 2px;
--metrics-pixels-4: 4px;
--metrics-pixels-6: 6px;
--metrics-pixels-8: 8px;
--metrics-pixels-12: 12px;
--metrics-pixels-14: 14px;
--metrics-pixels-16: 16px;
--metrics-pixels-20: 20px;
--metrics-pixels-22: 22px;
--metrics-pixels-24: 24px;
--metrics-pixels-28: 28px;
--metrics-pixels-32: 32px;
--metrics-pixels-40: 40px;
--metrics-pixels-60: 60px;
--metrics-pixels-80: 80px;
--metrics-pixels-100: 100px;
--metrics-pixels-120: 120px;
--metrics-pixels-140: 140px;
--metrics-pixels-160: 160px;
--metrics-pixels-180: 180px;
--metrics-pixels-200: 200px;
--metrics-pixels-240: 240px;
--metrics-pixels-320: 320px;
--metrics-pixels-400: 400px;
--metrics-pixels-480: 480px;
--metrics-pixels-800: 800px;
}
添加样式
打开GraphViewStyle.uss,新增以下内容:
CSS
/* -------------------------------------------------------布局容器 */
/* ----块容器---- */
/* 节点主容器 */
.node__main-container
{
min-width: var(--metrics-pixels-200);
background-color: var(--colors-dark-grey-3);
}
/* 节点主容器(小型) */
.node__main-container-small
{
min-width: var(--metrics-pixels-120);
background-color: var(--colors-dark-grey-3);
}
/* 节点标题容器 */
.node__title-container
{
}
/* 节点输入容器 */
.node__input-container
{
}
/* 节点输出容器 */
.node__output-container
{
}
/* 节点扩展容器 */
.node__extension-container
{
padding: var(--metrics-0);
}
/* 节点自定义数据容器 */
.node__custom-data-container
{
padding: var(--metrics-pixels-8);
}
/* ----行容器---- */
/* 行容器 */
.row-container
{
flex-direction: row;
}
/* 行容器 > 输入框 */
.row-container > .textfield
{
flex-grow: 1000;
max-width: var(--metrics-pixels-320);
}
/* 行容器 > 左侧和中间的元素 */
.row-container > .row-item__left-center
{
margin-top: var(--metrics-pixels-2);
margin-right: var(--metrics-pixels-4);
margin-bottom: var(--metrics-pixels-2);
margin-left: var(--metrics-0);
}
/* 行容器 > 最右侧的元素 */
.row-container > .row-item__right
{
margin-top: var(--metrics-pixels-2);
margin-right: var(--metrics-0);
margin-bottom: var(--metrics-pixels-2);
margin-left: var(--metrics-0);
}
/* ----列容器---- */
/* 列容器 */
.col-container
{
}
/* 列容器 > 上侧和中间的元素 */
.col-container > .col-item__top-center
{
margin-top: var(--metrics-0);
margin-right: var(--metrics-0);
margin-bottom: var(--metrics-pixels-4);
margin-left: var(--metrics-0);
}
/* 列容器 > 最下侧的元素 */
.col-container > .col-item__bottom
{
margin-top: var(--metrics-0);
margin-right: var(--metrics-0);
margin-bottom: var(--metrics-0);
margin-left: var(--metrics-0);
}
/* -------------------------------------------------------交互元素 */
/* ----折叠组---- */
/* 折叠组 */
Foldout
{
}
/* 折叠组内容 */
.unity-foldout__content
{
margin: var(--metrics-0);
}
/* 折叠组 > 折叠框 */
Foldout > Toggle
{
margin: var(--metrics-0);
}
/* 折叠组 > 子项 */
Foldout > .foldout-item
{
margin: var(--metrics-0);
margin-top: var(--metrics-pixels-4);
}
/* 折叠组 > 折叠框unity文本元素 */
.unity-toggle__text
{
margin-left: var(--metrics-0);
}
/* ----按钮---- */
Button
{
min-height: var(--metrics-pixels-24);
background-color: var(--colors-dark-grey-7);
border-color: var(--colors-dark-grey-1);
}
/* 按钮(悬停时) */
Button:hover
{
background-color: var(--colors-dark-grey-8);
}
/* 按钮(按下时) */
Button:active
{
background-color: var(--colors-dark-grey-6);
color: var(--colors-yellow);
}
/* ----输入字段---- */
/* 文本字段 */
.textfield
{
}
/* 文本字段 > unity文本输入框 */
.textfield > .unity-text-field__input,
/* 文本字段 > unity整数输入框 */
.textfield > .unity-integer-field__input
{
min-width: var(--metrics-pixels-40);
background-color: var(--colors-dark-grey-1);
border-color: var(--colors-dark-grey-7);
border-radius: var(--metrics-pixels-4);
white-space: pre-wrap;
}
/* 隐藏文本字段 > unity文本输入框 */
.textfield__hidden > .unity-text-field__input,
{
background-color: transparent;
border-color: transparent;
}
/* 隐藏文本字段(聚焦时) > unity文本输入框 */
.textfield__hidden:focus > .unity-text-field__input
{
background-color: var(--colors-dark-grey-1);
border-color: var(--colors-yellow);
}
/* 引用文本字段 > unity文本输入框 */
.textfield__quote > .unity-text-field__input,
.textfield__quote > .unity-integer-field__input
{
padding: var(--metrics-pixels-6);
background-color: var(--colors-dark-grey-2);
border-color: transparent;
border-left-color: var(--colors-dark-grey-7);
border-left-width: var(--metrics-pixels-4);
}
/* 引用文本字段(悬停时) > unity文本输入框 */
.textfield__quote:hover > .unity-text-field__input,
.textfield__quote:hover > .unity-integer-field__input
{
background-color: var(--colors-dark-grey-4);
}
/* 引用文本字段(聚焦时) > unity文本输入框 */
.textfield__quote:focus > .unity-text-field__input,
.textfield__quote:focus > .unity-integer-field__input
{
background-color: var(--colors-dark-grey-1);
border-color: var(--colors-yellow);
}
/* 节点标题文本字段 > unity文本输入框 */
.textfield__node-title > .unity-text-field__input
{
max-width: var(--metrics-pixels-320);
margin: var(--metrics-pixels-4);
margin-left: var(--metrics-0);
padding: var(--metrics-pixels-2);
}
/* 节点标题文本字段 > unity文本输入框 > 文本元素 */
.textfield__node-title > .unity-text-field__input > TextElement
{
font-size: var(--metrics-pixels-14);
}
/* 节点输出端口选项文本字段 > unity文本输入框 */
.textfield__node-output-port > .unity-text-field__input
{
height: var(--metrics-pixels-24);
min-width: var(--metrics-pixels-40);
max-width: var(--metrics-pixels-240);
margin: var(--metrics-pixels-4);
margin-right: var(--metrics-0);
padding: var(--metrics-pixels-4);
}
/* -------------------------------------------------------附加样式 */
/* 错误(边框) */
.error-border
{
border-color: var(--colors-red);
border-width: var(--metrics-pixels-2);
border-radius: 4px 4px 0 0;
}
/* 错误(背景) */
.error-bg
{
background-color: var(--colors-red);
}
/* 帮助文本 */
.help-text
{
color: var(--colors-red);
-unity-text-align: middle-center;
}
/* 行缩进 */
.indent
{
margin-left: var(--metrics-pixels-8);
}
/* 全宽 */
.full-width
{
flex-grow: var(--metrics-1);
}
应用样式
美化基类节点
打开BaseNode.cs,修改以下方法:
C#
public virtual void Init(StoryGraphView graphView, string title, Vector2 position)
{
/* ... 此处代码已省略 ... */
// 添加USS类名
mainContainer.AddToClassList("node__main-container");
titleContainer.AddToClassList("node__title-container");
inputContainer.AddToClassList("node__input-container");
outputContainer.AddToClassList("node__output-container");
extensionContainer.AddToClassList("node__extension-container");
}
protected virtual void DrawTitleContainer()
{
/* ... 此处代码已省略 ... */
// 添加USS类名
tfdTitle.AddClasses
(
"textfield",
"textfield__hidden",
"textfield__node-title"
);
}
protected virtual void DrawExtensionContainer()
{
/* ... 此处代码已省略 ... */
// 添加USS类名
customDataContainer.AddClasses
(
"node__custom-data-container"
);
tfdNote.AddClasses
(
"textfield",
"textfield__quote",
"foldout-item"
);
// 此方法必须调用
RefreshExpandedState();
}
美化单进多出节点
打开SingleInMultiOutNode.cs,修改以下方法:
C#
protected override void DrawExtensionContainer()
{
/* ... 此处代码已省略 ... */
// 添加USS类名
btnAdd.AddClasses
(
"foldout-item"
);
RefreshExpandedState();
}
private Port CreateOutputPort(object userData)
{
/* ... 此处代码已省略 ... */
// 添加USS类名
btnDelete.AddClasses
(
"row-item__right"
);
tfdChoice.AddClasses
(
"textfield",
"textfield__node-output-port",
"textfield__hidden"
);
return outputPort;
}
美化对话节点
打开DialogueNode.cs,修改以下方法:
C#
protected override void DrawExtensionContainer()
{
/* ... 此处代码已省略 ... */
// 添加USS类名
customDataContainer.AddClasses
(
"node__custom-data-container"
);
roleInfoRowContainer.AddClasses
(
"row-container",
"foldout-item"
);
roleInfoColContainer.AddClasses
(
"col-container",
//"row-item__left-center",
"full-width"
);
tfdRoleName.AddClasses
(
"col-item__top-center",
"textfield",
"textfield__quote"
);
btnAdd.AddClasses
(
"foldout-item"
);
RefreshExpandedState();
}
private VisualElement CreateSentenceData(object userData)
{
/* ... 此处代码已省略 ... */
// 添加USS类名
lineContainer.AddClasses
(
"row-container",
"foldout-item"
);
tfdSentence.AddClasses
(
"textfield",
"textfield__quote",
"row-item__left-center"
);
btnDelete.AddClasses
(
"row-item__right"
);
return lineContainer;
}
美化分支节点
打开BranchNode.cs,修改以下方法:
C#
protected override void DrawExtensionContainer()
{
/* ... 此处代码已省略 ... */
// 添加USS类名
btnAdd.AddClasses
(
"foldout-item"
);
customDataContainer.AddClasses
(
"node__custom-data-container"
);
RefreshExpandedState();
}
private VisualElement CreateChoiceData(object userData)
{
/* ... 此处代码已省略 ... */
// 添加USS类名
choiceContainer.AddClasses
(
"foldout-item"
);
lineContainer.AddClasses
(
"row-container"
);
tfdChoice.AddClasses
(
"textfield",
"textfield__quote",
"row-item__left-center"
);
btnDelete.AddClasses
(
"row-item__right"
);
return choiceContainer;
}
测试效果
最终窗口效果如下:

相关链接
- 完整代码:https://gitee.com/helloestar/e-story/wikis/DevelopNotes/07
- 视频版本:制作中……