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
こっちが詳しいかな。

2014年12月29日月曜日

AE アニメーションカーブ


オブジェクトの動きについて 細かく調整する
アニメーションカーブについて考察してみます。

今ではもう読まれていないであろうこのサイト
http://www.adobe.com/jp/motion/pvs2/cgworld_p3_1.html


1、キーフレームアニメーション
2、エクスプレッション
3、グラフエディタ


このアニメーショカーブ、unityではあまり編集機能がよくないらしいです。


Intro to Animation Curves in After Effects from School of Motion on Vimeo.


unity テクスチャ について


複数のテクスチャをくっつけてひとつにまとめるテクスチャアトラス
1枚絵ってやつかな。

じゃないと、ドローコールが多くて2D描画では遅くなるみたいですが、
端末でデバックするのも先だし。今はまだいいかなぁ。



http://mikenekoworks.com/archives/category/development/unity

ゲーム企画



孫子ものと
ロボットもの
ホラーもの。
■参考サイトのレビューは大事かも。
■日本の開発会社

http://www.ganbarel.jp/service/unity.html
Tango Gameworks
http://tangogameworks.com/jp/index

アルティ
http://www.althi.co.jp/

http://www.ponos.co.jp/pc/
http://www.cc2.co.jp/


■ホラーで参考するべきゲーム
The Long Dark
http://www.4gamer.net/games/038/G003821/20141002075/
DEADLIGHT
http://www.famitsu.com/news/201208/03018976.html
Rime
https://www.youtube.com/watch?v=wOtiMtZxrrc
http://www.krillbite.com/
■シナリオ
バタフライエフェクトシステムUntil Dawn - 惨劇の山荘 -リアルな描写は無理があるので、The Long Dark のようなローポリ。
x


■開発中の日々の生活をどうやって維持するのか?
無料か? 有料か?


■プラットフォーム
コンシューマー、スマホ






unity ゲームオブジェクト 位置について


位置をしったのは?例のごとくやったことがあるチュートリアルは
http://japan.unity3d.com/developer/document/tutorial/2d-shooting-game/game/02.html

これなので、

Vector2 direction = new Vector2 (x, y).normalized;

この文章になる。
3次元だと下記になる。

Vector 変数 = new Vector3 (x,y,z);


using UnityEngine;
using System.Collections;

public class myscript01 : MonoBehaviour {
int counter = 0 ;
float plus = 0.1f;

void Start () {
}

void Update () {
Vector3 p = new Vector3(0, 0, plus);
transform.Translate(p);
counter++;
if (counter == 100){
counter = 0;
plus *= -1;
}

}

}


このスクリプトだと、オブジェクトにribody の設定いりませんでした。

transformプロパティ

http://docs-jp.unity3d.com/Documentation/ScriptReference/Transform.html
まちがってるかもですが、

Transformクラスの Functions ということはメソッド translate を
Vector3は移動する幅

■?のところ
vector3は単独で記述してもOKで、translateは単独でなく、クラスを記述しないといけないか?
まぁ クラスじゃないからかな?





2014年12月28日日曜日

Unity シューティングメモ 敵の動き

敵のスクリプトです。

using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour
{
        // 移動スピード
        public float speed;
        // 弾を撃つ間隔
        public float shotDelay;
        // 弾のPrefab
        public GameObject bullet;
        // 弾の作成
        public Enemy GameObject;

        public void Shot (Transform origin)
        {
                Instantiate (bullet, origin.position, origin.rotation);
        }

        // 機体の移動
        public void Move (Vector2 direction)
        {
                rigidbody2D.velocity = direction * speed;
        }

        private Vector3 m_pos;
        void Start ()
        {
        m_pos = transform.localPosition;  // 形状位置を保持
        }
   
        void Update () {
        transform.localPosition = m_pos;  // 形状位置を更新
        m_pos.x += 0.05f;
                       }
}

http://japan.unity3d.com/developer/document/tutorial/2d-shooting-game/game/04.html
こちらを参考にしてすすめてますが、
組み方ははっきり言って無視w


共通部分を取り出し、別のコンポーネント”などはぜんぜん無視。
C#がベースになってますね。

public class Enemy : MonoBehaviour
まず、これは クラス名と型を宣言。
というか半分ぐらいいらないw

using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour
{
        // 移動スピード
        public float speed;
        // 機体の移動
        public void Move (Vector2 direction)
        {
                rigidbody2D.velocity = direction * speed;
        }
}

コンポーネントの使い方はこちら。
http://ws.cis.sojo-u.ac.jp/~izumi/Unity_Documentation_jp/Documentation/Manual/Using%20Components.html


using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour
{
        // 移動スピード
        public float speed;
        // 機体の移動
        public void Move (Vector2 direction)
        {
                rigidbody2D.velocity = direction * speed;
        }
                void Start ()
        {
                // ローカル座標のY軸のマイナス方向に移動する
                Move (transform.up * -1);
        }
}

まとめ。

rigidbody2D.velocity
とは、

 void Start () を Updataに変更したら動かない。

ぐちゃぐちゃになってきた。
単純に座標を移動をすると壁にあたったときなどバグを起こすらしい。

void FixedUpdate ()
の中でしか、駄目とのこと。なんでわかれてんだろ。













個人的アニメ ランキング



【Aクラス】

アウトレイジ  アウトレイジ ビヨンド
闇金ウシジマくん
カラスの親指
アイアンスカイ
アイアンマンシリーズ


機動戦士ガンダムUC


シュタインゲート
http://www.animenova.tv/category/steins-gate


寄生獣 セイの格率






【映画 アニメ】


【試したけど続かない】

Unity シューティングメモ 弾 スクリプト


プレイヤーに複数のスクリプトを持たせることが可能。??複雑にすると問題がでてきそうだが、今のところうまくいっている。ちなみに、https://gist.github.com/tracend/893555やろうとしたことは、プレイヤーに弾を撃たせるスクリプト C#でなかったので、

var prefabBullet: Transform;var shootForce: float ="100";function Update () {if(Input.GetButtonDown("Shoot") ){var instancebullet =Instantiate( prefabBullet ,transform.position,Quaternion.identity);instancebullet.rigidbody.AddForce(transform.forward * shootForce);}}


■説明
Var ← 「今から新しい変数を定義するよ」という宣言public var としてもうまく動いたんだけど、つけなくもていいみたい。
http://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.htmlhttp://is4cafe.hatenablog.com/entry/20140306/1394036396
.rigidbody.AddForce

これについてまとめてある。
ちなみに AddForce は物体に力を加える。とのことらしいです。
shootForceを宣言しているからそれが使われているみたいだが、
反応がない。

理由は
弾のほうに 違うスクリプトをつけていたからみたです。

using UnityEngine;

public class Bullet : MonoBehaviour
{
        public int speed = 10;

        void Start ()
        {
                rigidbody2D.velocity = transform.up.normalized * speed;
        }
}


ちなみに弾の方はC#とややこしや。
色々とわかりました。


まずね。

#pragma strict

var bullet: GameObject;
var player: Transform;
var shootForce: float = 100;
var obj: GameObject;

function Update () {

   if(Input.GetButtonDown("Fire1")  ) 
   {
    obj = bullet.Instantiate( bullet );
    obj.transform.position = player.position;
    obj.rigidbody2D.velocity = transform.up.normalized * shootForce;
   }
   

}

最終的にこれになったんだけど。
考え方としては、弾のインスタンスを生成する。
そいつを機体の位置とおなじにする。
その弾に力を加える。
という流れ。

https://gist.github.com/tracend/893555
こいつとの違いは、

↑ファンクションの中で変数を宣言している。

var instancebullet =Instantiate( prefabBullet ,transform.position,Quaternion.identity);

こんな感じで。
インスタンスした弾に対して命令しないと意味がないからかな。

#pragma strict

var bullet: GameObject;
var player: Transform;
var shootForce: float = 100;

function Update () {

   if(Input.GetButtonDown("Fire1")  )
   {
    bullet.transform.position = player.position;
    bullet.rigidbody2D.velocity = transform.up.normalized * shootForce;
   }
 
}

こんな感じにするとエラーはでないけど。
弾はでないw
つまり、インスタンスを生成は重要だということだ。
http://qiita.com/2dgames_jp/items/8a28fd9cf625681faf87

であとは、そいつをいじりたおしていく。
感じです。

間違っていたのは、

rigibody.Addforce をやっていたので。うまく弾とエラーがでてた。
そりゃそーだ。3Dだしw


あとはプログラムの記述の仕方として、
if 文と それから下のアクションは
別にしたほうがいいのかな?


弾のその後とか、制限とかもかんがえられますね。
パワーがなくなってでなくなるとか。
そういうのはまた、今度かな。










2014年12月20日土曜日

2014年12月12日金曜日

after effects テキスト 1文字 ばらす。

ありました。

http://ae-users.com/jp/tips/2009/07/strings_par_frame/


すばらしいスクリプトを発見しました。
https://github.com/yone80/aftereffects-scripts/blob/master/decomposeText.jsx

神ですね。

Ga4のtest

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