Deca-pod.jp

Anything

特定のオブジェクトが存在するか確認してあったら削除するコード

public void OnPush (){


		GameObject search = GameObject.Find ("Emanu(Clone)");
		bool n = (bool)search;


		if (n == true) {
			Destroy (prefab);
			n = false;

			return;
		}


		GameObject parentObject = GameObject.Find ("Enemy");
		GameObject obj = (GameObject)Resources.Load ("Prefabs/Emanu");
		prefab = (GameObject)Instantiate (obj);



		Debug.Log (n);
		prefab.transform.SetParent (parentObject.transform,false);




		}

MonoDevelop(Xamarin)で自動で括弧を閉じる設定

Unityでスクリプトを書く際はMonoDevelopまたはXamarinを使用するのが一般的だと思う。

使い始めた頃から感じ続けていたちょっとしたイライラが解消出来たのでその方法を記す。

なににイライラしていたのか?

自動で括弧が閉じられない事です。

なにかメソッドを作成した後に

void Hoge () { 

この状態で止まるじゃないですか。これ地味にイラッとしますね。

設定を見直します!

設定→テキストエディタ→動作→対応する括弧にチェック入れば完了!

一応英文の記事も載せておきますね。

Unity UI Canvasの子要素のポジション問題

UnityのUIシステム、大変お世話になっております。

特に問題もなくUIを作り始めた矢先、それは、Prefab化したボタンをInstantialした時に起こりました。

先ず大前提として全てのUI要素はCanvasの子要素でなくてはならないというルールがあります。

そのため私はこんなコードを書きました。

GameObject prefab = (GameObject)Resources.Load ("Prefabs/button");
                Instantiate (prefab);
                prefab.transform.parent = _ParentObject.transform; 
 

簡単に説明をするとResource.Loadでプレハブのパスを渡してInstantiateの引数にprefabを渡す。その後GameObject Prefabの親要素(Parent)に予めクラス変数として宣言していた_parentObjectを指定しています。
因みにResource.Loadの戻り値はObject型になるのでGameObject型にキャストしています。

Instantiateした後にParentを指定するという愚行です。

気を取り直してこのように修正をしました。

GameObject obj = (GameObject)Resources.Load ("Prefabs/ToOutSidePlate");
                        GameObject prefab = (GameObject)Instantiate (obj);
                        prefab.transform.SetParent (parentObject.transform); 

SetParentは引数に渡したオブジェクトの子要素としてオブジェクトを作成する関数です。

これをビルドしてみると、Canvasの子要素としてボタンを作成することには成功しましたが、Unityでは子要素は親要素のポジションを追従してしまうのでボタンを思ったポジションに表示することができませんでした。

解決策としてはSetParentの第二引数にfalseを渡せばOkです。

GameObject obj = (GameObject)Resources.Load ("Prefabs/ToOutSidePlate");
                        GameObject prefab = (GameObject)Instantiate (obj);
                        prefab.transform.SetParent (parentObject.transform,false);

以上、開発室から今日の報告を終わります。

Unity GUI 複数のボタンからどのボタンが押されたか判別をする方法

UnityでUIを簡単に扱えるようになった。

複数のボタンを並べてみたところ、どのボタンが押されたか判別する方法がわからなかった。

f:id:vaikong:20150127022937p:plain

結論から言うと引数を渡せばOK。
基本的過ぎてあまり情報は載っていなかった。

手順
まず、ボタンAとボタンB、そしてテキストを作成する。

f:id:vaikong:20150127023534p:plain

C#スクリプトを作成してCanvasへアタッチ

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    Public Text text;

	public void OnClick(int number)
    {
        switch (number)
        {
            case 0:
                text.text = "A";
                break;
            case 1:
                text.text = "B";
                break;
            default:
                break;
        }
    }
}

Canvasのtextを指定する。
f:id:vaikong:20150127024558p:plain
そしてボタンのインスペクターのOn Clickへ上記の引数ありのメソッドを指定する。

f:id:vaikong:20150127023727p:plain

そうしましたらおめでとうございます。
引数はなにを渡しましょうかと聞かれてくるのでここでは0と1を各ボタンに指定してあげてください。

f:id:vaikong:20150127024052p:plain
これでボタン判別はばっちりです。

UnityのGUIをC#で扱うメモ(初心者向け)

UnityのGUIC#で扱うメモ(初心者向け)

なんとなくRPGっぽい物を作っていてUnity4.6から実装されたというGUIシステム通称uGUIを使用してみた。

まずは基本操作の確認
f:id:vaikong:20150127021658p:plain
図を参考にPanel,Button,InputField,Textをそれぞれ適当に配置。
配置はInspectorのTransformのPositionに数値を入力する。

なんとなく配置ができたらC#スクリプトを準備して今回はPanelへアタッチをする。
中身は簡単。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class janjan : MonoBehaviour {

        public Sprite sprite;
        public Image image;

 	public void onClick (){

                image.sprite = sprite;
        }


} 

クラス変数をPubricで宣言するとInspector上でとのSpriteなのかImageなのかを指定することが出来る。

或いは

public void onClick (){
		image = gameObject.GetCompornent <Image> ();
                image.sprite = sprite;
        }

と、明示的にすればPublicにしなくてもok

ここまで準備が出来たらスクリプトをアタッチしたPanelを選択するとInspector上にimageとspriteの欄が追加されているので、imageにはPanel、spriteには背景にしたい画像を指定する。
f:id:vaikong:20150127021725p:plain
ビルドしてボタンを押せば背景が変わります。


続いてInputFiledとTextについて

先ほどのスクリプトを変更する。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class janjan : MonoBehaviour {

        public Sprite sprite;
        public Image image;
        public Text text;
        public InputField inputField;
    // Use this for initialization
    void Start () {
                

    
    }
    
    // Update is called once per frame
    void Update () {
    
    }
        public void OnClick (){

                image.sprite = sprite;
                text.text = inputField.text;
        }


}

変更箇所はText,Inputfieldをクラス変数へ追加
メソッドOnClickへtext.text = inputField.text;を追記

すると、panelのInspectorへTextとInputFieldが表示されるのでどのInputFieldからどのTextへ表示したいのかここで指定してあげる。

ビルド後、InputFieldへ適当に文字を入力してボタンを押してTextが変更されるか確認。


UIButtonを使って画面遷移をする。

まずボタンを作成する。

//ボタンが押されるとpushAlertメソッドを呼び出す。
    SEL method = @selector(pushAlert);
    UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(20, 20, 40, 15);
    [button setTitle:@"btn" forState:UIControlStateNormal];
    [button addTarget:self action:method forControlEvents:UIControlEventTouchUpInside];
    
   
    [self.view addSubview:button];

実行するとこんな感じ。
f:id:vaikong:20140911004031p:plain

タップするとアラートが出るようにする。
UIAlertViewDelegateをプロトコルに設定して。

#import <UIKit/UIKit.h>
#import "ViewController2.h"
@interface ViewController : UIViewController <UIAlertViewDelegate>

@end

アラートを設定する。

-(void)pushAlert{
    UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"画面遷移しますか?"message:nil delegate:self cancelButtonTitle:@"no" otherButtonTitles:@"ok", nil];
    [alert show];
}

表示してみる。
f:id:vaikong:20140911004451p:plain

UIAlertViewのalertViewメソッドをオーバーライドしてアラートでokが選択されたら画面を遷移するようにする。

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    
    
    ViewController2 * vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"VC2"];
//トランジションをクロスディゾルブに変更
    vc2.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
   
    switch (buttonIndex) {
        case 0:
            
            break;
        case 1:
            [self presentViewController:vc2 animated:YES completion:nil];
           
            break;
        default:
            break;
    }
}

第二引数のbuttonIndexが各々のtitleに対応している。
(0がキャンセル、1がotherButtonTitleです。)

okボタンを押すと・・
f:id:vaikong:20140911005121p:plain

無事画面遷移に成功しました。

Ruby on rails 開発環境を構築する

Xcode,CommandLineToolsがインストールされているものとします。
ターミナルを立ち上げて
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)
を実行します。
passwordの入力を求められるのでpassを入力してenter
上手く行けば
Installation successful!と表示されます。
問題無くインストールされているか確認するためにbrew doctorと入力して確認します。

特に問題がなければ Your system is ready to brew.と表示されます。

念のため brew update で最新版にupdateしておきます。

ついでに brew git でGitもインストールします。

続いてターミナルを強化するoh-my-zshをインストールします。

curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh |
をコピペしてenter!

一度ターミナルを閉じて再度開くと文字への色付け、コードの自動補完機能が付きました。

続いてテキストエディタです。

あのザッカーバーグも使っているというEmacsをインストールします。

brew install emacs

と入力してenter

続いてemacエイリアスを作成してzshに指定します。

echo 'alias emacs="$(brew --prefix emacs)/bin/emacs"' >> ~/.zshrc
と入力enter
source ~/.zshrc
入力enter
ついでにSublime Text2をインストール
http://www.sublimetext.com/2

いよいよrubyのインストールです。
ruby -vでrubyのバージョンを確認しましょう。
2014/08/18時点、最新版はruby2.1.2です。
有無を言わさず最新版をインストールしてもよいのですがワンクッション置いて
rubyバージョン管理システムrbenvをインストールします。
brew install rbenv
enter
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
enter
source ~/.zshrc
enter
brew install ruby-build
enter
brew install rbenv-vars openssl readline
enter
rbenv install 2.1.2
enter
インストール終了後
rbenv global 2.1.2
enter
rbenv rehash
enter

ターミナルを再起動、ruby -vでバージョン2.1.2になっているか確認。

続いてruby on railsのインストールです。
gem install rails --no-ri --no-rdoc
enter
ruby on rails 4.1.4がインストールされます。
rails -vでバージョン確認

powとpowderをインストール
pow
$ curl get.pow.cx | sh
powder
gem install powder

ruby on raisの動作確認
まずrails new “title”でスケルトンを作成

で、cdの.pow内に”title”のシンボリックリンクを作成する。
最終チェックは
open http://“title”.dev

こんな画面が表示されればおめでとう!

開発環境が構築されました!

f:id:vaikong:20140824181102p:plain



railsの世界へ飛び立とう!