2015年6月18日木曜日

 DeNAで開催された、げんなま第7回に行ってきた。


今回はキュレーションの話。

メモしておきたいことだけを抜粋
・SCRUMの話
 スクラムと聞くとラグビーを思い出すが、これはソフトウェア開発のことの単語。
『スクラム実践入門』という本が物凄く解りやすいみたい

・コミュニケーション方法
Slackを使っているみたい。だけどこれだけではダメで、フリースペースとかで口頭で。そしてその場でなおすみたい


さて、自分にとって本番の懇親会

たくさん質問してきました⭐️

・ソシャゲ業界は今どの位置? 全盛期なのか成長中なのか下り坂なのか?
2人の方に質問し、一人は全盛期を過ぎかけて、下り坂手前 と。
       もう一人はまだ成長中 だと。

・ソシャゲの走りと思われる、怪盗ロワイアルが人気だった理由は?
 そのころまだMMOとかは少ししかなく、ゲームで離れたプレイヤーとやり取りできたという、目新しさがあったこと。大げさにいうと、離れたところにいる人とジャンケンできるだけでも、売れたかもしれない。 財宝を奪い合うことにより、ネット上でのコミュニケーションが出来上がった。
 そいういう意味では、10代よりも30代に人気がでたのではないか。

・ガチャという世界観にそぐわない物を使うのはなぜか?
 本当はLOLみたいに姿が変わるものや、超レアカード一枚に1000円 とかいう儲けかたをしたい。がしかし、単価に見合わない。 一枚確定で1000円というよりも、1000円で10連ガチャで獲得のチャンスを得られる という方が売れてしまう。

・流行り廃りはあるのか?
 もちろんある。昔はカード系のソシャゲらしいソシャゲだったが、今はコンシューマーと同じくらいのRPGが楽しめる(白猫とか)。おそらく、ソシャゲでFPSが作れるのもそう遠くないと思われる。
 ソシャゲはパズル系がもう出切った。新しいオリジナルの要素を組み込んでいかないと、売れない。

・自分が興味ないゲームジャンルでもやりこむべし!!
 例えばカードバトルとか、自分は興味なくても引き寄せている要素がどこかにある。やりこむことによってそれを分析する。


2015年6月14日日曜日

ピクミンみたいのなのを作成中・・・①


・まず、すごい初歩的な所から
 transform.Translate は衝突のない位置の移動なので、通過点にコライダーがあっても貫通してしまう。
 これになぜか引っかかってました…



・キャラ同士がぶつかる、乗り上げることをしないようにするには
レイヤーを設定して、
Edit->Project Settings->Physics 2Dで開き、Layer Collision Matrix


・変数やメソッドをpublic static にしておくと、その世界唯一の物になってどこからでも使えるようになる。世界唯一なので、住所を指定しなくても、名指しだけで使用可能。
http://myoujing.wpblog.jp/2014/06/760/さんより完全コピー
 この例でいけば、どこの他所のスクリプトからでも
test1.HealthPoints -= 5;
と書くだけで変数HealthPointsは95になるし、
test1.Attack();
と書くだけでAttackメソッドを実行させることができる。



・SendMessageの使い方

public GameObject ○○; メッセージを送りたい所の名前

○○.SendMessage("他のオブシェクトについてる関数名とか");



・ON と OFF のスイッチ
以下のスクリプト、if文の中身を逆さまにしたらずっとtrueだったのでメモ

if (ON == true
        {
            if (Input.GetKeyDown (KeyCode.Space)) 
            {
                ON = false;
            }
        }
        else
        {
            if(Input.GetKeyDown (KeyCode.Space))
            {
                ON = true;
            }
        }

2015年6月12日金曜日

学んだことをメモするだけ

・オブジェクトを親子関係にする

子オブジェクトに、
transform.parent = GameObject.FindGameObject("親オブジェクトにしたいもの").transform;
をつけるだけ。


・ピクミンみたいに、発掘した(?)仲間をプレイヤーキャラの後をぞろぞろ連れたい時、ナビメッシュで指定してやればいいみたい!

  1. Navmeshのルートに使いたいオブジェクトはinpector内のstaticにチェックを入れる
  2. Window>Navigation  bakeをクリック。これでキャラの移動範囲を設定できる。
  3. Navmesh Agentの適応。Component > Navgation > Nav Mesh Agent
  4. ゴールを設定するスクリプトを実行


・他のオブジェクトに付いているスクリプトから他のスクリプトを呼び出す場合
A.csに
        関数名();

B.csに
        A a;

        A a = GetComponent<A>();
        b.関数名();
で出来る。だけどこれだけじゃ

こんなエラーが出る(はず)。だからB.csを、
     A a;

         A a = GetComponent<A>();
        if(a != null){
         a.関数名();
        }
        else{
        Debug.LogWarning("Set Script !");
        }



(追記)なんか上の方法を使わなくてもnullエラーから脱出できるみたい。
こっちの方がいいっぽい
    GetComponentで取得したコンポーネントを変数に入れ忘れている。
      a = collider.gameObject.GetComponent<A>();
 にしないと a は常に空っぽの状態だから。

  …正直理解できていない。要勉強。


・最後にprint (collider.gameObject.name); でトリガーとかにかかったオブジェクトの名前を取得可能



任意のオブジェクトのDestroy



void OnTriggerEnter(Collider collider)
    {
        if(collider.tag == "")
        {
            Destroy(collider.gameObject);
        }
        
    }



パーティクルの形状を変える


こんな感じにパーティクルの形状を変える方法。
Renderer内のRendererMode を StrechedBillboardに。
 Length Scaleを2とかにして縦長に

2015年6月7日日曜日

今日したことをメモ

壁にプレイヤーキャラが引っ付く

プレイヤーキャラから下方向にrayを飛ばす。そしてrayが当たった場所の法線ベクトルを取得。その法線ベクトルの逆の力をプレイヤーキャラに与えてやることによって、壁とかにずっとくっついていられる。なお、重力はオールゼロ

Vector3 normalvec//メンバ変数

//第三引数にoutで指定すると衝突したオブジェクトの情報が入る
//第二引数、Vector3.downだとワールド座標の下になってしまう。
if(Physics.Raycast(transform.positiontransform.up 
* -1out hit10)){                                                                       //プレイヤーから下にRayを飛ばすなら、transfrom.up * -1に。(transformにはdownがないから)

// positionから下方向に10進んだ先までにオブジェクトがあればtrueが返されるので、ここの処理が実行される。
   normalvec = hit.normal * -1;

//Physics.gravity = new Vector3(0020f) * normalvec;は間違い。
ベクトル*ベクトルができないから
   Physics.gravity = 20f * normalvec;  }

アニメーショントリガーのこと

Unityちゃんが机のcolliderにヒットした時に、walkアニメーションからsitアニメーションにしたい。そのためにトリガーを使用。
だけど、sitしている時にもコライダーにあたってtrueが返されてしまう。 ⇨
だから、walkの時のみにtrueだったらsitを発動する と変更
animationstatsをスクリプトで変更すればできるみたい。(まだ未完成)
やってみた↓
箱を用意
private Animator animator;

Start()とかで
animator = GetComponent<Animator> ();

関数内に
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);

で、
if (stateInfo.nameHash == 
Animator.StringToHash ("Base Layer.WALK")) {
  this.GetComponent<Animator> ().SetTrigger ("Sit");
 }

2015年6月6日土曜日

大逆転裁判(体験版)をプレイ!


Twitterで体験版の配信がされてると知り、早速プレイ!

久々に逆転裁判系列をプレイしましたが、やっぱりいいですね〜 あのボケとツッコミやら、妙にキャラの立つ感じ。BGMも素晴らしいです。

体験版と聞いて、1章の半分くらいはプレイできるのかなーと思ったら、まさかのたった2問答えただけ笑 しかも凄い簡単だし笑
まぁ製品版に期待ですかね。私は既に特別装丁版を予約済みです





2015年6月5日金曜日

壁を走らす

実験1 壁のcolliderに当たった時に、重力の向きを変更

wallのtagがついたcolliderにプレイヤーが付いたら、本来、
Physics.gravity = new Vector3 (0, -9.81f, 0);  こうなっているのを
Physics.gravity = new Vector3 (9.81f, 0, 0);  に。

実験2 ベクトルを変更する

その前にプレイヤーキャラの移動
transform.Translate (new Vector3 (0,0,0));  よりも
GetComponent<Rigidbody>().velocity = (new Vector3(0,0,0)); の方が良さそう?

上のy軸のみを10に → 壁に押し付けられるみたいになった
y軸に加えz軸を5に → 壁を登る方に力が加わった。が、形がカプセルだからか、変な          回転をしながら上に。

Animator


Boolと Trigger

・基本は同じ
 ・しかし、Triggerは自動的にfalseに戻る

Triggerの使い方

public void ○○Animation(){
      this.GetComponent<Animator>().SetTrigger("トリガーにセットした名前");
}


壁に足がくっついたまま歩けるゲーム(?)

重力について

・Rigidbodyをつけたものに、剛体の物理演算が働く。

・重力加速度の設定は、Edit」→「Project Settings」→「Physics」でPhysicsManagerを開き、Gravityから設定可能。 デフォルトではX=0, Y=-9.81, Z=0
x軸方向に0以外の数字を設定したら、横に落ちていく。全部0にしたら無重力。この重力はスクリプトからも設定可能。
これをすると重力が上書きされて、上に物体が落ちていきます。


・物体それぞれに違う重力を与えたい場合や、万有引力のように星の中心に重力加速度発生させたい場合、rigidbodyを持つオブジェクトに以下のスクリプトで対応。指定された加速度を継続的に発生させる。
壁に向かうように加速度を設定すれば壁を歩く動作を実現。小さな星の上を歩くような動作だと星の中心に向かうように加速度を設定すれば実現できる。
Mayaで作ったアニメーションを、Unityに書き出した
 

  1. 書き出す前にモーションのフレームを1に
  2. メニュー:ファイル>全て書き出し
  3. ファイルタイプをFBX Exportに

  色々やってみたけど動かない!? Unity上のAnimationViewでみたらキーフレームがなぜか打たれてなかった… どういうこと?

判明した気がする
 書き出したFBXファイルを再びMayaで開いてみる。そしたら、コントローラーしか動いてない!



   というわけで、ボーンのジョイントを動かしたら、アニメーションした・・・・
コントローラーて動かせないんですかね…?なんか方法があるのかな。出来ないんだとしたらアニメーションつけるのが凄い面倒くさいことに… 


今日色々アニメーション触ってて、明らかな勉強不足が判明

2015年6月2日火曜日

最近学んだことをメモするだけ

・Lightmappingを利用することでやわらかな影の描写や、動作を軽くすることなどが実現できる

・他のオブジェクト内のpublicな変数を取り出すには
 GameObject go = GameObject.Find(“○○Object “);
□□Script ○○Script = go.GetCompornent(□□Script);
bool flag = ○○Script.flag;
 多分これでできる…はず

・キャラクターコントローラー
Rigidbodyなしでもコリジョンを取得してくれる
NPC キャラクターで CC を使用すればワールドに存在するコライダ全ての上にぶつかって乗ることが出来る。しかし、重力が変化したり、壁をキャラクターが歩きたい時とかはうまくいかない。物理挙動と連動されないことが問題。その時は自身でスクリプト対応が必要

Animation.Play()は指定したアニメーションに即座に切り替える(動作が一瞬で変化する)
 Animation.CrossFade()は二つのアニメーションの間をやんわりと補完してくれる

オブジェクトがCharacterControllerで動かされている場合OnControllerColliderHit以外で衝突は検出できなくなる事に注意 。OnCollisionEnterは反応しにくくなる(反応しない訳ではない) また「物体が動いている間だけ」呼び出しが発生する 
private void OnControllerColliderHit(ControllerColliderHit hit){
        if(
hit.gameObject.tag == "wall"){}
    }


・FPSを作る時とかに必要かも
 // マウスカーソルを削除する
  Cursor.visible = false;

  // マウスカーソルを画面内にロックする
  Screen.lockCursor = true;