Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱小饭呀
navmeshcomponents
提交
7dca155d
N
navmeshcomponents
项目概览
爱小饭呀
/
navmeshcomponents
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
navmeshcomponents
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7dca155d
编写于
9月 30, 2016
作者:
J
jakobhu
提交者:
GitHub
9月 30, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add navmesh script editors for components
上级
a57a0de9
变更
4
展开全部
隐藏空白更改
内联
并排
Showing
4 changed file
with
870 addition
and
0 deletion
+870
-0
Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs
Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs
+258
-0
Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs
Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs
+49
-0
Assets/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs
...s/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs
+107
-0
Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs
Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs
+456
-0
未找到文件。
Assets/NavMeshComponents/Editor/NavMeshLinkEditor.cs
0 → 100644
浏览文件 @
7dca155d
using
UnityEngine
;
using
UnityEngine.AI
;
namespace
UnityEditor.AI
{
[
CanEditMultipleObjects
]
[
CustomEditor
(
typeof
(
NavMeshLink
))]
class
NavMeshLinkEditor
:
Editor
{
SerializedProperty
m_AgentTypeID
;
SerializedProperty
m_Area
;
SerializedProperty
m_AutoUpdatePosition
;
SerializedProperty
m_Bidirectional
;
SerializedProperty
m_EndPoint
;
SerializedProperty
m_StartPoint
;
SerializedProperty
m_Width
;
static
int
s_SelectedID
;
static
int
s_SelectedPoint
=
-
1
;
static
Color
s_HandleColor
=
new
Color
(
255f
,
167f
,
39f
,
210f
)
/
255
;
static
Color
s_HandleColorDisabled
=
new
Color
(
255f
*
0.75f
,
167f
*
0.75f
,
39f
*
0.75f
,
100f
)
/
255
;
void
OnEnable
()
{
m_AgentTypeID
=
serializedObject
.
FindProperty
(
"m_AgentTypeID"
);
m_Area
=
serializedObject
.
FindProperty
(
"m_Area"
);
m_AutoUpdatePosition
=
serializedObject
.
FindProperty
(
"m_AutoUpdatePosition"
);
m_Bidirectional
=
serializedObject
.
FindProperty
(
"m_Bidirectional"
);
m_EndPoint
=
serializedObject
.
FindProperty
(
"m_EndPoint"
);
m_StartPoint
=
serializedObject
.
FindProperty
(
"m_StartPoint"
);
m_Width
=
serializedObject
.
FindProperty
(
"m_Width"
);
s_SelectedID
=
0
;
s_SelectedPoint
=
-
1
;
NavMeshVisualizationSettings
.
showNavigation
++;
}
void
OnDisable
()
{
NavMeshVisualizationSettings
.
showNavigation
--;
}
void
AlignTransformToEndPoints
(
NavMeshLink
navLink
)
{
var
transform
=
navLink
.
transform
;
Vector3
worldStartPt
=
transform
.
TransformPoint
(
navLink
.
startPoint
);
Vector3
worldEndPt
=
transform
.
TransformPoint
(
navLink
.
endPoint
);
Vector3
forward
=
worldEndPt
-
worldStartPt
;
Vector3
up
=
transform
.
up
;
// Flatten
forward
-=
Vector3
.
Dot
(
up
,
forward
)
*
up
;
var
rotation
=
new
Quaternion
();
rotation
.
SetLookRotation
(
forward
,
up
);
transform
.
rotation
=
rotation
;
transform
.
position
=
(
worldEndPt
+
worldStartPt
)
*
0.5f
;
navLink
.
startPoint
=
transform
.
InverseTransformPoint
(
worldStartPt
);
navLink
.
endPoint
=
transform
.
InverseTransformPoint
(
worldEndPt
);
}
public
override
void
OnInspectorGUI
()
{
serializedObject
.
Update
();
NavMeshEditorHelpers
.
AgentTypePopup
(
"Agent Type"
,
m_AgentTypeID
);
EditorGUILayout
.
Space
();
EditorGUILayout
.
PropertyField
(
m_StartPoint
);
EditorGUILayout
.
PropertyField
(
m_EndPoint
);
EditorGUILayout
.
PropertyField
(
m_Width
);
m_Width
.
floatValue
=
Mathf
.
Max
(
0.0f
,
m_Width
.
floatValue
);
GUILayout
.
BeginHorizontal
();
GUILayout
.
Space
(
EditorGUIUtility
.
labelWidth
);
if
(
GUILayout
.
Button
(
"Align Transform To Points"
))
{
foreach
(
NavMeshLink
navLink
in
targets
)
{
Undo
.
RecordObject
(
navLink
.
transform
,
"Align Transform to End Points"
);
Undo
.
RecordObject
(
navLink
,
"Align Transform to End Points"
);
AlignTransformToEndPoints
(
navLink
);
}
}
GUILayout
.
EndHorizontal
();
EditorGUILayout
.
Space
();
EditorGUILayout
.
PropertyField
(
m_AutoUpdatePosition
);
EditorGUILayout
.
PropertyField
(
m_Bidirectional
);
NavMeshEditorHelpers
.
AreaPopup
(
"Area Type"
,
m_Area
);
serializedObject
.
ApplyModifiedProperties
();
EditorGUILayout
.
Space
();
}
static
Vector3
CalcLinkRight
(
NavMeshLink
navLink
)
{
Vector3
dir
=
navLink
.
endPoint
-
navLink
.
startPoint
;
return
(
new
Vector3
(-
dir
.
z
,
0.0f
,
dir
.
x
)).
normalized
;
}
static
void
DrawLink
(
NavMeshLink
navLink
)
{
Vector3
right
=
CalcLinkRight
(
navLink
);
float
rad
=
navLink
.
width
*
0.5f
;
Gizmos
.
DrawLine
(
navLink
.
startPoint
-
right
*
rad
,
navLink
.
startPoint
+
right
*
rad
);
Gizmos
.
DrawLine
(
navLink
.
endPoint
-
right
*
rad
,
navLink
.
endPoint
+
right
*
rad
);
Gizmos
.
DrawLine
(
navLink
.
startPoint
-
right
*
rad
,
navLink
.
endPoint
-
right
*
rad
);
Gizmos
.
DrawLine
(
navLink
.
startPoint
+
right
*
rad
,
navLink
.
endPoint
+
right
*
rad
);
}
[
DrawGizmo
(
GizmoType
.
Selected
|
GizmoType
.
Active
|
GizmoType
.
Pickable
)]
static
void
RenderBoxGizmo
(
NavMeshLink
navLink
,
GizmoType
gizmoType
)
{
if
(!
EditorApplication
.
isPlaying
)
navLink
.
UpdateLink
();
var
color
=
s_HandleColor
;
if
(!
navLink
.
enabled
)
color
=
s_HandleColorDisabled
;
var
oldColor
=
Gizmos
.
color
;
var
oldMatrix
=
Gizmos
.
matrix
;
Gizmos
.
matrix
=
navLink
.
transform
.
localToWorldMatrix
;
Gizmos
.
color
=
color
;
DrawLink
(
navLink
);
Gizmos
.
matrix
=
oldMatrix
;
Gizmos
.
color
=
oldColor
;
Gizmos
.
DrawIcon
(
navLink
.
transform
.
position
,
"NavMeshLink Gizmo"
,
true
);
}
[
DrawGizmo
(
GizmoType
.
NotInSelectionHierarchy
|
GizmoType
.
Pickable
)]
static
void
RenderBoxGizmoNotSelected
(
NavMeshLink
navLink
,
GizmoType
gizmoType
)
{
if
(
NavMeshVisualizationSettings
.
showNavigation
>
0
)
{
var
color
=
s_HandleColor
;
if
(!
navLink
.
enabled
)
color
=
s_HandleColorDisabled
;
var
oldColor
=
Gizmos
.
color
;
var
oldMatrix
=
Gizmos
.
matrix
;
Gizmos
.
matrix
=
navLink
.
transform
.
localToWorldMatrix
;
Gizmos
.
color
=
color
;
DrawLink
(
navLink
);
Gizmos
.
matrix
=
oldMatrix
;
Gizmos
.
color
=
oldColor
;
}
Gizmos
.
DrawIcon
(
navLink
.
transform
.
position
,
"NavMeshLink Gizmo"
,
true
);
}
public
void
OnSceneGUI
()
{
var
navLink
=
(
NavMeshLink
)
target
;
if
(!
navLink
.
enabled
)
return
;
Vector3
startPt
=
navLink
.
transform
.
TransformPoint
(
navLink
.
startPoint
);
Vector3
endPt
=
navLink
.
transform
.
TransformPoint
(
navLink
.
endPoint
);
Vector3
midPt
=
Vector3
.
Lerp
(
startPt
,
endPt
,
0.35f
);
float
startSize
=
HandleUtility
.
GetHandleSize
(
startPt
);
float
endSize
=
HandleUtility
.
GetHandleSize
(
endPt
);
float
midSize
=
HandleUtility
.
GetHandleSize
(
midPt
);
Quaternion
zup
=
Quaternion
.
FromToRotation
(
Vector3
.
forward
,
Vector3
.
up
);
Vector3
right
=
navLink
.
transform
.
TransformVector
(
CalcLinkRight
(
navLink
));
Color
oldColor
=
Handles
.
color
;
Handles
.
color
=
s_HandleColor
;
Vector3
pos
;
if
(
navLink
.
GetInstanceID
()
==
s_SelectedID
&&
s_SelectedPoint
==
0
)
{
EditorGUI
.
BeginChangeCheck
();
Handles
.
CubeCap
(
0
,
startPt
,
zup
,
0.1f
*
startSize
);
pos
=
Handles
.
PositionHandle
(
startPt
,
navLink
.
transform
.
rotation
);
if
(
EditorGUI
.
EndChangeCheck
())
{
Undo
.
RecordObject
(
navLink
,
"Move link point"
);
navLink
.
startPoint
=
navLink
.
transform
.
InverseTransformPoint
(
pos
);
}
}
else
{
if
(
Handles
.
Button
(
startPt
,
zup
,
0.1f
*
startSize
,
0.1f
*
startSize
,
Handles
.
CubeCap
))
{
s_SelectedPoint
=
0
;
s_SelectedID
=
navLink
.
GetInstanceID
();
}
}
if
(
navLink
.
GetInstanceID
()
==
s_SelectedID
&&
s_SelectedPoint
==
1
)
{
EditorGUI
.
BeginChangeCheck
();
Handles
.
CubeCap
(
0
,
endPt
,
zup
,
0.1f
*
startSize
);
pos
=
Handles
.
PositionHandle
(
endPt
,
navLink
.
transform
.
rotation
);
if
(
EditorGUI
.
EndChangeCheck
())
{
Undo
.
RecordObject
(
navLink
,
"Move link point"
);
navLink
.
endPoint
=
navLink
.
transform
.
InverseTransformPoint
(
pos
);
}
}
else
{
if
(
Handles
.
Button
(
endPt
,
zup
,
0.1f
*
endSize
,
0.1f
*
endSize
,
Handles
.
CubeCap
))
{
s_SelectedPoint
=
1
;
s_SelectedID
=
navLink
.
GetInstanceID
();
}
}
EditorGUI
.
BeginChangeCheck
();
pos
=
Handles
.
Slider
(
midPt
+
right
*
navLink
.
width
*
0.5f
,
right
,
midSize
*
0.03f
,
Handles
.
DotCap
,
0
);
if
(
EditorGUI
.
EndChangeCheck
())
{
Undo
.
RecordObject
(
navLink
,
"Adjust link width"
);
navLink
.
width
=
Mathf
.
Max
(
0.0f
,
Vector3
.
Dot
(
right
,
(
pos
-
midPt
))
*
2.0f
);
}
EditorGUI
.
BeginChangeCheck
();
pos
=
Handles
.
Slider
(
midPt
-
right
*
navLink
.
width
*
0.5f
,
-
right
,
midSize
*
0.03f
,
Handles
.
DotCap
,
0
);
if
(
EditorGUI
.
EndChangeCheck
())
{
Undo
.
RecordObject
(
navLink
,
"Adjust link width"
);
navLink
.
width
=
Mathf
.
Max
(
0.0f
,
Vector3
.
Dot
(-
right
,
(
pos
-
midPt
))
*
2.0f
);
}
Handles
.
color
=
oldColor
;
}
[
MenuItem
(
"GameObject/AI/NavMesh Link"
,
false
,
2002
)]
static
public
void
CreateNavMeshLink
(
MenuCommand
menuCommand
)
{
var
parent
=
menuCommand
.
context
as
GameObject
;
GameObject
go
=
NavMeshEditorHelpers
.
CreateAndSelectGameObject
(
"NavMesh Link"
,
parent
);
go
.
AddComponent
<
NavMeshLink
>
();
var
view
=
SceneView
.
lastActiveSceneView
;
if
(
view
!=
null
)
view
.
MoveToView
(
go
.
transform
);
}
}
}
Assets/NavMeshComponents/Editor/NavMeshModifierEditor.cs
0 → 100644
浏览文件 @
7dca155d
using
UnityEngine.AI
;
namespace
UnityEditor.AI
{
[
CanEditMultipleObjects
]
[
CustomEditor
(
typeof
(
NavMeshModifier
))]
class
NavMeshModifierEditor
:
Editor
{
SerializedProperty
m_AffectedAgents
;
SerializedProperty
m_Area
;
SerializedProperty
m_IgnoreFromBuild
;
SerializedProperty
m_OverrideArea
;
void
OnEnable
()
{
m_AffectedAgents
=
serializedObject
.
FindProperty
(
"m_AffectedAgents"
);
m_Area
=
serializedObject
.
FindProperty
(
"m_Area"
);
m_IgnoreFromBuild
=
serializedObject
.
FindProperty
(
"m_IgnoreFromBuild"
);
m_OverrideArea
=
serializedObject
.
FindProperty
(
"m_OverrideArea"
);
NavMeshVisualizationSettings
.
showNavigation
++;
}
void
OnDisable
()
{
NavMeshVisualizationSettings
.
showNavigation
--;
}
public
override
void
OnInspectorGUI
()
{
serializedObject
.
Update
();
EditorGUILayout
.
PropertyField
(
m_IgnoreFromBuild
);
EditorGUILayout
.
PropertyField
(
m_OverrideArea
);
if
(
m_OverrideArea
.
boolValue
)
{
EditorGUI
.
indentLevel
++;
NavMeshEditorHelpers
.
AreaPopup
(
"Area Type"
,
m_Area
);
EditorGUI
.
indentLevel
--;
}
NavMeshEditorHelpers
.
AgentMaskPopup
(
"Affected Agents"
,
m_AffectedAgents
);
EditorGUILayout
.
Space
();
serializedObject
.
ApplyModifiedProperties
();
}
}
}
Assets/NavMeshComponents/Editor/NavMeshModifierVolumeEditor.cs
0 → 100644
浏览文件 @
7dca155d
using
UnityEngine
;
using
UnityEngine.AI
;
namespace
UnityEditor.AI
{
[
CanEditMultipleObjects
]
[
CustomEditor
(
typeof
(
NavMeshModifierVolume
))]
class
NavMeshModifierVolumeEditor
:
Editor
{
SerializedProperty
m_AffectedAgents
;
SerializedProperty
m_Area
;
SerializedProperty
m_Center
;
SerializedProperty
m_Size
;
static
Color
s_HandleColor
=
new
Color
(
187f
,
138f
,
240f
,
210f
)
/
255
;
static
Color
s_HandleColorDisabled
=
new
Color
(
187f
*
0.75f
,
138f
*
0.75f
,
240f
*
0.75f
,
100f
)
/
255
;
void
OnEnable
()
{
m_AffectedAgents
=
serializedObject
.
FindProperty
(
"m_AffectedAgents"
);
m_Area
=
serializedObject
.
FindProperty
(
"m_Area"
);
m_Center
=
serializedObject
.
FindProperty
(
"m_Center"
);
m_Size
=
serializedObject
.
FindProperty
(
"m_Size"
);
NavMeshVisualizationSettings
.
showNavigation
++;
}
void
OnDisable
()
{
NavMeshVisualizationSettings
.
showNavigation
--;
}
public
override
void
OnInspectorGUI
()
{
serializedObject
.
Update
();
EditorGUILayout
.
PropertyField
(
m_Size
);
EditorGUILayout
.
PropertyField
(
m_Center
);
NavMeshEditorHelpers
.
AreaPopup
(
"Area Type"
,
m_Area
);
NavMeshEditorHelpers
.
AgentMaskPopup
(
"Affected Agents"
,
m_AffectedAgents
);
EditorGUILayout
.
Space
();
serializedObject
.
ApplyModifiedProperties
();
}
[
DrawGizmo
(
GizmoType
.
Selected
|
GizmoType
.
Active
)]
static
void
RenderBoxGizmo
(
NavMeshModifierVolume
navModifier
,
GizmoType
gizmoType
)
{
var
color
=
s_HandleColor
;
if
(!
navModifier
.
enabled
)
color
=
s_HandleColorDisabled
;
var
colorTrans
=
new
Color
(
color
.
r
*
0.75f
,
color
.
g
*
0.75f
,
color
.
b
*
0.75f
,
color
.
a
*
0.15f
);
var
oldColor
=
Gizmos
.
color
;
var
oldMatrix
=
Gizmos
.
matrix
;
Gizmos
.
matrix
=
navModifier
.
transform
.
localToWorldMatrix
;
Gizmos
.
color
=
colorTrans
;
Gizmos
.
DrawCube
(
navModifier
.
center
,
navModifier
.
size
);
Gizmos
.
color
=
color
;
Gizmos
.
DrawWireCube
(
navModifier
.
center
,
navModifier
.
size
);
Gizmos
.
matrix
=
oldMatrix
;
Gizmos
.
color
=
oldColor
;
Gizmos
.
DrawIcon
(
navModifier
.
transform
.
position
,
"NavMeshModifierVolume Gizmo"
,
true
);
}
[
DrawGizmo
(
GizmoType
.
NotInSelectionHierarchy
|
GizmoType
.
Pickable
)]
static
void
RenderBoxGizmoNotSelected
(
NavMeshModifierVolume
navModifier
,
GizmoType
gizmoType
)
{
if
(
NavMeshVisualizationSettings
.
showNavigation
>
0
)
{
var
color
=
s_HandleColor
;
if
(!
navModifier
.
enabled
)
color
=
s_HandleColorDisabled
;
var
oldColor
=
Gizmos
.
color
;
var
oldMatrix
=
Gizmos
.
matrix
;
Gizmos
.
matrix
=
navModifier
.
transform
.
localToWorldMatrix
;
Gizmos
.
color
=
color
;
Gizmos
.
DrawWireCube
(
navModifier
.
center
,
navModifier
.
size
);
Gizmos
.
matrix
=
oldMatrix
;
Gizmos
.
color
=
oldColor
;
}
Gizmos
.
DrawIcon
(
navModifier
.
transform
.
position
,
"NavMeshModifierVolume Gizmo"
,
true
);
}
[
MenuItem
(
"GameObject/AI/NavMesh Modifier Volume"
,
false
,
2001
)]
static
public
void
CreateNavMeshModifierVolume
(
MenuCommand
menuCommand
)
{
var
parent
=
menuCommand
.
context
as
GameObject
;
var
go
=
NavMeshEditorHelpers
.
CreateAndSelectGameObject
(
"NavMesh Modifier Volume"
,
parent
);
go
.
AddComponent
<
NavMeshModifierVolume
>
();
var
view
=
SceneView
.
lastActiveSceneView
;
if
(
view
!=
null
)
view
.
MoveToView
(
go
.
transform
);
}
}
}
Assets/NavMeshComponents/Editor/NavMeshSurfaceEditor.cs
0 → 100644
浏览文件 @
7dca155d
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录