自分用メモであり同じような初心者の方へ向けた自分なりの解説
名称がちゃんとあっているのかどうかは正直わかりませn
WASDや矢印キーを入力をしたときに移動させる
適当に作ったゲームオブジェクトにRigidbody
コンポーネントを追加してから
以下の様にスクリプトを書く
public class NewBehaviourScript : MonoBehaviour
{
//Rigidbody型のrbという変数を作る
private Rigidbody rb;
//float型のpowerという変数を作り、3fを代入する
private float power = 3f;
private void Start()
{
//リジットボディを取得しrbに代入する
rb = GetComponent<Rigidbody>();
}
void Update()
{
//キー入力による値を代入(解説は後で
float x = Input.GetAxisRaw("Horizontal");
float z = Input.GetAxisRaw("Vertical");
//↑で代入された値をVector3型のIdouHoukouという変数に代入する
Vector3 IdouHoukou = new Vector3(x, 0, z);
//rbに力を加える
//velocityは質量などの物理演算を無視するときに使う
rb.velocity = IdouHoukou * power;
//rbの回転をさせない様にする
rb.constraints = RigidbodyConstraints.FreezeRotation;
//移動範囲の制限
transform.position = new Vector3(
Mathf.Clamp(transform.position.x, -5f, 5f),
Mathf.Clamp(transform.position.y,1f,1f),
Mathf.Clamp(transform.position.z, 5f, 5f));
}
}
これでWASDや矢印キーを入力したときに移動が出来るようになります
解説コーナー
入力受付
Input.GetAxisRaw("Horizontal");
Input.GetAxisRaw("Vertical");
Input.GetAxisRaw
とは入力された物に対してint型(整数)で-1~1を返す
Horizontal
はA
,D
と←
,→
がUnityに初期設定として登録されており、
A
や←
が入力されている時は-1
、
何も入力されていない時は0
、
D
や→
が入力されている時は1
を返す
同じようにVertical
は、
s
と↓
が入力されている時は-1
、
何も入力されていない時は0
、
w
と↑
が入力されている時は1
を返す
つまり先ほど書いた以下の
Vector3 idou = new Vector3(x, 0, z);
new Vector3(x, 0, z)
このx
部分とz
部分に-1
,0
,1
が代入される
動かす
rb.velocity = idou * speed;
とあるので
x
の値が-1
ならx(-1)*speed(3f)
となりx軸
に-3f
の力を加える
x
の値が0
ならx(0)*speed(3f)
となりx軸
に0
の力を加える
x
の値が1
ならx(1)*speed(3f)
となりx軸
に3f
の力を加える
ということになる
y軸
も同じ考えなので割愛
転がらないようにする
rb.constraints = RigidbodyConstraints.FreezeRotation;
こちらはゲームオブジェクトのインスペクタ内の
Rigidbody
コンポーネントの下部にある
constraints
という項目の2段目にある
回転するかどうかのチェックマークをスクリプト上でつけているだけなので
チェックマークを付けた場合は記入しなくても問題はありません。(てかチェック付けた方が楽)
移動範囲に制限をつける
transform.position = new Vector3(
Mathf.Clamp(transform.position.x, -5f, 5f),
Mathf.Clamp(transform.position.y,1f,1f),
Mathf.Clamp(transform.position.z, -5f, 5f));
Mathf.Clamp(対象,最小値,最大値)
を使用することで
簡単にtransform.position
がMathf.Clamp()
内の範囲以上には移動できなくなるという処理が作れます
使わない場合
if (transform.position.x >= -5f)
{
transform.position = new Vector3(-5f, transform.position.y, transform.position.z);
}
こんな感じの物をx
,y
,z
それぞれ2パターンで合計6回も書くことになるのでMathf.Clamp
は偉大です
以上