Aizu-Progressive xr Lab blog

会津大学のVR部であるA-PxLの部員が持ち回りで投稿していくブログです。部員がそれぞれVRに関する出来事やVRにちなんだことについて学んだことを書いていきます。

連絡はサークルTwitterのDMへお願いします。
「面白法人カヤックVR分室」としても活動しています。詳細はこちら

unityでよく使うC#のクラス、メソッド、などの話

f:id:aizu-vr:20210426010930p:plain

はじめまして、学部一年の渡辺です。 初めてのブログということで、自分のような初心者の方に役立ちそうなテーマについて書こうと思います。 と、言ってもまだunityを触り始めて半年弱(モデリングにも挑戦したりしていたので実質3か月くらい)なので、間違いがあるかもしれません。その場合、指摘してくださるとうれしいです。(のちのち画像等追加します)

よく使うもの

はじめに

私は大学でC、サークルでC#を同時にやったため、オブジェクト指向型についての理解をちゃんとせずに勉強してしまったため、かなり学ぶ上で混乱が生じました。 そのためまずオブジェクト指向型の理解をすべきだと思います。

クラス

Input

まずゲームといえばプレイヤーをコントロールしなければなりません。 コントローラーなりキーボードなりの入力を受け付ける。

メソッド 説明
Input.GetKey 押している間
Input.GetKeyDown 押した瞬間
Input.GetKeyUp 離した瞬間
Input.GetMouseButton(0) 左ボタン
Input.GetMouseButton(1) 右ボタン
Input.GetMouseButton(2) 中ボタン

使用例

if (Input.GetKey(KeyCode.W))

Input.GetAxis() float型で返す

使用例

void Update()
{
  float h = horizontalSpeed * Input.GetAxis("Mouse X");
  float v = verticalSpeed * Input.GetAxis("Mouse Y");

  transform.Rotate(v, h, 0);
}

Edit -> Project Settings -> InputでInputManagerが見れます。

GameObject

ゲーム内のオブジェクトを扱うクラス

変数 説明
transform ゲームオブジェクトの位置
layer ゲームオブジェクトのレイヤー
tag ゲームオブジェクトのタグ
name 名前

Transform

オブジェクトの位置、回転、スケールを扱うクラス

変数 説明
position ワールド座標における位置(Vector3)
rotation ワールド座標における方向(Quaternion)
localScale 大きさ
forward 物体が向いている方向
  • transform.LookAt(target((Transform target)));targetに向かせる

SceneManager

シーンの切り替え等に利用できます。 タイトル画面やリザルト画面を作るときに必要になるかと。

使用する際は using UnityEngine.SceneManagementと宣言する必要があります。またFile->BuildSettingsでシーンの登録をする必要があります。

使用例

SceneManager.LoadScene("シーン名");

Rayの使い方


Rayは光線という意味ですが、unityでもよく使います。 ある点から光線を出し、当たったオブジェクトの情報を取得できます。 いろいろとややこしいですが、覚えるとかなり便利かと思います。

Ray

Rayの宣言

Ray(origin(原点), direction(方向))

使用例

Ray ray = new Ray(transform.position, transform.forward);

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

RaycastHit

Rayの当たったものの情報を得る。

変数 説明
transform 衝突したコライダーまたは Rigidbody の Transform
collider ヒットしたコライダー
distance レイの原点から衝突点までの距離

Physics.Raycast

Physics.Raycastには二つ方法があります。

  1. Physics.Raycast(原点, 方向, out hit*1, Rayの長さ, 当たるレイヤー);
  2. Physics.Raycast(ray*2, out hit, Rayの長さ, 当たるレイヤー);

Rayの長さは指定しない場合無限になります。 レイヤーは指定しない場合すべてのレイヤーが対象です。

当たり判定


OnCollisionEnter関数

衝突したかどうかを判断する関数です。

void OnCollisionEnter(Collision 当たった物体)
{
  Debug.Log(当たった物体.gameObject.name);
}

OnTriggerEnter関数

物体のColliderのIsTriggerにチェックを入れた場合、衝突しなくなりすり抜けます。 その場合の当たり判定はOnTriggerEnter関数を使います。

void OnTriggerEnter(Collider 入った物体)
{
  Debug.Log(入った物体.gameObject.name);
}

最後に


今までコピペしてそれっぽいスクリプトを書いていましたが、今後は自力で書けるようになりたいと思い、この記事を書かせていただきました(というかほぼメモ)。同じような方のお力になれていたら幸いです。 学んだことがあったらこれからも追加していきたいと思います。

参考にさせていただいたサイト


*1:RaycastHit hit

*2:Ray ray

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!