はじめまして、学部一年の渡辺です。 初めてのブログということで、自分のような初心者の方に役立ちそうなテーマについて書こうと思います。 と、言ってもまだ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には二つ方法があります。
- Physics.Raycast(原点, 方向, out hit*1, Rayの長さ, 当たるレイヤー);
- 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); }
最後に
今までコピペしてそれっぽいスクリプトを書いていましたが、今後は自力で書けるようになりたいと思い、この記事を書かせていただきました(というかほぼメモ)。同じような方のお力になれていたら幸いです。 学んだことがあったらこれからも追加していきたいと思います。