Unity入門その2「じゃんけんゲーム レベル1-2」
画像をGUIに出すのが鬼畜だったのでメモ。
全レベル1から3まであります
[次回レベル3を記載予定]
じゃんけんゲーム(レベル1)
お題内容
ボタンを押したら、ランダムで1~3のどれかになるプログラムを作って
次に、1ならぐーの画像、2ならちょきの画像、3ならパーの画像を表示
(制限時間20分)

手順1
1.上記のUIを作る (Image)
2.機能設定 (Add Component)
1. UI作成
Hierarchy→Create → Image を選択
詳しくはこちらの記事へどうぞ↓
Unity入門その1(基本編)「ボタン実装/ランダム・乱数1/絶対指定・相対指定」 - キリンめも(技術)
見た目はこれで完成です。
2. Add Component
・Button (on click 追加ボタンを押す + )
手順2 (画像取り込み)
Project → Assets (アイコンがファイル)の上を右クリック
inport New Assetsをクリック → 画像選択

手順3
コードを書く
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class janken : MonoBehaviour {
//0.使用するものの準備
Image gamebtn_; //UIでつけた名前を記載する
public Sprite Img0;
public Sprite Img1;
public Sprite Img2;
void Start () {
// 1.対象を探す
var botan = GameObject.Find("btn").GetComponent<Button>();//0と同じ名称
gamebtn_ = GameObject.Find ("img").GetComponent<Image> ();//UIのイメージの名前と同じ
botan.onClick.AddListener (delegate {
Debug.Log("押");
//2.整数0から2をランダム
int a = Random.Range(0,3);
Debug.Log(a);
if(a == 0){
gamebtn_.sprite = Img0;
}else if(a == 1){
gamebtn_.sprite = Img1;
}else{
gamebtn_.sprite = Img2;
}
});
}
void Update (){
}
}
手順4
1. コードファイルに画像を指定する
Img 0...2に画像を入れる
Project → Assets → C#ファイルをクリック Img1のSelect をクリック

3. もう一つオブジェクトを追加
同様にbtnにも手順1からUI設定を行う。
おまけ (レベル2)
お題内容
以下の画像をクリックするとランダムでじゃんけんの画像が表示される。

コードはこちら
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class janken : MonoBehaviour {
//0.使用するものの準備
Image gamebtn_; //UIでつけた名前を記載する
public Sprite Img0;
public Sprite Img1;
public Sprite Img2;
void Start () {
// 1.対象を探す
var botan = GameObject.Find("img").GetComponent<Button>();//0と同じ名称
gamebtn_ = GameObject.Find ("img").GetComponent<Image> ();//UIのイメージの名前と同じ
botan.onClick.AddListener (delegate {
Debug.Log("押");
//2.整数0から2をランダム
int a = Random.Range(0,3);
Debug.Log(a);
if(a == 0){
gamebtn_.sprite = Img0;
}else if(a == 1){
gamebtn_.sprite = Img1;
}else{
gamebtn_.sprite = Img2;
}
});
}
void Update (){
}
}
あとがき
社員さんのアドバイスもあり、完成することができました。感謝です✨
次回のゲーム作成は「もぐら叩きゲーム」を作る予定。
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.
