Youtube上にunityの教材が落ちていたので、プログラミング初心者の私が、unityとvisual StudioでVRを作ってみました。
下記の動画の1から5話の部分に相当します。
最初からC言語を思いっきり使っている動画でしたが、コードは画面上で示してくれたので基本書き写せば大丈夫でした。
一部2019年版のvisual Studioに修正したコードを一緒に張り付けておきます。
動画は2017年版を使用しているので、表現方法が異なっており、同じ記述ではエラーが出てしまいました。
言語を使用する場面は、コントローラー操作と接敵時の反応、オートの敵の動きというゲーム上での物理法則以外の動作を表現するときに使っているようです。
そもそもunityに重力などの物理法則が組み込まれて、クリックだけで実装できてしまうことに感動しました。
一番時間がかかった部分はvisual Studioとunityの連動で、unityがうまくvisual Studioを読み込まず、試行錯誤しました。
結局、両ソフトをアンストールして再度設定しなおすことで直りました。
unityのダウンロード画面も変更されているので、動画とは異なる部分が多々あります。
visual Studioをきちんとダウンロードするために、個人で、かつ、以前unityを使ったことがある人という分類を選びなおしました。
ダウンロード後、unityで連携設定を行わなければいけないのですが、edit→
preferences→External Script Editorと進み、Visual Studio 2019に設定してください。
私はここでVisual Studioインストーラーを設定してしまい3時間ほど無駄にしました。
インストーラーはきちんと展開して、Visual Studio 2019してから入れましょう。
参考までに実際に動いたコードを下記に張り付けておきます。
プレイヤーをコントローラーで動かす処理(入門動画2)
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private void FixedUpdate()
{
//Rigidbodyを取得
Rigidbody rigidbody = GetComponent<Rigidbody>();
//方向キーの入力
float x = Input.GetAxis("Horizontal"); //横軸
float z = Input.GetAxis("Vertical"); //縦軸
//ベクトルに変換
UnityEngine.Vector3 vec = new UnityEngine.Vector3(x, 0, z);
//力を加える
rigidbody.AddForce(vec);
}
}
敵を吹き飛ばす処理(入門動画4)
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 10;
public float blowSpeed = 1000;
private void FixedUpdate()
{
//Rigidbodyを取得
Rigidbody rigidbody = GetComponent<Rigidbody>();
//方向キーの入力
float x = Input.GetAxis("Horizontal"); //横軸
float z = Input.GetAxis("Vertical"); //縦軸
//ベクトルに変換
UnityEngine.Vector3 vec = new UnityEngine.Vector3(x, 0, z);
vec = vec * speed;
//力を加える
rigidbody.AddForce(vec);
}
//衝突したときに呼ばれる処理
private void OnCollisionEnter(Collision collision)
{
//Enemyと衝突したか?
if (collision.gameObject.CompareTag("Enemy"))
{
//衝突情報を取得
ContactPoint contact = collision.contacts[0];
//プレイヤーを吹き飛ばす処理
Rigidbody rigidbody = GetComponent<Rigidbody>();
rigidbody.AddForce(contact.normal * blowSpeed);
}
}
オブジェクトに運動させる場合の処理(入門動画5)
using UnityEngine;
using UnityEngine.EventSystems;
public class EnemyController : MonoBehaviour
{
public float moveSpeed = 1.0f; //移動速度
public float moveDuration = 1.0f; //動作の継続時間
public int moveDirection = 0; //移動方向 0…左 1…右
float moveElapsedTime = 0; //動作経過時間
//更新処理
void Update()
{
//動作開始からの経過時間を測定
moveElapsedTime = moveElapsedTime + Time.deltaTime;
//継続時間終了
if (moveElapsedTime >= moveDuration)
{
//移動方向を切り替え
//左→右
if(moveDirection == 0)
{
moveDirection = 1;
}
//右→左
else if (moveDirection == 1 )
{
moveDirection = 0;
}
//経過時間をリセット
moveElapsedTime = 0;
}
//左に移動
if(moveDirection == 0)
{
this.transform.position += new Vector3(-moveSpeed, 0, 0) * Time.deltaTime;
}
//右に移動
else
{
this.transform.position += new Vector3(moveSpeed, 0, 0) * Time.deltaTime;
}
}
}
では、素晴らしいVRライフをお楽しみください。