Unity入門その1(基本編)「ボタン実装/ランダム・乱数1/絶対指定・相対指定」
unityを何ヶ月かぶりに触って全然使い方を忘れていたので、改めて初心者に戻り修行したいと思います。
今回行うこと
・ボタン実装までの手順(UI image)
・ランダム生成、乱数
・絶対指定、相対指定の仕方
*ボタン実装までの手順(UI image)
意外と時間を使ったのでできるだけ細かく記載していこうと思います。
手順1
Hierarchy→Create → Image を選択
手順2
1. Create→Create Emptyを選択
するとGameObjectが出現
2. Inspectorを選択し、Add Componentをクリック
New Script →C#を選択。
上記のように表示されると思います。
手順3
Assets→C#のファイルをクリックし、コードを記載する。
void Start()の{}の中に以下を記載します。
using UnityEngine.UI; public class hogehoge : MonoBehaviour { // Use this for initialization void Start () { // 対象を探す var botan = GameObject.Find ("hogebtn").GetComponent<Button> (); botan.onClick.AddListener (delegate { Debug.Log ("押してやったぞ"); }); } // Update is called once per frame void Update () { } }
手順4
Canvas → Image をクリックし Inspector→Add Component →Scripts→C#のファイルを選択。
Imageの名前をC#で記載した名前に変更。Enterをクリック。
手順5
Add Component → UI → Button追加
実行!
ランダム生成/ 乱数
Start(){}の中に記載。
//整数型の変数を定義 int a = 12; int b = 23; //足し算してみた Debug.Log (a + b); //aの値を書き換えてみた a = 6; Debug.Log (a); a = a / 2; Debug.Log (a); //論理計算 if (a < b) { Debug.Log ("aよりbが大きい"); } if (a == b) { Debug.Log ("aとbは同じ"); } else if (a > b) { Debug.Log ("aはbよりも大きい"); } else { Debug.Log ("それ以外"); } //ランダム //aの値を書き換えてみた a = Random.Range (1, 7); //※整数1から6のどれかになる //論理計算 if とelseを組み合わせて if (a < 3) { Debug.Log ("右ストレート"); } else if (a < 5) { Debug.Log ("中央突破"); } else { Debug.Log ("左に発射"); }
絶対指定・相対指定
void Start () { // 対象を探す var botan = GameObject.Find ("hogebtn").GetComponent<Button>(); botan.onClick.AddListener (delegate { //ボタンの移動(絶対指定のみ) // 座標の変数を定義 Vector2 pos = new Vector2 (320, 320); //対象を探し当てる GameObject aaa = GameObject.Find("Canvas"); //移動 aaa.transform.position = pos; }); } //クリック(画面タップ位置に移動) void Update (){ if(Input.GetMouseButtonDown (0)) { //対象を探し当てる(相対・絶対指定) var moveObj = GameObject.Find ("btn0"); //Debug.Log (moveObj.transform.position); moveObj.transform.position = Input.mousePosition; //移動量x,y,zを指定して移動!(相対指定) //moveObj.transform.Translate(20,50,0); } }
解説・補足
Start{}は一回のみ実行される。
Update{}は何度でも実行される。
varという大きなくくりの中にGameObjectがある。
Findで対象を探してから命令を実行する。(探す→CRAD処理の形)
var moveObj = GameObject.Find ("btn0");
Railsの会26日目[ /authenticate/minimum / !!]
今回の範囲
パスワード設定
6文字分のスペースでパスワードを設定した場合falseで返すテスト
test "password should be present (nonblank)" do @user.password = @user.password_confirmation = " " * 6 assert_not @user.valid? end
最低5文字以内か調べる
test "password should have a minimum length" do @user.password = @user.password_confirmation = "a" * 5 assert_not @user.valid? end
minimum
カラムの最小値を求める。
User.minimum('age')
# SELECT MIN("users"."age") AS min_id FROM "users"
!!
論理オブジェクトに変換。
trueかfalseで返すようにする。
!!user.authenticate("foobar") => true
authenticate
認証に失敗した時にfalseを返す。
( !!がついている場合結果が反対になる)
間違えているpasswordを与えてみる
[14] pry(main)> user.authenticate("not_the_right_password") => false
正しい値を与えてみる
[15] pry(main)> user.authenticate("password") => #<User:0x007fcb694285b0 id: 1, name: "hoge", email: "h@h.com", created_at: Tue, 20 Jun 2017 16:09:49 UTC +00:00, updated_at: Tue, 20 Jun 2017 16:09:49 UTC +00:00, password_digest: "$2a$10$Hl8/iF2bbu7D37z3aeh5T.OMNdhRR0flsFhflsfF3L/E041sO">
6 章のまとめ
・マイグレーションを使うことで、アプリケーションのデータモデルを修正することができる
・Active Recordを使うと、データモデルを作成したり操作したりするための多数のメソッドが使えるようになる
・Active Recordのバリデーションを使うと、モデルに対して制限を追加することができる
・よくあるバリデーションには、存在性・長さ・フォーマットなどがある
・正規表現は謎めいて見えるが非常に強力である
・データベースにインデックスを追加することで検索効率が向上する。また、データベースレベルでの一意性を保証するためにも使われる。
・has_secure_passwordメソッドを使うことで、モデルに対してセキュアなパスワードを追加することができる
bash で branch名が表示できるようにした。
以前は oh my zshを使用していたが、古いとか重いなど記事があり
今回bashで導入したのでメモ。
Mac OS X で zsh + oh-my-zsh の環境を作って一通り設定するまで - Qiita
qiita.com
導入後
Railsの会25日目[dup /インデックス/pg (0.18.4) ]
今回の範囲(続き)
インデックス
データベースの世界で、インデックス(索引)とはテーブルに格納されているデータを高速に取り出す為の仕組みです。
基本: カラムに対してインデックスをつける。
ALTER TABLE landing_pages ADD INDEX index_name(user_id)
インデックスが早い時
1. テーブル内のデータ量が多く、少量のレコードを検索する場合
2. WHERE句の条件、結合の条件、ORDER BY句の条件として頻繁に利用する
ただし全表走査が目的のテーブルであれば索引は不要
3. NULL値が多いデータから、NULL値以外の検索をする
IndexはNULLを含まないのでNULL値以外の検索には効果がある
indexを導入しない方がいい時
1.表の規模が小さいか、表から大部分のレコードを検索する場合
2.WHERE句等の条件としてあまり仕様されないもの
3.列の値が頻繁に挿入、更新、削除される
4.Indexは表に新規行が挿入されればIndexにも自動的に値が格納される。そのためデータの検索速度は向上するが挿入、更新、削除の処理では索引のメンテナ
ンス作業が発生し、速度低下につながる
5.WHERE句の条件として使用されるが、列が式の一部として参照される
MySQLのIndexをはるコツ - Qiita
validation
1. validatesを使い、モデルクラスに検証する条件を定義する。
# 商品名は必須
validates :title, presence: true
2. コントローラーなどでモデルを保存/更新する。
if @product.save
redirect_to @product, notice: '商品を作成しました'
else
render :new
end
3. バリデーションエラー時には、errorsにエラーメッセージが設定されるので、それを表示する
Rails 4でモデルのバリデーションまとめ - Rails Webook
dup
元のオブジェクトと同じクラスの新しいオブジェクトで、
元のオブジェクトのインスタンス変数を新しいオブジェクトにコピーしたもの。
h = Hoge.new hd = h.dup h.name = 'name' hd.name = 'dup' h.name #=> 'name'
uniqueness
指定した属性がユニークであることを検証する。
# 定義
validates email, uniqueness: true # 値がユニークであれば検証成功# テスト
it { is_expected.to validate_uniqueness_of(:email) }
upcase / downcase
self.email = email.downcase
before_save
セーブする直前に毎度呼び出される。
before_save{ self.email = email.downcase }
コールバック
バリデーションの実行、DBの保存などのタイミングで処理を行うための機能。
一部例
- after_validation #検索メソッドでオブジェクトが見つかったタイミングで実行
- before_save #オブジェクトがインスタンス化されたタイミングで実行
Bundler cannot continue.のエラーが出た時
An error occurred while installing pg (0.18.4), and Bundler cannot
continue.
Make sure that `gem install pg -v '0.18.4'` succeeds before bundling.
Bash on WindowsでRailsの環境構築してはまったところ。
以下のサイトを参考にして構築しました。
windowsのbashでRails環境を構築してみる。(Windows 10 Anniversary Update版) - Qiita
デフォルトの状態でgit >rbenv >rubyの順番で試したが、うまくいかず私の場合作業用フォルダを作成してその中でgit >rbenv> rubyの順番で導入しました。
Bundle install できない問題
原因 ローカルではなくグローバルのrubyを使っているから
最新のrubyをダウンロードしたはず、、
$ ruby -v ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux]
$ rbenv exec gem install bundler Fetching: bundler-1.10.3.gem (100%) Successfully installed bundler-1.10.3 Parsing documentation for bundler-1.10.3 Installing ri documentation for bundler-1.10.3 1 gem installed $ rbenv rehash # 忘れずに! $ which bundle ~/.rbenv/shims/bundle $ bundle install --path vendor/bundle Fetching gem metadata from https://rubygems.org/........ Fetching version metadata from https://rubygems.org/.. Using rake 10.3.2 ...(中略)... Using bundler 1.10.3 Bundle complete! 15 Gemfile dependencies, 45 gems now installed. Bundled gems are installed into ./vendor/bundle.
DBがないと言われる
$bin/rails db:migrate
下のようにでたらおk
== 20170515162447 CreateUsers: migrating ======================================
create_table(:users)
== 20170515162447 CreateUsers: migrated (0.0019s) =============================
Railsの起動にはまる
rails aborted! Errno::EINVAL: Invalid argument - Failed to watch "/home/nishioka/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.0/lib/active_support/locale": the given event mask contains no legal events; or fd is not an inotify file descriptor. /home/nishioka/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rb-inotify-0.9.7/lib/rb-inotify/watcher.rb:74:in `initialize' /home/nishioka/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rb-inotify-0.9.7/lib/rb-inotify/notifier.rb:190:in `new'
以下を記入
config/environments/development.rb #config.file_watcher = ActiveSupport::EventedFileUpdateChecker 以下を追加 config.file_watcher = ActiveSupport::FileUpdateChecker