アフィリエイト広告を利用しています

現在ははてなブログで投稿しています!

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2017年07月26日

「3DのARPGを作ってみよう!」ゲームの完成イメージ!

この記事、絶対最初に載せるべきでしたよね......。
忘れていた...。



気を取り直して、
この記事のカテゴリーである、

「3DのARPGを作ってみよう!」

の完成イメージをYouTubeにアップしました。



大体は、このイメージを目指していきますが、
もう少し「ゲームとしてプレイできる」レベルまで
引き上げたいと思っています!


ですので、動画にあるのに実装しなかったり、
動画にないものが実装されたりと...。

そんな事があると思います。

まぁ、気長に付き合って下さい!



スポンサードリンク








2017年07月25日

unityでプレイヤーを動かす:変数の解説

前に出して実装した
プレイヤーの移動のプログラムの、
変数部分を解説します。


プログラムの理解は大事なんですけど、
上手く説明出来てるかどうか…


というか、こんなチマチマ記事を出すより、
一気に出した方が良いんだろうか…。


まぁ、それはそれでまた考えます。


そろそろ本題に入りましょう。

スポンサードリンク




変数部分


まず、変数はどこかというと、
public Animator anim;

public bool isGrounded;

public RaycastHit hit;

public float InputHorizontal;
public float InputVertical;
public Rigidbody rb;
public float moveSpeed;
public float jumpPower = 30f;
public GameObject Cam;
public Vector3 Cam_forward;
public Vector3 move_forward;
public Vector3 InputMagnitude;

これですね。

これが変数の全体図になります。


この中の初めの一行、
public Animator anim;


これは、キャラクターを
走らせる、歩かせる、剣を振るなどの
「アニメーション(キャラの動き)」を
設定するのに使います。

ですが正直いって今回の
「プレイヤーの移動」には要らないので
説明は後回しにして、また後日ですね。


public bool isGrounded;

これは、接地判定に使います。

処理の方は後日説明しますが、
地面に着いているか、いないか
を判定します。


地面に着いていれば true、
着いていなければ false として使います。


public RaycastHit hit;

これも接地判定で使います。


「地面に当たっているか」を
判定するのに使います。


public float InputHorizontal;
public float InputVertical;

これらは上から順に、
横の入力
縦の入力となっています。

プレイヤーの移動にはキー入力が
欠かせませんので、この2つの変数に
「入力時の数値」を代入して使います。



public Rigidbody rb;

これは、物理演算です。
重力や、力を加えるのに使えます。


本プログラムでは、
この変数へは必須です。



何故かというと、本プログラムでの移動は
物体に「加速度」を加える事で
移動を表現します。


他にも位置自体を移動させたり
unityにある「キャラクターコントローラー」
というのも使えます。


ですが個人的にキャラクターコントローラーは
好きではありませんのでこれの移動はまた記事を…
………書くかなぁ?



public float moveSpeed;
public float jumpPower = 30f;

これらは上から順に
移動速度ジャンプさせる力です。


ジャンプは、「上向きに力を加えて」
表現するため、この様に「どのくらいの力か」を
決めておきます。



public GameObject Cam;
public Vector3 Cam_forward;
public Vector3 move_forward;

Camは、移動の方向を決めるためのカメラです。


必要があればプログラムで取得しますが、
今はインスペクタからで良いでしょう。


Cam_forwardは、
「プレイヤーが進むべき正面」です。

カメラの向きからキャラクターが
進む、正面として使います。


move_forwardは、カメラの向きに関係なく、
入力から進む方向を決める」のに使います。


例えば、カメラの正面に対して
後ろに進むのか右に進むのか、など
「キーの入力」からの進む方向を扱います。



public Vector3 InputMagnitude;

これで変数は最後ですね。


これは何に使うのかというと、
入力の大きさ」で使います。


例をあげると、
「キーの押し込みが
 小さすぎる場合は移動しない」
という処理を作るのに役立ちます。


終わりに

以上が変数全体となります。

ここでは大体のイメージしか
記述していないので、
分からなかったところもあるかと ^_^;


そこは、実際の処理を解説する時に
もう少し詳しくやるのでご安心を!


では、この辺にしたいと思いますが……。

……未だに記事を一括で書くかどうか
結論が出ません……。

どちらの方が良いのでしょうか…?



スポンサードリンク






2017年07月24日

ゲームプログラム アクションロールプレイングゲームを作る youtube動画アップのお知らせ

youtubeに、unity5でarpgの接地判定の動画を
アップしました!



以前の動画も見ていってください!

チャンネル登録もお願いします!



スポンサードリンク






2017年07月18日

unity5でプレイヤーの移動をしてみる : 取り敢えず実装

今回は、解説なしで取り敢えず実装、という形で
この記事はやっていきます。

更新、遅れましたね...。
色々大変でした...。

夏休みだというのに、
課題と部活ばかりですし...。



まぁ、気を取り直していってみましょう!



スポンサードリンク




ソースコード

まずはソースコードを出しますね。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player_Move : MonoBehaviour {

 public Animator anim;
 public bool isGrounded;
 public RaycastHit hit;

 public float InputHorizontal;
 public float InputVertical;
 public Rigidbody rb;
 public float moveSpeed;
 public float jumpPower = 30f;
 public GameObject Cam;
 public Vector3 Cam_forward;
 public Vector3 move_forward;
 public Vector3 InputMagnitude;

 void Start () {
  rb = this.gameObject.GetComponent<Rigidbody>();
  anim = this.gameObject.GetComponent<Animator>();
 }

 void FixedUpdate () {
  //*****接地判定*****//
  if (Physics.SphereCast(this.gameObject.transform.position + new Vector3(0, 2f, 0), transform.lossyScale.x * 0.5f, Vector3.down, out hit, 2f)) {
   isGrounded = true;
  } else {
   isGrounded = false;
  }
  //*****************//
  }

 void Update() {
  if (isGrounded) {
   InputHorizontal = Input.GetAxis("Horizontal");
   InputVertical = Input.GetAxis("Vertical");
   InputMagnitude = new Vector3(InputHorizontal, 0, InputVertical);

   jumpPower = 30f;

   //*****移動*****//
   Cam_forward = Vector3.Scale(Cam.transform.forward, new Vector3(1, 0, 1)).normalized;

   move_forward = Cam_forward * InputVertical + Cam.transform.right * InputHorizontal;

   rb.velocity = move_forward * moveSpeed + new Vector3(0, rb.velocity.y, 0);

   //移動方向に向きを変える
   if (move_forward != Vector3.zero) {
    transform.rotation = Quaternion.LookRotation(move_forward);
   }
   //***************//
  }
 }
}


以上がソースコードとなります。

これを使い、プレイヤーの移動を行います。

移動の実装


まず、事前準備として色々します。

始めに、動かすプレイヤーを作成します。

Hierarchyで右クリック、
3D Object > Capsule でカプセルを作成します。

005.png

そしたら、カプセルを選択し、
右のPositionを
x, z を共に0とし、
y を 3 にします。

プレイヤーの作成は終わりです。

006.png

次に、
Project > Create > C# Scriptでスクリプトを作成し、
名前を「Player_Move」とします。

(ここで、Player_Moveとしなければエラーが出ます。
 仕様が分かっていれば変更オーケーです!)

そしたらPlayer_Moveを開き、
初めからから記述してある文章を全て消し、
上のソースコードを貼り付けます。

ここで1つ、訂正をお願いします!
勝手に改行されていなければ、ですが…、

23, 24行目になるでしょうか、
「<>」と、大文字になっているので、
「<>」この様に小文字に直して下さい!


html(インターネット上のブログラム)の
関係で、こうするしかなかったんです……。

2017/8/17 追記
上のメッセージは無視して下さい。
小文字に修正しました。




次はプレイヤー(Capsule)に
「Rigidbody」を付けます。

これがないと動きません!

007.png



そしたら作ったプレイヤー(Capsule)に
Player_Moveと取り付けます。

(ProjectのスクリプトをCapsuleにD&Dでできます。)

これでプレイヤーにスクリプトが取り付けれました。



プレイヤーが動くための地面がないので
地面を作ります。

[Hierarchy > 3D Object > Plane]で地面を作成し、
x, zのScaleを10にします。

これで地面が大きくなったと思います。

そして最後、
プレイヤー(Capsule)についている
「Player_Move」をInspectorで見てください。

008.png

その中にある、「Cam」に
Hierarchyの「Main Camera」をD&Dします。

あとは、実行!

......と言いたいところですが、
Player_Move の MoveSpeed を適当に設定してください。


このままだと、「移動の速度が0」、
つまり移動しないので......。

30くらいが丁度いいかと。



これで、晴れて移動が可能です!


今度こそ、実行すれば動きます!

お疲れ様でした!

終わりに

実装編は、これにて終了です。
後は、解説ですね。

これが終わったら……
何しましょうかね?


まぁ、それは後々
考えていきます。

それでは、また次回まで。


スポンサードリンク








2017年07月13日

Start, Awake関数とは?

Start関数とAwake関数、違いが分かりますか?

とはいえ、違いという違いは
ありませんね。

僕の知識が浅いだけかも
しれないですが(笑)


使いどころといえば、
状況によって変わるくらいでしようか。

こんなこと言っていても
分からないと思うので解説を始めます!

スポンサードリンク



Start関数

これは、よく使ってきましたね。

ゲーム開始直後に一度だけ呼ばれる関数です。

ステータスの初期化とか、
セーブデータのロードなどに使えますね。



......あ、セーブ&ロードの記事も
書きましょうかね。
......いつか。



話を戻しまして、関数はこう書きます。
void Start () { 処理; }

……特に書くことは無いですね。
後は処理を書いていくだけですし(笑)

Awake関数

この関数がStart関数と違う点は、

オブジェクトが非アクティブでも
 Start関数と同じタイミングで呼ばれる


という事だけです。

後はStartと同じですね。

まとめ

結論!

Start関数はオブジェクトが
 非アクティブだと呼ばれないが、
  Awake関数だと呼ばれる!


以上!


スポンサードリンク








2017年07月07日

【unity5】引数を使ってみよう!

僕は思いました。

「あれ?
 あの『はじめに』、
 無くてもいいんじゃない?」

と。

結果、題名を書かずに始めればいい、
との判定を下しましたので
今後は無しの方向でいきたいと思います。

よろしくお願いしますm(_ _)m



スポンサードリンク



引数ひきすうとは?

まず、引数がなんたるかを説明します。



難しく言えば、
関数実行時に渡す値の事です。

簡単に言えば、
お前、関数を実行するならこの値持ってけよ

みたいな感じですかね?

まぁ、手土産的な何かです。

この辺はサンプルを出して
解説していきましょうか。

SampleCode.cs
public class SampleCode : MonoBehaviour {

 void Start () {
  //count変数を宣言
  //50を代入
  var count = 50;

  //countを引数にして、関数実行
  ReceiveValue(count);
 }

 //count を int型 val として受け取る
 void ReceiveValue (int val) {
  //コンソールに出力
  Debug.Log(val);
 }
}


では、解説していきます。

(すみません、using・・・・は
省いています)

Debug.Log();

を見て下さい。

この処理は、()の中の値を
unity の Console に出力します。

まぁ、状況を確認したりするのに
使ったりしますね。





さて、このデバッグ処理はこの前
説明したような気がするのでこの辺にして。

まず、Start関数から見ていきます。


コメント化もしてありますが、
count変数を作り 50 を代入しています。

これは、関数内で宣言しているので、
この関数内でしか使えないはずですね。

ですが、ゲームを実行するとちゃんと
コンソールに「50」と表示されます。

あれ、デバッグ処理があるのは
違う関数のはず……



そこで、引数が関わってくるんですね。

変数作ったあとは、
ReceiveValue関数を実行しています。


これを実行する際に、
引数に count を設定しています。

ですのでRecieveValue()で引数を
受け取れる訳ですね。

引数だけで見ると、
count = val
となるも同然です。



countを引数にして、
valとして受け取る。

RecieveValue関数では、
count を val として使えます。

val = 50 ですね。


まぁ、これが良く分からなかったら
普通に変数を作っちゃえば良んですが(笑)



今回はこの辺になりますかね。

他に説明する事もありませんし。

終わりに


引数、使えると便利ですよ。
スクリプトまたいでも使えますからね。

ですから、覚えておいた方が良いでしょう。

ではでは、今回はこれで。



スポンサードリンク








【unity5】カメラ移動・回転 : ClampAngle関数の解説

前書き

今回で最後の解説編になりますね。

解説が終わったら、
全体の処理の流れを確認して終わりにします。

次からは

「プレイヤーの移動」

をやる、と言ったと思います。
......あれ、言いましたよね?

まぁそれはともかく、
解説していきますね。

スポンサードリンク




ClampAngle () : 解説

static float ClampAngle (float angle, float min, float max) {
 if (angle < -360) { angle += 360; }
 if (angle > 360) { angle -= 360; }
 return Mathf.Clamp(angle, min, max);
}


これが、今回説明する
ソースコードになります。

まず関数から見ていきましょう。



static とあります。

これを付ける事によって、
何処どこからでも呼び出せるようになる、
ということだと思います。
(そうであって欲しいです…)

その次はというと……
float とありますよね?

関数なのに少数型のfloat……。
どういう事でしょうね?


少し、関数の最後の方を見て下さい。

そこに、「return」とあります。
これは値を返すという意味で、
いつもの「void」部分にはというと、
返す値の型を void の代わりに記述します。

これをしないとエラーが出ますよ。

以上の事から、
void → float になっているんですね。




ClampAngle (・・・・・・

には、処理が決まっていません。

StartやUpdateのように
呼ばれるタイミングが決まっていない、
と言うことですね。

なので、呼ばないと実行されません!

そこで、前回の未説明部分がでてきますね。
y = ClampAngle(y, yMinLimit, yMaxLimit);

これです。

ここで、呼んでますよね?

そして何やら y だとか yMinLimit だとか、
良く分からないものがあります。

これらが、引数となります。

引数が何か、というのはこちらの
引数を使ってみよう!
をご覧下さい。


話を戻しますが、
現在のカメラの角度を「y」、
それぞれ「縦の角度限界(上、下)」

これらを引数にしています。

受け取りは順に、
y = angle
MinLimit = min
MaxLimit = max
となっています。


この関数でやっている処理は、
簡単に言えば
「縦の角度が360°を超えたら
 0に戻す」
というのをやっているだけです。

これをしないと、
500とか800までいきますからねー。



角度が -360 より下回れば360を足し、
360を上回れば 360 を引いています。

ただただ、それだけです。


そして、

Mathf.Clamp(値, 最小値, 最大値);

これで、最小と最大の間で値を制御出来ます。

今回ではカメラの角度が「値」の部分に
入っているので上下の限界角度として
制限できる、という訳です。

それを返して、yに代入しているんです。

ここまでで、一旦全部ですかね?

スポンサードリンク




全解説まとめ

簡単に今までやってきた部分を
解説していきます。

それでは、順に流していきましょう。

//使うシステムの宣言(?)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//クラス
public class CameraController : MonoBehaviour {

 public Transform target;
 public float distance = 12.0f;
 public float xSpeed = 250.0f;
 public float ySpeed = 120.0f;
 public float yMinLimit = -45f;
 public float yMaxLimit = 85f;
 private float x = 0.0f;
 private float y = 0.0f;

 void Start () {
  var angles = transform.eulerAngles;
  x = angles.y;
  y = angles.x;
 }

 void Update () {
  if (target) {
   x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
   y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;

   y = ClampAngle(y, yMinLimit, yMaxLimit);

   var rotation = Quaternion.Euler(y, x, 0);
   var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;

   transform.rotation = rotation;
   transform.position = position;
   }
 }

 static float ClampAngle (float angle, float min, float max) {
  if (angle < -360) { angle += 360; }
  if (angle > 360) { angle -= 360; }
  return Mathf.Clamp(angle, min, max);
 }
}


システム宣言は、
「今からこの機能を使いますよ」
と、コンピュータに知らせます。

クラスはプログラムの設計図
みたいな存在ですね。
この中にコードを書きます。

変数宣言です。
  1. カメラの中心となるターゲット
  2. ターゲットからのカメラの距離
  3. カメラの横移動の速さ
  4. カメラの縦移動の速さ
  5. カメラの限界角度(上)
  6. カメラの限界角度(下)
  7. 横の入力 など
  8. 縦の入力 など


Start関数
初期角度として
x. y に代入しています。

Update関数
target が設定されていれば
マウス入力によって
カメラのx, y に反映
y には
上記の処理 + 上限までの制限

カメラの角度・位置を
あらかじめ作っておき、
その後にゲーム内に反映させています。

最後の関数は、
y = ・・・ の所で
実行しています。

限界角度を維持するのと、
カメラの角度が360から抜けない
ようにする為ですね。

終わりに

最後の方、結構走ってしまいましたが…。
分かって頂けたでしょうか?

分かって頂けたのなら幸いです……。

次回からは宣言通り、
「プレイヤーの移動」
をやっていきますね。

ではでは、また次回!



もう少しで夏休み……!
課題地獄です。


スポンサードリンク








2017年07月05日

【unity5】カメラ移動・回転 : Update関数の解説

はじめに

今回でUpdate関数の説明が終わり、
次回で最後の関数の説明が終わり......

という訳で、もうすぐで
カメラ編は終わり、となりますね。

その次からは、

「プレイヤーの移動」

の記事を書いていこうかな、と
思っています。

大事ですねー、移動。
カメラだけ動かせても楽しくないですからね(笑)


それでは、やっていきます!



スポンサードリンク



Update関数の解説


Update関数は、ここですね。
void Update () {
 if (target) {
  x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
  y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;

  y = ClampAngle(y, yMinLimit, yMaxLimit);

  var rotation = Quaternion.Euler(y, x, 0);
  var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;

  transform.rotation = rotation;
  transform.position = position;
  }
}


この関数も処理が決まっていて、
ゲーム実行中は呼ばれ続ける関数です。

常に更新されている訳ですね。

そしていよいよ、2行目の
 if (target) { ・・・・・・
とあると思います。

if の () の中が「true」なら{ }内を実行します。

ですが、() 内の target は Transform型ですよね?
Transform型はpositionとかrotationを
扱うもの……。

それでtrueとか意味が分かりません。

ですので、分かりやすくいうと

「存在していたら」

みたいな感じでしょうか?
だいぶ分かり易くなったと思います。

ですから存在していたら {} 内を実行
なりますね。

target が設定されてなければ
何も動かない、という事になります。




その次、x, y がそれぞれあります。

ここで復習しておきましょう。
「+=」と「-=」、覚えていますか?

左の値に足す(から引く)でしたね?
これは、頭に入れておいて下さいね。



それで x, y ですが、
Start関数で何かを入れてましたよね?


そう、開始直後のカメラの角度でした。
これは始めた瞬間にカメラの向きが
0に戻らないように、
現在の角度のまま始めれるように、の
処理です。


進んで、
Input.GetAxis("Mouse X") * xSpeed * 0.02f;

となっています。

1つずつ分けて考えていくと、
Input.GetAxis("Mouse X")

マウスの横のみの動きを取得します。
縦の動きは取得しません。

これは軸とか関係ないので
直で X を取得していますね。

-1〜1の間の少数でマウスの移動を
取得する事ができます。


xSpeed

これは、初期値が設定されていたと
思います。

確か、250.0fでしたっけ。

その x に、0.02f を掛けています。

ですので…5 になるんでしょうか?



これら全てを合算がっさんして考えると、
最大のマウス入力で、5 まで取得されます。

→ -5〜5

こうですかね?

多分、こうです!(笑)

マウスの動きに対して、-5〜5の間で
カメラを動かせますね。



縦も一緒ですが、
y の方は何故か引いていますね…。

何故でしょうか?
今の僕には分かりません…。

わかり次第、追記しますね。





それの次ですが……。
 y = ClampAngle(y, yMinLimit, yMaxLimit);

これは次回の最後の関数を解説する
時に一緒に解説したいと思います。

最後の関数を実行している部分が
入っていますので。

関数が分からないと
この意味も分からない訳です。



そして、次の
var rotation = Quaternion.Euler(y, x, 0);
var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;

これらですが、カメラに設定するための
角度・位置を作っています。

実際にカメラに動き・回転を反映させるのは
これらの後の処理ですね。


まず作っているのが......角度ですね。

Quaternion.Euler(x, y, z);

で x, y, z にそれぞれ入れた値だけ回ります。
(ここでの x, y, z は、ただの軸を表しています。
本編の変数とは関係ありません。)

例えば、
Quaternion.Euler(10, 0, 0);

とすれば x軸 を中心に10ずつ回転します。

x軸 は横に引かれます。
それを軸にして回転するので、
縦にグルグルですね。
Document001.png
こんな感じで。



ですが、回って欲しいのは横に、です。
ですので横に回る、y が入っていますね。

横です
Document002.png

縦も同様です。

同様です
Document001.png


z軸 は奥行きの軸です。
それを軸にして動く......。

首を傾ける様な動きになってしまいます。

そんな動きは入りませんね。
ですから、z は0です。





var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;


これは難しそうですね......。

上の回転(var rotation...…の部分)に
新しい位置を掛けています。

これは、奥行きです。

率直にいえば、
プレイヤーからカメラまでの距離です。

「-distance」となっていますが、
これが「distance」となると、
プレイヤーの前にカメラが出ます。

写りませんね、キャラが。

ですのでキャラの後ろに出すために
マイナスを付ける、ということですね。

それで常に後ろに出してます。



なんで最後に target のポジションを
足しているか、というのは
多分カメラの中心を target に合わせる為です。

この処理がないと、プレイヤーが
何処どこはかへ
行ってしまうのではないでしょうか?
(この辺は良く分かりません…!)

残りの2つは、
カメラの位置・角度
求めた位置・角度
代入しているだけですね。

ここで、実際にカメラが動く訳です。



これでひと通り説明し終わりましたが…。
分かって頂けたでしょうか?

分からなければまたコメント下さいね。

それでは、今回はこの辺で………。

部活で疲れました…











2017年07月04日

【unity5】カメラ移動・回転 : Start関数の解説

Start関数の解説

今日はいきなり
解説から始めます!

何故なぜかって?

3行しかないですが、
内容が濃いからです!


内容が濃いというか、
すごくややこしいんです……。

また説明が難しそうですよー…

そんな訳で始めます。

スポンサードリンク





Start関数部分は、ここですね。
void Start () {
 var angles = transform.eulerAngles;
 x = angles.y;
 y = angles.x;
}


Start関数、覚えてますか?

ゲーム開始直後に、
一度だけ呼ばれる
関数ですよ。

次では、
関数内で変数の作成をしています。

これは…説明してないですよね?

関数内で変数を宣言すると、
作成した関数の中でしか使えません

書き方は、jsの方に似ていますね。
var 変数名 = 値;

これは、var で宣言します。

関数外の宣言と違うのは、
  • 値を入れなければならない
  • その関数内でしか使えない
  • var を使って宣言をする

このくらいでしょうか…?

ここで1つ。
関数内での変数宣言には、
型を指定していません


ですので、変数内に
なんでも入ってしまいます。


そうすると、バグの原因となったり
するのですが……

あんまりそんな事は起きないので
気にしなくて良いと思いますが(笑)



それで、angles という名前で
なんでも入る変数を作っています。

その変数には、

「transform.eulerAngles」

というものが入っています。

何か分かりませんよね?

この、transform.eulerAngles
角度が取得できます。

この前、Transformは回転も扱うと
お話したと思います。

その回転の中でも、角度を取得する機能を
使う、といったところでしょうか。

ですが、いきなり
transform.eulerAngles
といわれても、なんの角度取得するの?
となるので、少し補足しますね。

なんのtransformを扱うか指定しない場合、
このスクリプトが付いているオブジェクト
のtransformを扱います。

ですので、this.transform.eulerAngles;に
書き換えてみて下さい。

これでも、同じ値が取得できます。

英語でもthisには「これ」とかいう
意味がありますよね。

とまぁ、そんな感じです。



問題は次の2つですねー…。

皆さん、数学のグラフは覚えていますか?
x, y軸の事ですね。


3次元でも同じで、
縦 : y
横 : x
奥 : z
となっています。

ですが、よく見てみて下さい。
x軸に角度y、y軸に角度x
入っていますよね。

何故でしょうか?
説明しますね。



x軸には、「横の回転」
入れたいんです。

ですので、「yを軸にすると横回転が取得出来る」
という事なんですよ。

つまり、
Document002.png
こういう事です!

ですので、横の回転であるxには
yの角度を取得する必要がある訳です!



逆もまたしかり。
Document001.png

縦の回転であるyには、
xを軸にした角度を入れてやる
必要があるんですね。


今回は、この辺りでしょうかね…?

終わりに

今回は少し難しかったと思います。
大丈夫でしたでしょうか?

上手く説明出来たかどうか
分かりませんが…。

伝わっていると信じますね。

分からなければコメント下さいm(_ _)m

それでは、また次回!


スポンサードリンク








検索
プロフィール
ピノまっちゃさんの画像
ピノまっちゃ
どうも、ピノまっちゃ(PinoMatcha)です!
ゲーム制作をちょこまか頑張ってる大学生で、プログラミングも独学です。
ですので実力は全然ですが、最善を尽くして頑張っております!

名前の由来はピノの抹茶味が好きだからじゃなくて、ピノと抹茶が好きだからです!


更新 : 不定期!
プロフィール
新着記事
最新のコメント
更新事項
2018/8/2 定期更新への変更の報告に追記しました。

2018/5/10 「続きを読む」機能の使い方がやっと分かりました。

2017/9/14 プレイヤーを動かす:関数の解説の一部を書き直しました。

2017/8/1 【unity5】カメラ移動・回転させる方法に多数の画像を追加しました。
カテゴリーアーカイブ
YouTubeチャンネル
Fantiaリンク
よければ応援お願いします!

Pixivアカウント
現在、調整中です…
×

この広告は30日以上新しい記事の更新がないブログに表示されております。