2015年4月29日水曜日

Unreal engine ジェットコースターを作る。 その2

前回は レベルBPの記述がどう書いているか?わからなくなって逃げ出してました。

よく読んでみると、
ヒストリアさんの記述とちょっと作り方が異なる。

できた動画をみていただこう。

カメラ視点


とりあえずできたが、様々な課題がまだある。
まずはどのように作ったか?ではなく、どんな構造なのかを記述しておく。
プログラムが初心者の方々にとっては、当たり前のことが当たり前でないので。

【想像】
上記がどのような仕組みで動くか?まずは考えてみる。
splineが存在して、その上をオブジェクトが進む。


簡単に言うと上記だが、これをもっとUE4ぽく考える。



毎フレームごとに、spline上の位置を所得して、
オブジェクトは毎フレーム、取得した値に移動する。














2015年4月25日土曜日

Unreal engine ジェットコースターを作る。 その1

1ヶ月前からUnreal engineを触ってますが、プログラムの経験がない僕にとっては
結構敷居が高いアプリケーションですが、楽しいのでレベルの低い人でもわかるように
お伝えしていきたいと思います。

他の説明ではさらっとやっているところを独自の解釈でお伝えしていきます。
※間違っていることが多数あるので、あしからず。

基本的な使い方は飛ばします。

まず最初に作ろうと思っているのが、「ジェットコースター」ありがちですけど。。。

ぐぐってみると。


サクッとOculusジェットコースターをつくろう!
http://2vr.jp/2015/01/11/ue4-de-oculus-rollercoaster-1/

こちら ゆーじさんのブログに記載されてます。
RollercoasterPluginというプラグインがあるんですね。
UE4はプラグインあるんだと一応驚く。

Oculusでジェットコースターを作るために作ったのが「UE4 Rollercoaster」らしいです。
https://share.oculus.com/app/ue4-rollercoaster

読んでみるとプラグインとUEとの相性があるみたいですが・・。
https://forums.oculus.com/viewtopic.php?f=42&t=8032
RollercoasterPlugin_v4_6_1.zip 落とせた最新バージョンはこちら。
upports UnrealEngine 4.6.1 と書かれてました。 しょうがなく4.6.1をインストールしてます。

おお。
プラグインどうやっていれるか?わからない。。。
直接フォルダに入れたらいいらしい。 で結局 4.7.5だと起動すらしませんでした。

4.6.1でやるのとこのプラグインをつかわずにやることを考えます。
http://pafuhana1213.hatenablog.com/entry/2015/01/31/192709
こちらにも、似たような記事が。


Blueprint Splines Track というやつを無料でダウンロードできます!
ランチャーのラーニングの画面下のほうをみていくと、BPスプライントラック とあるのでこれです。
なんか、4.6.1でも起動せずw

空白ファイルをつくって、やるんだけど。
ブループリントそんなに簡単に真似できないところでイライラするのさw

いろいろ調べて、素人には難しいと思ったこと。

症状:
・プレイを教えてもカメラが定まらない。 gameStartがあるとそこにカメラはいきます。
・知らないうちに Mycharacterが設定してある。スタート時にcharacterがいる?いないを一度確認。
というか、プレイヤーについて整理しないといきづまりました。

これの下側がわからない。。。trackはドラッグドロップでもってくるのはわかるが、、、。
そもそも、レベルのBPで何をしようとしているか???? 解読してみると

プレイされたら プレイヤーをキャストします。 それって PlayCharactor を道路の変数を代入します。んんんん。わからなないw




2015年2月8日日曜日

AE エクスプレッション トリガー linear marker.key


○ホコリ
元ネタ
http://www.blastframe.com/blog/?p=173
ここのチュートリアルを参照しました。

m1 = marker.key("Start").time;
m2 = marker.key("Stop").time;
linear(time, m1, m2, thisComp.layer("Dust Controls").effect("Dust Count")("スライダー"), 0);


marker.key("Start").time;

文字列をつけた 時間を返す。コンポジションマーカーの時刻
https://helpx.adobe.com/jp/after-effects/using/expression-language-reference.html

linear
http://bizvalley.co.jp/blog/4656.html
http://www.da-tools.com/AE/exp/jisen/interPol.html

linear ( 変数 , 入力最小値 , 入力最大値 , minに対する出力値 , maxに対する出力値 )

変数 はボリュームの回転角度
入力最小値 はボリュームの最小値 入力最大値 はボリュームの最大値 minに対する出力値 はスライダーの最小値 maxに対する出力値 はスライダーの最大値


結局やってることは、
particleの量 をリニアになくしていく。ちゅうこと。

このリニアの動きは:下記を参照しましょう。

linear
http://bizvalley.co.jp/blog/4656.html
http://www.da-tools.com/AE/exp/jisen/interPol.html

2014年12月31日水曜日

unity クラス はじめての


最初にスクリプトをみたときに?になるのは、
文法がわからんちゅうことかな。

まぁ、プログラムをやったことがなくても、ざっくり想像はできると思う。

■考えずに覚えること
値はリテラル
値には種類があるということ、このことを型とタイプという。

数字関係のタイプは、「整数」と「実数」
整数には8種類の型があります。

数字のままだと 型は int
最後にLをつけると 型は long
最後にSをつけると 型は short
※なぜ?色々あるか?

ただし、整数は int型を使え。 と 本に書いてありました。

実数:小数点をつけたら実数になる。
12345.0 これは実数で double 型
145.5F これは実数で float 型


クラスは設計図 → 実際操作できるインスタンスというのを作る。
クラスは 情報保管する変数のフィールド と 処理を定義したメソッドの2つからできている。

■クラス 基本的な書き方はこれ。
===============

class クラス名 {
  ○・・・変数の宣言
 
 ●・・・メソッドの宣言
}
===============


○変数の書き方 = フィールド
===============



●メソッドの書き方
===============
返値 メソッド名 ( 引数 ) {

 ・・・実行する処理を書く
}
===============

計算結果などの返ってくる値の型。何も返さないなら void
型が記述してあるとそれは メソッドということ。

メソッド名は 半角英数とアンダースコアの組み合わせ 最初は大文字。
引数とは、メソッドを実行するための値。また、複数になる場合は カンマで区切ります。




■意味をしらないと読めない記号について
A%B  AをBで割ったあまりを得る。
意味はわかるけどどんなときに使うか? よくわかりませんよね。



unity 最初はポンゲーム


色々手を出してみたが、コツコツと最初はポンゲームかな。
http://www.slideshare.net/kadoppe/unitypong

と思い。
http://www.slideshare.net/kadoppe/unitypong


using UnityEngine;
using System.Collections;

public class ball : MonoBehaviour {

// Use this for initialization
void Start () {
rigidbody.AddForce(Vector3.up * 10 , ForceMode.VelocityChange);
}

// Update is called once per frame
void Update () {
}
}

物理をつけてみた。
void Start () { と void Update () { の間に
rigidbody.AddForce(Vector3.up * 10 , ForceMode.VelocityChange);
をいれて試してみるとお互いの違いがわかります。



構造:
rigidbody.AddForce();

()の中は、Vector3 force, か float x, float y, float z, のどちらかで記述できます。
http://docs-jp.unity3d.com/Documentation/ScriptReference/Vector3.html

調べてみたら、Vector3 forceの記述は言い方を簡単にしただけでした。

Static Variables
backVector3(0, 0, -1) と同義を短く記述
downVector3(0, -1, 0) と同義を短く記述
forwardVector3(0, 0, 1)と同じ意味
leftVector3(-1, 0, 0) と同義を短く記述
oneVector3(1, 1, 1)と同じ意味
rightVector3(1, 0, 0)と同じ意味
upVector3(0, 1, 0)と同じ意味
zeroVector3(0, 0, 0)と同じ意味

ん。違いますね。
前に Vector3とかかれてました。


ForceMode mode

ボールの跳ね返りの設定
スライドではマテリアルの設定と不親切でしたが、、。

Projectビューの"Create"を押し、"Physic Material"を選択します。
http://www40.atwiki.jp/spellbound/pages/1320.html 
と書いてありました。
Bounciness(跳ね返ることのできる物質の特性)に1.0
でいけるみたいです。

using UnityEngine;
using System.Collections;

public class ball1 : MonoBehaviour {

// Use this for initialization
void Start () {
rigidbody.AddForce(Vector3.forward * 10 , ForceMode.VelocityChange);
    }

// Update is called once per frame
void Update () {
rigidbody.velocity = rigidbody.velocity.normalized * 10;
}

private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Block")
{
Destroy(collision.gameObject);
}
    }

}





2014年12月30日火曜日

Unity 2d の見えない壁

unity の2Dゲーム制作をやっていてわからなかった点。

背景の画像や、床の画像は適切に配置だけすれば
描画はされるが、そこの床があるか? は

設定しなければならない。

やり方として、2つ。
Box Collider 2D   緑の枠で囲まれているこの線を
コライダー
 
これとは別のやり方で 
オブジェクトに rigidbody2DをつけてGravity Scale を0にしておく。
http://docs-jp.unity3d.com/Documentation/ScriptReference/Rigidbody2D.html

rigidbody2D
によって、重力と力を受けることになる。


http://vga-unity.github.io/gp11/2011/10/19/GP11-03.html
ここに説明されている。

http://docs-jp.unity3d.com/Documentation/Components/class-Rigidbody2D.html
こっちが詳しいかな。

Ga4のtest

これを押すとリンクするよ 参考にした記事はこちら