スーパー空箱

ノンプログラマーの開発日誌や雑記

【Unity】他のオブジェクトのスクリプトを参照する

タイトル部分のことでちょっと詰まってましたがなんとか解消。

やりたかったことして

フリック → 攻撃フラグtrue → 敵に触れていたら敵がダウンモーション

ということでしたが、基本的なことですがちょっと詰まってました。

SAMPLE

 難しい部分ではありませんが、こちらのサイトがわかりやすく解説してくれていました

www.cho-design-lab.com

 

あとは

・ゲームの制限時間

・敵の生成

を実装すればとりあえず遊ぶだけならできる形にはなりそうです。

【Unity】フリックでオブジェクトが向いている方向に飛ばす

こつこつとユニティちゃんアクションゲームを進めてます。

このゲームの攻撃方法としてフリック操作でキャラをスライディングをさせたいので、実装してみました。

SAMPLE

まずフリックの実装ですが、最初はEasyTouchを使おうと思ったんですが、よくわからなかったので自前でそれっぽいものをつくりました。

内容としては「画面をタッチしてから指を話すまでの時間がX秒以下」「タッチした位置から指を話した位置のmagnitudeがY以上」という実装です。

void Update () {
//画面をタップしたら
if (Input.GetMouseButton (0)) {
        //時間計測開始
	tapTimer += Time.deltaTime;
    
	Vector3 currentTapPoint = Input.mousePosition;
	mag = (currentTapPoint - tapPoint);
	if (mag.magnitude > 5.0f) {
		//ここにはフリックしないときの挙動をかく(割愛)
	 }
}
//指を離したら
if (Input.GetMouseButtonUp (0)) {
    //フリック条件。時間経過は0.5以下でmagnitudeが10以上なら
	if(tapTimer <= 0.5f && mag.magnitude >= 10f){
        //モーションをスライディングへ
		Anicon.SetTrigger("p_sliding");
        //フレイヤーの正面ベクトルを取得し、Z方向に10を掛ける
		Vector3 pv = player.transform.forward *10;
        //プレイヤーのrigidbodyに↑の数値分だけ力を加える。
		player.rigidbody.AddForce(pv,ForceMode.VelocityChange);
	}
    //アニメーションのステートの初期化(待機状態へ)
	Anicon.SetBool ("p_walk", false);
	Anicon.SetBool ("p_run", false);
    //最後にタイマーを初期化
	tapTimer = 0f;
}

すぐできるかなーと思ったんですが、意外と苦戦したのが「オブジェクトの正面方向ベクトルの取り方」なんですが、transform.forwardで取れると分かった後はすぐでした。
こちらの記事が参考になりましたojisan-puroguramu.seesaa.net

まだスラいディングモーションへの繊維に時間がかかってる感じがあるので、ここは要調整ですね。
次は敵をだして当たり判定をつけるとこをやる予定~

最近読んだ面白いkindle漫画を紹介 その3

  • 地獄恋(全3巻)

事故で地獄に落ちた主人公とその担当の鬼の少女の、地獄の日常系ギャグ漫画。地獄では罪人は拷問を受けることで生前の罪を減らすことでお金を得て生活するが、へたれで拷問から逃げ続ける主人公と、そんな主人公に厳しくできずも立派な鬼になろうとがんばるかわいい鬼の少女とのやりとりがほほえましくも楽しい。特別大罪を犯したわけでもない主人公がなぜ地獄に落ちたのか、という一応ストーリーもあり、地獄生活ギャグとあわせて巻数も少ないのでサクッと楽しめる作品でした。

 

続きを読む

【Unity】Humanoid系のモーションを使いまわしてみた

f:id:ponkotsu0:20150508000037j:plain

あまりモーションについては触ったことがなかったんですが、Unityでは人型のモーションはモデルが違ってもある程度使いまわすことが簡単にできるので、色んなモーションで試してみました。

続きを読む

最近読んだ面白いkindle漫画を紹介 その2

引き続き面白かったkindle漫画をご紹介

 

  • 光の大社員(全5巻)

 おもちゃ会社の新入社員が主人公の4コマ漫画。

がんばって大社員(謎)を目指す主人公を含め個性的なキャラばかりで、男性キャラはほぼ全員ばか(褒め言葉)。ギャグのキレとテンポ感がとても好きです。個人的に好きな4コマベスト5に入ります。

この漫画を見てから作者のOYSTERさんが好きになりました。

忍者OLすずなさんが好きです。

続きを読む

最近読んだ面白いkindle漫画を紹介 その1

半年前ぐらいから漫画はほとんどkindleで購入していまして、暇さえあればAmazon kindleストアを眺めてついついぽちぽちしてしまっています。

最初は「やっぱり本は紙じゃないとなぁ...」と思っていましたが、セールなどで何冊か買ってみるうちにいつしか電子書籍のほうがよくなり....いまはカードの支払い額を確認せず衝動買いしまくりです。

そういうわけで、わりとジャケ買いもしていますが、おかげで今まで知らなかった良作にもたくさん出会えたので、いくつかご紹介します。

大きな魔法力をもった孤独な少女と、その娘を買って弟子兼嫁にした謎多き犬の頭骨あたまの魔法使いのファンタジー。 

まずジャケットのきれいなイラストと世界観に惹かれました。内容で面白かったのは、親を亡くしいらない子扱いされて人間不信な主人公が、魔法の世界で生活して良くも悪くも様々な影響を受け、成長していくことに共感できます。

また魔法使いのエリアスは謎だらけで、なぜ主人公を買ったのか、何者なのかが少しづつ判明していき、続きが楽しみで仕方ないです。

最近はこのマンガがすごい!で2位だったり全国書店員が選んだおすすめコミックで1位だったりとかなり売れているようです。

続きを読む

【Unity】キャラクターをドラッグ操作で動かしてみた

f:id:ponkotsu0:20150427015027j:plain
アクションゲームをつくるときの練習がてら、スマホでグリグリキャラを動かせるようにしてみた。

サンプル

たぶんCharacterControllerやバーチャルパッドを使えば簡単にできるっぽいんですが、コーディングの練習なので全部自分で書いてみました。

void Update () {
	if (Input.GetMouseButtonDown (0)) {
        //押下した位置を取得
		tapPoint = Input.mousePosition;            
	}
	if(Input.GetMouseButton(0)){
		Vector3 currentTapPoint = Input.mousePosition;
        //指をずらしたときのベクトルを取得
		Vector3 mag = currentTapPoint - tapPoint;
        //指を動かしたときのみキャラを操作する       
		if(tapPoint != currentTapPoint){ 
            //動かした指の位置から角度を計算         
			float rad = Mathf.Atan2(currentTapPoint.y - tapPoint.y,currentTapPoint.x - tapPoint.x);
			float rot = (rad *180/Mathf.PI)+90;
            //キャラクターの向きを決定    
			player.transform.rotation = Quaternion.Euler(0f,rot*-1,0f);
			player.transform.Translate(0f,0f,playerSpeed);
             //一定以上画面をドラッグしたときは移動速度を上げる
			if(mag.magnitude < 120f){                  
				Anicon.SetBool("p_walk",true);
				Anicon.SetBool("p_run",false);
				playerSpeed = 0.02f;
			}else
			if(mag.magnitude >= 120f){
				Anicon.SetBool("p_run",true);
				playerSpeed = 0.05f;
			}
		}
	}
	if (Input.GetMouseButtonUp(0)) {
			Anicon.SetBool("p_walk",false);
			Anicon.SetBool("p_run",false);
	}
}

指の動きが2Dに対してキャラクターが3Dなので、指の動きとキャラの向きを同期させるのに苦労しました。
Mathf.Atan2()は2点間の角度をラジアン値で返してくれるので、それを (rad *180/Mathf.PI)+90のところで角度に変換しています。

  1. 90をしてるのは、この式の場合2Dなので指を真上に動かすと90°が返ってきますが、キャラクターは後ろ(180°)を向いてほしいからです。

またQuaternion.Euler(0f,rot*-1,0f)で-1をかけてるのも同じように、左に引っ張るとキャラは「自分からみて左」を向いてしまうので
この画面の場合は「向かって左」にするために左右を反転させています。

このやり方は結構無理やりやっているので、たぶんもっときれいなやりかたがあると思いますが、意外とググってもみつからなかったんですよね。
Nexsus5にいれてみましたが、無事グリグリ動いてくれました。感動!これで簡単なアクションゲームならつくれそうです。


ところで

ルクラスを買ってみました。
これ、上を向いたときにスマホが倒れるのなんとかならないのかな....