0%

unity: 平衡球

RigidBody

属性 含义
Mass unity中的一重量单位
Drag 直线运动时的阻力
Angular Drag 角度改变时的阻力
Use Gravity 是否应用重力
is Kinematic 刚体是否可以产生运动的(勾选则完全锁定)
interpolate 插值,让刚体运动得更加自然(否则可能会抖)
Collision Detection 碰撞检测模式,discrete:大部分情况下使用不连续的模式
Constraints 用来控制锁定。Freeze Position:锁定坐标;Freeze Rotation:锁定旋转

控制小球

创建C#脚本,不要忘记了附加给小球,AddComponent里面就有~

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
public class Player : MonoBehaviour {
private Rigidbody rigid; // ball
private Vector3 dir;
private float force = 5f;
private float torque = 10f;
private bool brake;
private int spin;

// Start is called before the first frame update
private void Start(){
rigid = GetComponent<Rigidbody>();
}

// Update is called once per frame
private void Update(){
dir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
brake = Input.GetKey(KeyCode.Space);
if (Input.GetKey(KeyCode.Q))
spin = -1; //anti-clockwise
else if (Input.GetKey(KeyCode.E))
spin = 1; // closkwise
else
spin = 0; // no rotation
}

private void FixedUpdate() {
if (!brake) {
rigid.AddForce(dir * force, ForceMode.Force);
rigid.AddTorque(Vector3.up * spin * torque);
}
else
rigid.velocity = Vector3.Lerp(rigid.velocity, new Vector3(0, rigid.velocity.y, 0), 0.2f);
}
}

摄像头追随

需要给Main Camera附加脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class CameraTrace : MonoBehaviour{
private Transform trans;
public Transform target;
public Vector3 distance = new Vector3(0, 2, -5);

// Start is called before the first frame update
void Start(){
trans = this.transform;
target = GameObject.Find("Ball").GetComponent<Transform>();
}

// Update is called once per frame
void Update(){
trans.position = target.position + distance;
trans.LookAt(target);
}
}

GameObject脚本操作

GameObject本身没有功能,是Unity场景里所有组件的基类,很多时候需要在脚本中操作GameObject

成员变量 含义
activeInHierarchy 场景中的游戏对象是否激活?
activeSelf 该游戏对象的局部激活状态。(只读)
isStatic 如果一个游戏对象是静态仅在编辑器API指定。
layer 游戏对象所在的层,层的范围是在[0…31]之间。
scene 场景物体。
tag 这个游戏对象的标签。
transform 附加于这个游戏对象上的变换。(如果没有则为空)
成员函数 使用方法
AddComponent 添加一个名称为className的组件到游戏对象。
BroadcastMessage 对此游戏对象及其子对象的所有MonoBehaviour中调用名称为methodName的方法。
CompareTag 此游戏对象是否被标记为tag标签?
GetComponent 如果这个游戏对象附件了一个类型为type的组件,则返回该组件,否则为空。
GetComponentInChildren 返回此游戏对象或者它的所有子对象上(深度优先)的类型为type的组件。
GetComponentInParent 从父对象查找组件。
GetComponents 返回该游戏对象所有type类型的组件列表。
GetComponentsInChildren 返回此游戏对象与其子对象所有type类型的组件。
GetComponentsInParent 返回此游戏对象与其父对象所有type类型的组件。
SampleAnimation 用于任何动画剪辑在给定的时间采样动画。
SendMessage 在这个游戏物体上的所有MonoBehaviour上调用名称为methodName的方法。
SendMessageUpwards 在这个游戏物体及其祖先物体的所有MonoBehaviour中调用名称为methodName的方法。
SetActive 激活/停用此游戏对象。
静态函数 使用方法
CreatePrimitive 创建一个带有原型网格渲染器和适当的碰撞器的游戏对象。
Find 找到并返回一个名字为name的游戏物体。
FindGameObjectsWithTag 返回具体tag标签的激活的游戏对象列表,如果没有找到则为空。
FindWithTag 返回标记为tag的一个游戏对象,如果没有找到对象则为空。

Reference

Unity 3D 刚体实现平衡球游戏
人人都能写游戏系列(三)Unity 3D平衡球游戏
U3D GameObject 解读