1. カメラを動かそう
前回、ボールを動かすところまでは行きましたが、カメラが動いていませんでした。
このままだと、ボールを見失ってしまうかもしれません。てか、たぶん見失います。
なのでボールを追跡するような感じでカメラ追従のコードを書いていこうと思います。
カメラ用のスクリプトを作成。
この”CameraController”にカメラがボールに合わせて動くようにコードを書いていく。
2. コードを書いていく
ボールを打つとそれに伴ってカメラが動くようにコードを作っていきます。
using Unity.VisualScripting;
using UnityEngine;
public class CameraController : MonoBehaviour
{
public Transform target; //�Ǐ]���������^�[�Q�b�g
[SerializeField] private Vector3 offset = new Vector3(0f, 5f, -7f); //�J�����ƃ^�[�Q�b�g�̋���
[SerializeField] private float smoothSpeed = 5f; //�Ǐ]���x
[SerializeField] private float stopVelocityThreshold = 0.1f; //�{�[������~�����Ƃ݂Ȃ����x��臒l
private Rigidbody targetRb; //�^�[�Q�b�g��rb
private bool isFollowing = false; //�J������Ǐ]�����邩�ǂ���
private void Start()
{
if(target != null)
{
targetRb = target.GetComponent();
}
}
private void LateUpdate()
{
if (target == null) return;
UpdateFollowState();
if (isFollowing)
{
Vector3 desiredPosition = target.position + offset; //�ڕW�ʒu�̌v�Z
Vector3 smoothedPosition = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed * Time.deltaTime); //���݈ʒu��ڕW�ʒu�܂ŃX���[�Y�Ɉړ�
transform.position = smoothedPosition;
transform.LookAt(target);
}
}
//�Ǐ]���J�n�E��~�����
void UpdateFollowState()
{
if (targetRb == null) return;
if(targetRb.linearVelocity.magnitude > stopVelocityThreshold)
{
isFollowing = true;
}else if(targetRb.linearVelocity.magnitude <= stopVelocityThreshold && targetRb.IsSleeping())
{
isFollowing = false;
}
}
}
なんか、コメントだけ文字化けしてますね。まあ、コードはしっかり動くので、まぁいいや。
このスクリプトを”Main Camera”にくっつけ、ターゲットにボールをセットします。
実際に動かすとこんな感じですね。
ボールを打つとカメラが滑らかに動くように作れました。
3. まとめ
今回は、ボールを打つとカメラが動くようにコードを書いてみました。次は、ボールが壁にボールが当たった時にいい感じにボールが跳ね返るようしていきます。