unity3d レベル1 -34ページ目

unity3d レベル1

unity3dでゲーム作りはじめました。
http://knr.ifdef.jp/
twitter: @knorsUni


unity3d レベル1


Playerに大きいSphereを追加して、そのSphereに触れたら動くようにした。


敵の動きは

前進→止まる→playerに狙いを定める→前進→loop

---------------------------------------------------------------------------------

var round = 0;

var jumpCnt = 0;
var lookPos = 0;


function Start(){
jumpCnt = 1;
}


function Update () {
if(round == 1){ //敵動くフラグ(playerのSphereに触れてたら~)
if(jumpCnt == 1){ //行動アクション実行のフラグ
enemyJmp(); //行動アクション(enemyJmp)へ移動
}
if(lookPos == 1){ //停止中
transform.LookAt(Vector3(target.position.x,0,target.position.z));//playerに狙いを定める。
}
}


function OnTriggerStay(col : Collider){ //playerがいたら動き出すための当たり判定

if(col.gameObject.tag == ("playerFld")){
round = 1;
}
}

function enemyJmp(){
jumpCnt = 0;
rigidbody.velocity = transform.forward * 5;//前進ジャンプ
yield WaitForSeconds(0.5);
lookPos = 1;
rigidbody.velocity = transform.forward * 0;//停止
yield WaitForSeconds(2.0);
jumpCnt = 1;
lookPos = 0;
}


---------------------------------------------------------------------------------

毎回変数の名前が決まらなくて適当になる。

何でも良いんだけど、自分で見て”なんだこれ?”になる事がしばしば。

↑のスクリプトでは

round がplayerが近くにいるか確認フラグで

jumpCnt がUpdateから行動アクションへのフラグで行動が始まったら0(off)にして、行動が終わったら1(on)を返すようにしてる。

lookPos は行動アクション中に立ち止まってる間Update内でplayerのほうを向くようにするためのフラグ。。。

変数に1と0を代入してon/off切り替えるやり方は正しいのだろうか・・・。

もっと良い方法がありそう。

UnityでNormal MapやSpecular Mapが使える。

これらは主に光の影響によって質感が変わるもので、ライティングが重要になってくる。

しかしUnityでは光の制限の設定があった。



unity3d レベル1

・赤いライト

・青いライト

を二つ作成する。

と、↑画像のように正しくライトがオブジェクトに当たる。

しかし三つ目の(緑の)ライトを作成すると、、、





unity3d レベル1


このように二つのライトが消えてしまう。

一つのオブジェクトに当てられるPoint lightは恐らく二つまで。(Directional lightはOK?)

最初は無料版の仕様なのか?と思ったがどこにもその記述はない。

そこでUnityの設定の部分を見ていたら、、、



unity3d レベル1

Edit→Project Settings→Quality


ここに「Pixel Light Count」なるものを発見!

デフォルトでは「2」となっていた。

ためしに「3」にしたところ。



unity3d レベル1


ちゃんと三つのライトが表示された!

四つ目のライトを作成したら他のライトが消えたので、

「Pixel Light Count」でオブジェクトに当てられるライトの数が決められそう。

これはQualityの項目にあり、Qualityは「Fastest」から「Fantastic」まで6段階に分けられているが

「Good」以降はライトの数を大幅に増やしておきたい。



Q.アルファを徐々に下げていけるか。


-------------------------------------------------

var color:Color;
var alphaCnt = 10;


function Update () {
if(alphaCnt >=0){
color.a -= 0.1;
renderer.material.color.a = color.a;
alphaCnt -= 1;
}
}

-------------------------------------------------


A.いけた。


エフェクトや敵が消える時に利用しよう。

color値は0→1間らしい。