シーンの作成
FileのNew Sceneからシーンを作成する
Basic選択でCreate
作成後はコントロール+Sで任意の名前をつけてセーブ
今回はmainというシーンで保存
シーン名が変わる
ステージとプレイヤーの制作
hierarchy左上の+アイコンの3Dobjectからcubeとsquareを作成し、Cubeでステージを作る
squareにリジッドボディを追加
再生すると落ちるようになる。
さらにsquareにNewスクリプトを追加名前はplayercontroller
アセットにできたplayercontrollerを開く
下のコードを記述する。
using UnityEngine;
public class playercontroller : MonoBehaviour
{
public float torque = 10f; // 回転の強さ
private Rigidbody rb;
void Start()
{
// Rigidbody コンポーネントを取得
rb = GetComponent<Rigidbody>();
if (rb == null)
{
Debug.LogError("Rigidbodyがアタッチされていません。");
}
}
void Update()
{
// 矢印キーの入力を取得
if (Input.GetKey(KeyCode.RightArrow))
{
// 右矢印キーで右方向に回転
rb.AddTorque(Vector3.back * torque);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
// 左矢印キーで左方向に回転
rb.AddTorque(Vector3.forward * torque);
}
else if (Input.GetKey(KeyCode.UpArrow))
{
// 上矢印キーで前方向に回転
rb.AddTorque(Vector3.right * torque);
}
else if (Input.GetKey(KeyCode.DownArrow))
{
// 下矢印キーで後方向に回転
rb.AddTorque(Vector3.left * torque);
}
}
}
以下他の動かし方
1. Transformの回転を直接操作する
transform.Rotate
メソッドを使って、オブジェクトを特定の角度で回転させます。
例
void Update()
{
float rotationSpeed = 100f;
if (Input.GetKey(KeyCode.RightArrow))
{
// Y軸周りに時計回りの回転
transform.Rotate(Vector3.up * rotationSpeed * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
// Y軸周りに反時計回りの回転
transform.Rotate(Vector3.down * rotationSpeed * Time.deltaTime);
}
}
- メリット: Rigidbodyが不要。
- デメリット: 物理演算(摩擦や慣性など)が考慮されない。
2. Rigidbodyの角速度を操作する
Rigidbody.angularVelocity
プロパティを使用して、回転速度を直接制御します。
例
void Update()
{
float angularSpeed = 5f;
Rigidbody rb = GetComponent<Rigidbody>();
if (Input.GetKey(KeyCode.RightArrow))
{
rb.angularVelocity = new Vector3(0, angularSpeed, 0);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
rb.angularVelocity = new Vector3(0, -angularSpeed, 0);
}
else
{
rb.angularVelocity = Vector3.zero; // 停止
}
}
- メリット: 物理演算を活用できる。
- デメリット: トルクのような「力」ではなく、直接速度を変更するのでリアルな挙動ではない。
3. Positionを直接変更する
回転ではなく、オブジェクトの位置を直接操作することで動かす方法。
例: 平行移動
void Update()
{
float moveSpeed = 5f;
Vector3 move = Vector3.zero;
if (Input.GetKey(KeyCode.UpArrow))
{
move = Vector3.forward * moveSpeed * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.DownArrow))
{
move = Vector3.back * moveSpeed * Time.deltaTime;
}
transform.position += move;
}
- メリット: 非常に簡単。
- デメリット: 物理演算が考慮されない。
4. Rigidbodyの速度を設定する
Rigidbody.velocity
を使ってオブジェクトを移動させます。
例: 移動
void FixedUpdate()
{
float moveSpeed = 5f;
Rigidbody rb = GetComponent<Rigidbody>();
if (Input.GetKey(KeyCode.UpArrow))
{
rb.velocity = Vector3.forward * moveSpeed;
}
else if (Input.GetKey(KeyCode.DownArrow))
{
rb.velocity = Vector3.back * moveSpeed;
}
else
{
rb.velocity = Vector3.zero; // 停止
}
}
- メリット: 物理エンジンを活用。
- デメリット: 慣性や摩擦を直接扱いにくい場合がある。
5. Quaternionを使って回転
Quaternion
を直接操作してオブジェクトの回転を変更します。
例
void Update()
{
float rotationSpeed = 100f;
if (Input.GetKey(KeyCode.RightArrow))
{
transform.rotation *= Quaternion.Euler(0, rotationSpeed * Time.deltaTime, 0);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
transform.rotation *= Quaternion.Euler(0, -rotationSpeed * Time.deltaTime, 0);
}
}
- メリット: 回転をより細かく制御できる。
- デメリット: 初心者には少し複雑。
コメント