blob: b8f3b7ed04ef37f82502748d600b7c8182d41d9b (
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
|
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;
[Tooltip("力")]
[SerializeField]
private Vector3 m_Force;
[SerializeField]
private PhysicsPrimitive m_Primitive;
public void AddForce(Vector3 force)
{
m_Force += force;
}
public void SetForce(Vector3 force)
{
m_Force = force;
}
}
|