blob: 68f9dec3caa83ecddf3d5f9f37f9b0f3b95672a3 (
plain)
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 需要受物理系统托管的动作:
// 跳跃上升
// 跳跃下降
// 空中受击
//
//
// 不会受物理系统托管的动作:
// 单个招式
// 空中连击
//
//
// 一般来说启用物理是被动的
/// <summary>
/// 刚体
/// </summary>
public sealed class PhysicsBody : MonoBehaviour
{
// 是否朝向右侧(正向)
public bool IsFaceRight
{
get
{
float rotY = Quaternion.ToEulerAngles(transform.rotation).y;
rotY = Mathf.Rad2Deg * rotY;
return rotY > 0 && rotY <= 180;
}
}
// 全局速度,以世界为参考系
[SerializeField]
public Vector3 Velocity
{
get
{
Vector3 vel = m_LocalVelocity;
if (!IsFaceRight)
vel.x = -vel.x;
return vel;
}
set
{
if (IsFaceRight)
m_LocalVelocity = value;
else
m_LocalVelocity = new Vector3(-value.x, value.y, value.z);
}
}
// 以自身为参考系的速度,x>0向前,x<0向后,y>0向上,y<0向下。默认情况下以右为正方向
// 设置速度应该以local velocity为准
[SerializeField]
private Vector3 m_LocalVelocity;
public Vector3 LocalVelocity
{
get
{
return m_LocalVelocity;
}
set
{
m_LocalVelocity = value;
}
}
[SerializeField]
private float m_Weight;
public float Weight
{
get
{
return m_Weight;
}
}
[Tooltip("ignore gravity?")]
[SerializeField]
private bool m_UseGravity;
public bool UseGravity
{
get
{
return m_UseGravity;
}
set
{
m_UseGravity = value;
}
}
[SerializeField]
private Vector3 m_Accelaration;
public Vector3 Accelaration
{
get
{
return m_Accelaration;
}
}
[Tooltip("地面摩擦系数")]
[SerializeField]
private float m_Frication;
public float GroundFriction
{
get { return m_Frication; }
}
[Tooltip("空气摩擦力")]
[SerializeField]
private float m_AirFriction;
public float AirFriction
{
get { return m_AirFriction; }
}
[Tooltip("力")]
[SerializeField]
private Vector3 m_Force;
public Vector3 Force
{
get
{
return m_Force;
}
}
[SerializeField]
private PhysicsPrimitive m_Primitive;
public void AddForce(Vector3 force)
{
m_Force += force;
}
public void SetForce(Vector3 force)
{
m_Force = force;
}
}
|