まず、新しいシーンを作成します。
達成する必要のある効果はボールを動かすことであり、移動操作はスクリプトを使用して実装する必要があります。
Moveスクリプトを作成し、同時にボールにアタッチします。同時に、剛体コンポーネントを使用して移動操作を実現する必要があるため、剛体コンポーネントを作成して、剛体をボールに取り付ける必要もあります。
上記の手順を実装した後、スクリプトの作成を開始します。
ボールを移動するにはリジッドボディコンポーネントを使用する必要があるため、最初のステップはリジッドボディコンポーネントを取得し、リジッドボディコンポーネントに値を割り当てることです。最後に、リジッドボディコンポーネントに力を加えるだけで済みます。
public class Move : MonoBehaviour {
//定义一个刚体对象
private Rigidbody rb;
void Start () {
//接收刚体组件
rb = GetComponent<Rigidbody>();
}
void Update () {
//添加一个力,Vector3为一个三维向量,参数分别为x,y,z,当x = 1时,表示当前x方向发生偏移
rb.AddForce(new Vector3(1, 0, 0));
}
}
実行してみると、一定の方向にしか動かないことがわかりましたが、ボタンで動かすことはできますか?
判断のためにアップデートにインプットを導入する必要があります。
void Update () {
//Input.GetAxis用于检测是否按下键盘按键
//Horizontal表示水平按键
float h = Input.GetAxis("Horizontal");
//Vertical表示垂直按键
float v = Input.GetAxis("Vertical");
//添加一个力
rb.AddForce(new Vector3(h, 0, v));
}
しかし、ボールの動きが非常に遅いことがわかりました。1つのパラメーターを定義するだけで済みます。
public class Move : MonoBehaviour {
//定义一个刚体对象
private Rigidbody rb;
//定义小球移动的速度
public int speed = 5;
// Use this for initialization
void Start () {
//接收刚体组件
rb = GetComponent<Rigidbody>();
}
void Update () {
//Input.GetAxis用于检测是否按下键盘按键
//Horizontal表示水平按键
float h = Input.GetAxis("Horizontal");
//Vertical表示垂直按键
float v = Input.GetAxis("Vertical");
//添加一个力
rb.AddForce(new Vector3(1, 0, 0) * speed);
}
}
なぜ共通変数として速度を設定する必要があるのですか?
後の段階では、ここでボールの動きの速度を設定するだけでよく、スクリプトで設定する必要はありません。
ボールの動きを制御しましたが、ボールが消えてカメラの視野内に入ることができます。ボールを常に視野内に置く必要がある場合は、スクリプトを使用してカメラの動きを設定する必要があります。(つまり、カメラとボールの間の相対距離は変更されません)
FollowMoveスクリプトを作成し、同時に変換コンポーネントを適用します。
スクリプトをメインカメラに割り当てます。変換コンポーネントは共有に設定されているため、外部から割り当てて、ボールを割り当てます。
public class FollowMove : MonoBehaviour {
public Transform SphereTransform;
//设置一个距离的三维变量,用于保存摄像机于小球之间的距离。
private Vector3 distance;
// Use this for initialization
void Start () {
//由于当前脚本添加到主摄像机上,所以transform.position表示主摄像机的位置
//由于我们给SphereTransform赋值为小球,所以SphereTransform.position为小球的位置
distance = transform.position - SphereTransform.position;
}
// Update is called once per frame
void Update () {
//主摄像机的位置为每次小球移动的位置+之间的距离
transform.position = SphereTransform.position + distance;
}
}