Translate

2017年2月23日木曜日

Swift 3 勉強中、オブショナル? 初期化すればよくね! 感嘆符と疑問符だらけ ?? nil  

Disり駆動勉強中です!
 
オプショナルって、未初期化でエラーを出したくないという事のために随分とめんどくさい仕様を盛り込んでコード見づらくしたもんだという所感。

オプショナルって以下だよね

・普通の型にはnil入れられないという仕様にした。
          var hoge:String = "ホゲホゲ"
          hoge = nil    < エラー

・nil入れるために、普通の型改(オプショナル型)を作った。
 疑問符(?)つけて定義します。 
    var hoge:String? = "ホゲホゲ"
          hoge = nil    <OK
  しかし、こんなことしたい場合そんなに多くないきがするがなー
 
・普通じゃないのでnil以外が入っている時に、普通に処理できない。
    var hoge:String? = "ホゲホゲ"
          hoge += "ピヨピヨ"    <エラー    余計なことするから・・

・nil以外を処理するために、一時的に普通の型に変換する仕組みを作った。オプショナル型に感嘆符(!)をつけて処理します。
    var hoge:String? = "ホゲホゲ"
          hoge! += "ピヨピヨ"    <OK 何びっくりしてるんだか・・

 ・nilだった場合の初期値ってのも用意されている、疑問符疑問符(??)。
  var kosu:Int?
      var kakaku:Int
      kakaku = 120 * (kosu ?? 1)
  ちゃんと初期化して計算式通せよ!・・

 なお、オプショナルバインディングは、コード的に楽になる面も多いので、disりません^^
でもあとで判断するか、先に初期化しておくかという違いなだけだとも言える・・

 
   


 

2017年2月20日月曜日

Unity SpaceX Falcon9に触発されて、ミサイルの再利用に挑戦した

スペースXのファルコン9すごかったです!
着陸動画(本物のほう)
で、Unityでも着陸させてやるって思ったわけです

とりあえず作りました・・・
まるまる同じじゃなく、ミサイルの再利用です
イーロンマスクには全く及びませんね・・ゴメンなさい


一応説明すると、コールドローンチタイプで発射したミサイルは、UFOに突っ込みます。その時弾頭は外れます(宇宙戦争はしたくないので爆発しません)。その後、発射位置上空にロケット部分は戻ってきて、ゆっくりと軟着陸するというわけです。 
※念のためですが、ミサイルにはGravityがかかっています

( 設計図 )



(通り過ぎることもあるミサイル・・ )


(用が済んだら戻ります、丸いのは弾頭で当たった場に浮いてます)

(帰ってきました、お互いにぶつかったりもします)

課題点
  姿勢制御しきれていないので、着陸時に横滑りして台座を外れることもあります。単に上むいて落ちてくるんじゃ風にも流されそうだし・・スラスターがいるかも。
 あと、ターゲットや帰着点上空へ行く速度が速すぎるので通り過ぎてしまい、結局は到着に時間がかかってしまうので、ターゲットへ向けた減速を考えたほうが良いでしょうね・・

コード
 ロケットの処理はほぼコールドローンチのやつにターゲットを変えて微調整しただけです

弾頭が外れる処理
親の親オブジェクトにメッセージ送るのって
transform.parent.transform.parent.SendMessage(..
で良いのだろうか?動いてるけど、もっとスマートな方法
あるかな。





※それにしてもSpaceX Falcon9 ヤバイね!! こんなのバンバン再利用され始めたら、その他のロケット無駄すぎて使えない、過去の遺物だよ。


 








Swift 3 勉強中、文字列の最後の文字読み出し、str.index(before:xxx)とか?、面倒だねー

えっ?まじですか?
swiftで文字列の最終文字取り出しってこんな面倒なの?
そしてしつこいようだけど、これモダンな言語なの?


他になにか手はないのか?
せめてこんな感じで出来ないのかなー


これもめんどくさいし

本当はこんな感じが出来てほしい
str[str.length-1]



2017年2月19日日曜日

Swift 3 勉強中、numbers.map{$0 * 2} とか、クロージャ?・・モダンな言語なの?記号ちっくな言語では?

夕食後もdisり手法でSwift勉強中です
クロージャ(ブロック)のあたりです

let numbers = [1,2,3,5,8,13,21]
let array1 = numbers.map{$0 * 2}

とかできちゃうけど、$0って、第一引数だとか..
何それ?何それ?
 
C言語ちっくをやめてモダンになるはずでは?
それなのに、変な省略形もあったもんですなー

私は下のような省略しない方がわかりやすいと思うだ

let array1 = numbers.map){(val:Int) -> Int in
     return val * 2
})

おぼえりゃ読めるようになるだろうけど。
覚えるためにdisりブログってるわけですだ
 


 

Swift 3 勉強中、defer文もなかなか癖がありますなー

defer文
ブロックを抜ける時に動く処理を書いておくもののようです
 
しかし、書くとどの順番で動くのか直感的ではない・・
deferは下から動く仕様らしいので
書きようによっては下から上に処理かけちゃうよ・・
 ノイマン先生げきおこ?


あと、deferはreturn文より上に書いておかない機能しないようですな。下の例では、3の時挨拶しないで終わっちゃってますよ・・アララ
 




Swift 3 勉強中 関数でいち抜けたするのに、gurad-else文で書かねばなんねの?

今日は関数など勉強中
関数途中抜けするのに guard - else文ってのがあるようだけど、これはifの反対条件でRubyで言ったらunless文なんですかね?どう言う意味で使うんだろう?
「守れないので抜けたー」みたいな戦前逃亡??





別にif文で良くないですかね〜
エラーもワーニングも出ないようですし。

決めなら決めにするし、半端なら無駄に拡張するのやめろー
なんかSwiftってまだブレてるでしょ。
(個人的意見です)




2017年2月18日土曜日

Unity まゆ?Trail Rendererで繭のようなものを描いただけ


Swiftで頭が疲れたのでUnityでちょっと発散w
繭?鞠?針金?

なんだろう?
ふと思ってやってみただけです


-処理-
中心点からほどほどに離れた点にTrail RendererをつけてRandom.rotationで、回転位置を変更してぶん回すのを繰り返しただけです


注意:色つけたら、見てはいけないモノが現れたので、白にしました(怖)



Swift 3 勉強中、Swiftのswitch文って強力だねー、なんでも出来過ぎじゃないか!?

Swiftのswitch文って結構複雑なことできちゃうんですね!

タプルを使って複数の値を同時判断しつつ、
レンジ演算子で範囲特定できちゃったり・・


 バリューバインディングとwhereでcaseの中で条件式をかけちゃうなんて・・



 あっ、これだけだとswitch文でやる意味ないか・・

 今までswitch文って、1変数の固定値判定にしか使えないのが普通だと思っていたもので・・唖然  しかし、なんでもできて素晴らしいけど、他の言語への移植性悪くないですかねー

Swift 3 勉強中、if文で複数の条件式をカンマ区切りで使えるって、C言語みたいだね

Swift 3のif文でも、複数の条件式をカンマ区切りで使えるんですねー、なぜかここはC言語引き継いだまま?
条件多い時 && 使うとごちゃごちゃするから
これはいいね!

if a > 10, b < 90, c > 50 {
   print("条件クリアー")
}

これできるのC言語直系だよね、C#とかJavascript,JavaもRubyもできないよね(たしか)。

まあ、使っていきましょう。
 
  

Swift 3 勉強中、インクリメント、デクリメントが無くなっただと!しかし、アセンブラ見たら・・

インクリメント、デクリメントが無くなっただと!
書き間違いがどうとか、cぽいforが無くなったから良いとか、そんなことじゃない!
インクメントやデクリメントは、プロセッサ命令だろー、使わないと遅くなるべ!
って思って調べた。

とりあえずこんなコードを書く

でアセンブラに落ちたコードを見る!

a += 2 の時
a += 1の時
a -= 1の時

なんだ、ちゃんとやってるじゃないか!
8086どノーマル時代からアセンブラ見てないので、たぶんでしかわからないけど、ちゃんと+1、-1の時はインクリメント命令、デクリメント命令使っているようで、Swift3素晴らしかった。

どうしても速く動くコードにしなきゃ脳が心配しちゃうんだよって話でした。
こんなのに詰まっていると勉強進まない・・


Swift 3 勉強中、計算式でどこか一箇所少数値なら全部少数は横暴だと思う


SwiftってObjectiv-cと互換性もあっていいなと、Ver1が出て思っていたけどVer2で結構変更、Ver3に至っては下位互換無しで暴走進化してしまったようで。
最近ちょっと試しアプリ作るにも何かいてもエラー出て、何時間も試行錯誤しなければ書けなくなったわけでした・・

さらに、書店からもObjective-cの書籍が消え去っていたということもあって、改めてSwift3を勉強しますか!という段階です。

で基本から始めて早速気に入らないことが・・

a = 3 * (10/4)これは10/4 は 2になるので6と、これOK



これを7.5にしたい場合どこかを少数値にするんだとか!



え?じゃあこれでもいいわけかい!!
へーんなのっ


そもそも、3.0に対して(10/4)=2をかけたい時もあるでしょ!こう書かねばならんのかい!?


はあはあ・・これ気に食わないのは頭固いのかな?
まあ、仕様は仕様だから仕方ないけど。
一箇所少数値なら全部少数値扱いってやりすぎでね?と思ったわけでした。

では。

参考書(これ見て勉強してます)
 



2017年2月16日木曜日

Unity 誘導ミサイルの軌跡が楽しいのー


ランダムな動きが好物なもので・・
ロケットにトレイルレンダラーをくっつけて楽しんだだけ


これ動かし続けると、ロケットがUFOに当たって
UFOを押して加速して、Unity空間座標外に出て行く
わけです



あまり当たらないところが好みです




Unityはこういうの簡単に作れて楽しいねー
でもうまいことゲーム化できるアイデアがないなぁ
空間画像を作るだけでも楽しいけど
これでは自己満足に終わってる・・

何か形にしないとな。
 



2017年2月14日火曜日

Unity コールドローンチ(Cold launch)の多数弾でUFO追い出し

昨日のコードをちょっと改造し、コールドローンチロケットを多数弾でUFOを追い出すやつ作ってみました。


一応出来ましたが・・命中率悪い
移動予測とか入れてないので仕方ないですが。


コールドローンチの力はランダム入れて、あえておかしな方向にしています



ドローンカメラで撮ってみた

ひどいコード
  本当に適当でごめんなさい。

あと過去ブログの ほどほどに当たらない誘導弾 を参照ください

ではでは。

2017年2月13日月曜日

Unity コールドローンチ(Cold launch)を作ってみた

ニュースでコールドローンチって技術が出ていたので、ちょっと作ってみた。しかし、どこかに飛ばすのはどうかと思ったので、ホバリングさせてみた。

 打ち出しは、AddForceでインパクトで重力に勝てればOKでしょう。ロケットエンジンは、AddForeceのForeceモードで、位置によって出力を変えるようにして制御してみました。本物のロケットは、燃焼が不安定で難しいと思うので、その雰囲気を入れるために、FixedUpdate()ではなくあえてUpdate()で試しました。

高さ4mでホバリングするようにしています

コード(ハードコーディングご勘弁)



本物はどういう制御しているのだろうか・・
姿勢制御はないので、傾いたりすれば吹っ飛んでいきます
下はシーン画面でロケットのZ軸を傾けたときの動きです


ではでは 

2017年2月12日日曜日

Unity ドローンぽいカメラワークを簡単に

浮き島的な、床のやつ作った時にドローン的な動きのカメラが欲しくなったので作ってみました。

ドローン持っていないので、対象をターゲットに撮影しながら自由自在に位置を変えれるものだと思っていますが、多少惰性で位置ずれするのかな〜と想像しました

 考え

で、できたやつ


コード


細いこと言うと色々問題あると思いますが。とりあえずで。
もっと本物らしくするなら、force与えて速度変化させないとならないかも・・
そのうち。




2017年2月11日土曜日

Unity 浮き橋的な、乗ると沈むような不安定な床 new

浮き橋的な、乗ると沈むような不安定な床を1か月ほど前にちょっと試したのですが、ふと別な実現方法を思いついたのでやってみました。


結論として、いい感じにできました!
 

考え方としては、土台にスプリングついた床です!





Unityでは、土台に動かないオブジェクトを作って、それと床をSpringJointでねばしました。
本当は浮力なのだろうけど、見た目はほぼ同じでしょう〜








コードはほぼ書いてないので、コンポーネント任せです。
ほぼ=ちょっと床が暴れるのを抑えるコード1行
やっぱり何かこれ系ゲーム作ってみたくなったなう。







2017年2月7日火曜日

Unity ポリゴンアウトラインを3角ポリゴンMeshにするやつ(あとちょっと)


マウスでアウトラインを書いて、ポンとすると
Mesh描くツールを作って色々な形を試しつつデバッグ
しています。


かなり大雑把ですが・・

これOK






これOK

これOK





これNG
3角形を見つける処理がまだ、不十分なんだろう・・・


処理が複雑になってきたし。

続く・・