SFMLでゲームを作りたかったんですが
ゲーム開発の初心者には簡単ではなかったので
Unity(ユニティ)にしばらく目を向きました。
何回も探している内容は整理して置くことにしました。
基本設定
=======
GameObject >>3D Object >>Plane
GameObject >>3D Object >>Cube
Cubeが基本的にPlaneに半分埋められているので
Scale(Y:高さ)1の半分の値をPosition(Y:位置上下)0.5に設定してPlaneの上にちょうど置かれようにしました。
カメラで見える画面を調整します。
Main Cameraを選択した状態で GameObject >>Align With Viewを選択すると現在Sceneに表示されているのがカメラの視点に設定されます。
Assets>>Create>>Meterial
作られたMeterialを選択、Inspector:Main Maps:Albedoで色を変更後CubeへドラックアンドドロップしてCubeの色を変更しました。
Assets>>Create>>C# Script
スクリプトを1つ作成、Cubeへドラックアンドドロップして連結しました。
=======
移動処理
=======
1.Transform.Translate利用
GameObjectのTransform(Position,Rotate,Scale)のPositionを直接Translateメソッドを利用して移動させる方法です。
Transform.Translate
--------------
void Update ()
{
if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(Vector3.back * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A))
{
transform.Translate(Vector3.left * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D))
{
transform.Translate(Vector3.right * Time.deltaTime);
}
}
print(Vector3.forward)でUnityのConsoleから確認した値です。
Vector3.forward →(0.0, 0.0, 1.0) z値の 1 増加
Vector3.back →(0.0, 0.0, -1.0) z値の 1 減少
Vector3.right →(1.0, 0.0, 0.0) x値の 1 増加
Vector3.left →(-1.0, 0.0, 0.0) x値の 1 減少
早く移動させたい場合はspeedような変数を作って乗じると良いと思います。
Time.deltaTimeは最後プレームの処理にかかった時間でプレーム速度を独立的にしたい場合利用と説明されていました。
Time.deltaTime
端末の仕様によって(プレーム別処理速度が違う場合)固定でプレーム当処理をすると差が出る可能性あるので時間当(仕様に合わせて調整)する値と理解しました。
--------------
2.RigidBody.Velocity利用
GameObjectへ物理的な速度(RigidBody.Verocity)を加えて移動させる方法です。
Rigidbody.velocity
先ずCubeを選択した状態で
Component>>Physics>>Rigidbodyを追加します。
--------------
private Rigidbody rb;
void Start ()
{
rb = GetComponent<Rigidbody>();
}
void Update ()
{
if (Input.GetKey(KeyCode.W))
{
//rb.velocity = new Vector3(0, 0, 1);
rb.velocity = Vector3.forward;
}
if (Input.GetKey(KeyCode.S))
{
rb.velocity = new Vector3(0, 0, -1);
}
if (Input.GetKey(KeyCode.A))
{
rb.velocity = new Vector3(-1, 0, 0);
}
if (Input.GetKey(KeyCode.D))
{
rb.velocity = new Vector3(1, 0, 0);
}
}
rbを別に宣言しなくGetComponent<Rigidbody>().verocityでも利用可能です。
new Vector3(0,0,1)のように直接Vector値を入れでもVector3.forwardにしても可能です。
(追加)
rigidbodyを利用した処理は物理シミュレーションで、この場合はUpdate()よりはFixedUpdate()を利用するのが良いことでした。
Update()はプレーム単位で呼ばれて、 FixedUpdate()は物理処理単位で呼ばれます。
Update と FixedUpdate
作動されるとCubeが転がりながら移動します。
Cubeに追加したRigidbodyのConstrains:Freeze RotationのX,Zへチェックすると転がらなくなります。
--------------
3.RigidBody.AddForce利用
GameObjectへ物理的な力(RigidBody.AddForce)を入れて移動させる方法です。
Rigidbody.AddForce
--------------
private Rigidbody rb;
void Start ()
{
rb = GetComponent<Rigidbody>();
}
void Update ()
{
if (Input.GetKey(KeyCode.W))
{
//rb.AddForce(new Vector3(0, 0, 10));
rb.AddForce(Vector3.forward*10);
}
if (Input.GetKey(KeyCode.S))
{
rb.AddForce(new Vector3(0, 0, -10));
}
if (Input.GetKey(KeyCode.A))
{
rb.AddForce(new Vector3(-10, 0, 0));
}
if (Input.GetKey(KeyCode.D))
{
rb.AddForce(new Vector3(10, 0, 0));
}
}
new Vector3(0,0,10)、Vector3.forwardどちらも利用可能でした。
力の値もVector3で表現されるようです。10ぐらいの値が必要でした。
--------------
=======
Unity(유니티) 정리: 01.이동
2018년 3월 9일 금요일
피드 구독하기:
댓글 (Atom)
1、2、QWER! in OSAKA (大阪 2025/4/10(木) Yogibo META VALLEY)
https://www.creativeman.co.jp/event/qwer-osaka/ QWER - CREATIVEMAN PRODUCTIONS 主催:LIVET 企画:ソニー・ミュージックソリューションズ 招聘:クリエイティブマンプロダクション 制作協力:クリエイテ...
-
PART-1에 이어 정리합니다. https://youtu.be/I36KvRwpOvk WHO'S THE BRAVEST? 누가 가장 용감한가요? 유주 소원 예린 은하 유주 신비 엄지 유주 유주 신비 유주 은하 신비 0 0 1 3 2 0 신비)...
-
ニュースやネットでビットコインや仮想通貨の話が多くなり、 TVのCMにも出るようになりました。 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 200倍上がった! 何も意味ないことでギャンブルと違いない。 今、買うのは危ない。 ま...

댓글 없음:
댓글 쓰기