1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
//[ExecuteInEditMode]
public class TestFakeHeight : MonoBehaviour
{
[SerializeField] private Transform m_Shadow;
[SerializeField] private Vector3 m_Coord;
public float height {
get
{
return m_Height;
}
set
{
m_Height = value;
}
}
[SerializeField] private float m_Height; // current fake height
public float x
{
get
{
return transform.position.x;
}
set
{
Vector3 pos = transform.position;
pos.x = value;
transform.position = pos;
}
}
public float y
{
get
{
return transform.position.y - m_Height;
}
set
{
Vector3 pos = transform.position;
pos.y = value + m_Height;
transform.position = pos;
}
}
public Vector3 position
{
get
{
Vector3 pos = new Vector3(x, y, height);
return pos;
}
set
{
height = value.z; // height先设置
x = value.x;
y = value.y;
}
}
public Vector2 positionOnGround
{
get
{
Vector2 pos = new Vector2(x, y);
return pos;
}
set
{
x = value.x;
y = value.y;
}
}
private SpriteRenderer m_SpriteRenderer;
private void OnEnable()
{
m_SpriteRenderer = GetComponent<SpriteRenderer>();
}
private void Start()
{
Project();
}
void Project()
{
Vector3 pos = transform.position;
pos.y = y + height;
transform.position = pos;
if (m_Shadow != null)
{
m_Shadow.position = new Vector3(transform.position.x, transform.position.y - m_Height, transform.position.z);
}
// 根据y设置sortOrder
m_SpriteRenderer.sortingOrder = (int)(-y * 100);
}
void Update()
{
Project();
}
#if UNITY_EDITOR
private void OnDrawGizmos()
{
// dash line
Vector3 start = transform.position;
Vector3 end = start - new Vector3(0, m_Height, 0);
Handles.DrawDottedLine(start, end, 1f);
Handles.DrawWireCube(end, new Vector3(0.1f, 0.1f, 0f));
}
#endif
}
|