Unity初心者がRotationを理解するための第一歩

transform.rotationは
Quaternion というデータフォーマットを基に決定されています。

一般的に利用されているオイラー角度(360度で1回転)とは異なる概念で、
直感的な理解が難しいと思います。

Inspector上では、オイラー角度で表示されているし、変更もできると思う方もいるかもですね。
どうやら、Inspecterに表示の際はQuaternion→オイラーへ変換されて表示されているようです。

つまり、
Quaternion と オイラー角度 はお互いに変換可能な数値ということです。

Quaternion.eulerAngles : 
Quaternion → オイラー角への変換メソッド

Vecto3 型で、(x軸の角度,  y軸の角度, z軸の角度)というデータ
数値はfloat
transform.rotation.eulerAngles で、transformのオイラー角度が算出

https://docs.unity3d.com/ja/540/ScriptReference/Quaternion-eulerAngles.html

Quaternion.Euler :
オイラー角 → Quaternionへの変換メソッド
上記、Quaternion と オイラー角度 を変換させる方法を説明してきました。

これらを用いれば、オイラー角度を用いて、rotationを操作する方法も可能ということです。

しかし、オイラー角度を用いた簡単な方法があります。
それがRotateメソッドです。

Transform,rotate(x, y, z, relativeTo )
x軸・y軸・z軸に対して、Transformを回転させる角度を変更することが可能です。
現在のTransformに対して、角度を加算します。

relativeToとは
ローカル座標を基準にするのか ・ ワールド座標を基準にするのかを指定することが出来ます。

x, y, zは、オイラー角度で、数値はflaot

Unity 時間差でSceneを遷移する方法

本日はScene遷移の方法を、時間差で実行します。
対戦型ゲームを作っていて、勝敗がついた後に、Sceneを遷移したいけれども時間を置いてから遷移したいとき等に活用できると思います。

(1):Scene遷移の方法を簡単に紹介
(2):遷移方法に時間差を付ける処理を追加

(1):Scene遷移の方法を簡単に紹介

a:Sceneを追加
b:空のGameObjectを追加
 → C#スクリプト(toFinish classを作成) をAdd component
c:scriptを編集
d:遷移したいタイミングでSceneManager.LoadScene()を含んだ処理を呼び出す

#classに継承しておく。SceneManagerを使えるようにする
using UnityEngine.SceneManagement;

#関数内で処理を実行する宣言をしておく
public class toFinish : MonoBehaviour
{ 
   public void OnfinishGame()
   {
   SceneManager.LoadScene("Sceneの名称");
   }
}

(2):遷移方法に時間差を付ける処理を追加

一番簡単に時間差を作れる、Invokeを呼び出して見ましょう。
遷移したいタイミングの関数をfinish()とした際に

private void finish ()
{
        //3秒後にCall関数を実行する
        Invoke("Call", 3f);
 }
}

void Call()
{
  #遷移する処理を呼び出し
    OnfinishGame();
}

UnityのCanvas RenderModeについて深堀りしてみたVer2

以前、UnityのCanvasについて紹介しました。
Render ModeをScreen-Space Cameraについてお話しました。
Screen-Space Cameraとは、CameraのViewの範囲の特定エリアに常にCanvasを配置しておく、といった設定でした。

今回は、World Spaceについて深堀りしてみたいと思います。

通常の使い方でいうと、Scene全体を示す World SpaceにCanvasを貼り付けることを想像する人もあるかもしれないですが、今回は特定Objectに対してWorld Spaceを設定することです。

特定のObjectをA Objectとした際に、Aを親・Canvasを子としてRender ModeをWorld Spaceに設定します。

そうすることで何が出来るようになるかと言うと、
特定のObject Aに対して、クッツイた状態のCanvasが設定することが出来るのです。
イメージがつきますでしょうか??

よくある例でいうと
・ゲームのHPを特定のPlayerにクッツイた状態で表記
・Playerに表記する矢印キーをくっついた状態で表記
など色々と応用可能かと思います。

UnityのCanvasのRender Modeについて深堀りしてみた

Render Modeについて調べていたら、めちゃくちゃ分かりやすい記事に出会いました。
https://light11.hatenadiary.com/entry/2019/04/15/232416

で、これでも相当理解できたのですが、
Render ModeをScreen-Space Cameraの理解を深めました。
というか、Canvasのサイズに起因している要素について2つのパラメータが影響しています。

(1):CanvasをScene上に配置してください。
(2):Render ModeをScreen-Space Cameraへ変更
(3):Render Mode > Render CameraにMain Cameraを設置

ここまで前準備で行ってみてください。

ここから調整してみて欲しいパラメーターは
①:Canvasの Plane Distance
②:Main Cameraの Field of View

この2つのパラメータを調整してみると、Canvasのサイズも同時に変化していることが分かると思います。
当たり前と言えば当たり前なのですが(Screen-Space CameraはCameraのサイズにFitしたCanvasなので)

実際に、パラメーターを調整してみると、Screen-Space Cameraがどんな設定なのか分かると思います。

UnityのNavMeshを使う

Unityを学習してまだまだ日が浅いのです。
C#については、そこそこ理解してコードを記述できるんですが
Unityが持っている様々な機能の理解はまだまだ….

NavMeshは非常に便利だということでして、少し使ってみました。
NavMesh
 → Playerが行動できるエリアを規定するもの
という感じでしょうか。

NavMeshを使い始めるには
ウィンドウ (Window > AI > Navigation) を表示することから始まります。

https://docs.unity3d.com/ja/2018.4/Manual/nav-BuildingNavMesh.html

Navigationには、主に4つの設定内容があります。
・Agent
・Areas
・Bake
・Object

・Agent
 → 後ほど、解説
・Areas
 → どんなエリアが存在するのか。 コストといった概念を設定できる
・Bake
 → NavMeshを設定
・Object
 → ObjcetをNavMeshに設定可能にする

NavMeshは、単体で使うというよりも
NavMeshAgentというコンポーネントを併用することが多いかと思います。
NavMeshAgentは、設定に従い、考えて動いてくれるもの。という感じです。

NavMeshで設定した、エリアの中で、
NavMeshAgentの指示に従って、動くキャラクターを制作することができます。

UnityのAnimatorControllerにおけるTransitionのデフォルト設定について

AnimatorControllerの中で、AnimationClipを遷移させる特定の発火タイミングのみで、実行する環境を設定する方法を紹介します。

遷移させる基と遷移先のAnimationClipを、それぞれclipA・clipBと呼称します。

デフォルト設定の場合は clipA → clipB へ Make Transitionで結んだ際に
自動的に、clipAが終了した際に、clipBへ遷移してしまうということがあります。

なので、この遷移に対して、
Conditionsを設定する必要があります。

Conditionsを設定する為には
( 1 ):Parameterの設定
( 2 ):ConditionsでParameterを追加して、発火条件を指定

そうすると、発火条件のタイミングで遷移するようになります。