- 2022.03.28 Monday
- スポンサーサイト
-
一定期間更新がないため広告を表示しています
- | スポンサードリンク | - | | - | - | pookmark |
- 2014.10.30 Thursday
- Unity 4.6 UI(uGUI) Buttonをprefab化してInstantiateしてforでいっぱいボタン作成できた件
-
Unity 4.6 UI(uGUI) Buttonをprefab化してInstantiateしてforでいっぱいボタン作成できた件
using UnityEngine;
using UnityEngine.UI;//Unity 4.6 UI(uGUI) Class Load
using System.Collections;
using System.Collections.Generic;
//using UIButtonScript;
public class NewPrefabScript : MonoBehaviour {
void Awake(){
}
int numEnemies = 8+1;
public List<GameObject> ref_prefab1InstanceArr;
public List<GameObject> ref_prefab2InstanceArr;
void Start () {
GameObject prefab1 = (GameObject)Resources.Load("Home/Cube");
GameObject prefab2 = (GameObject)Resources.Load("Home/UIButton");
int buildY = 300;
for(int i = 0; i < numEnemies; i++){
Debug.Log("Creating enemy number: " + i);
GameObject prefab1Instance=Instantiate(prefab1,new Vector3(-466, -366+buildY, 703),transform.rotation) as GameObject;
GameObject prefab2Instance=Instantiate(prefab2,new Vector3(100, buildY, 0),transform.rotation) as GameObject;
ref_prefab1InstanceArr.Add(prefab1Instance);
ref_prefab2InstanceArr.Add(prefab2Instance);
if (prefab2Instance.transform) {Debug.Log("prefab2Instance.transform is OK"+prefab2Instance.transform);} else {Debug.Log("prefab2Instance.transform is NG");}
if (prefab2Instance.transform.parent) {Debug.Log("prefab2Instance.transform.parent is OK= "+prefab2Instance.transform.parent);} else {Debug.Log("prefab2Instance.transform.parent is NG");}
if (prefab2Instance.transform.name!="") {
prefab2Instance.transform.name="UIButton0"+i;
prefab2Instance.transform.GetComponent<UIButtonScript>().functionName="UIButtonFunc";
prefab2Instance.transform.GetComponent<UIButtonScript>().functionParam=""+i;
GameObject childObject = prefab2Instance.transform.FindChild("Text").gameObject as GameObject;
prefab2Instance.transform.FindChild("Text").GetComponent<Text>().text=prefab2Instance.transform.name;
} else {
Debug.Log("prefab2Instance.transform.parent is NG");
}
GameObject canvas = GameObject.Find("Canvas");
Debug.Log("canvas.transform.position.y="+canvas.transform.position.y);
//prefab1Instance.transform.parent = canvas.transform;//OK;
//prefab2Instance.transform.parent = canvas.transform;//OK;
//http://docs.unity3d.com/460/Documentation/ScriptReference/Transform.SetParent.html
prefab1Instance.transform.SetParent(canvas.transform);//OK;
prefab2Instance.transform.SetParent(canvas.transform);//OK;
canvas.s
buildY = buildY - 33;
}//for
////////////////////////////////
string debugstr = "";
int v = 0;
Debug.Log ("#####ref_prefab2InstanceArr.Count="+ref_prefab2InstanceArr.Count);
for (v=0; v < ref_prefab2InstanceArr.Count-1; v++) {
debugstr += "(" + v + ")name=" + ref_prefab2InstanceArr [v].transform.name;
}
Debug.Log ("##############################ref_prefab2InstanceArr debugstr===" + debugstr);
Debug.Log ("#########NewPrefabScript##############");
} //start
}
いっぱいボタンデータ
http://www.mediafire.com/download/aei05kyf7joii35/uGUI003.zip
参考
【Unity】Unity 4.6 新機能「SetParent」 - コガネブログ
http://baba-s.hatenablog.com/entry/2014/08/26/100613
- | whaison | Unity3d | 15:28 | comments(0) | - | pookmark |
- 2014.10.29 Wednesday
- Unity 4.6 UI(uGUI) Buttonをprefab化してInstantiateしたらCanvasにadd Childできなくて困った件
-
Unity 4.6.20 Open Beta (FullyTested) で新登場したUI(uGUI) をprefab化してInstantiateしようとしたらCanvasにadd Childできなくて困った件
最初prefabをなんかそのまま引っ張ってこようとしたけど
インスタンス作ってるんだからインスタンスをGameObjectとして型変換したらばうまくいっちゃった件。
さらにボタンのテキストにインスタンスに割り当てた名前を入れたくてさらにusing UnityEngine.UI;
が必要とやっとこさ気づいた。
using System.Collections;
//using UIButtonScript;
public class NewPrefabScript : MonoBehaviour {
void Awake(){
}
int numEnemies = 3;
void Start () {
GameObject prefab1 = (GameObject)Resources.Load("Home/Cube");
GameObject prefab2 = (GameObject)Resources.Load("Home/UIButton");
int buildY = 200;
for(int i = 0; i < numEnemies; i++)
{
Debug.Log("Creating enemy number: " + i);
buildY = buildY + 33;
}
Debug.Log ("#########NewPrefabScript##############");
//Instantiate(prefab1,transform.position,transform.rotation);
//Transform t = IInstantiate (prefab1, transform.position, transform.rotation);
GameObject prefab1Instance=Instantiate(prefab1,transform.position,transform.rotation) as GameObject;
//Instantiate(prefab2,transform.position,transform.rotation);
GameObject prefab2Instance=Instantiate(prefab2,new Vector3(100, buildY, 0),transform.rotation) as GameObject;
//prefab2.transform.parent = Canvas;
if (prefab2Instance.transform) {
Debug.Log("prefab2Instance.transform is OK"+prefab2Instance.transform);
} else {
Debug.Log("prefab2Instance.transform is NG");
}
if (prefab2Instance.transform.parent) {
Debug.Log("prefab2Instance.transform.parent is OK= "+prefab2Instance.transform.parent);
} else {
Debug.Log("prefab2Instance.transform.parent is NG");
}
if (prefab2Instance.transform.name!="") {
prefab2Instance.transform.name="UIButton0"+1;
Debug.Log("prefab2Instance.transform.parent.name is OK ="+prefab2Instance.transform.name);
prefab2Instance.transform.GetComponent<UIButtonScript>().functionName="UIButtonFunc";
prefab2Instance.transform.GetComponent<UIButtonScript>().functionParam="1";
//GameObject gameObject
GameObject childObject = prefab2Instance.transform.FindChild("Text").gameObject as GameObject;
//childObject.GetComponent<Text(Script)>.text=prefab2Instance.transform.name;
//GameObject child = childObject.transform.GetComponentInChildren<Text>();
Debug.Log("#### prefab2Instance.transform.childCount="+prefab2Instance.transform.childCount);
Debug.Log("#### prefab2Instance.transform.GetChild(0).name="+prefab2Instance.transform.GetChild(0).name);
Debug.Log("#### prefab2Instance.transform.FindChild('Text').name="+prefab2Instance.transform.FindChild("Text").name);
Debug.Log("#### prefab2Instance.transform.GetChild(0).GetComponent<Text>().text="+prefab2Instance.transform.GetChild(0).GetComponent<Text>().text);
//////////////////////////////////////////////////////////////////////////////////////////////////////
/// using UnityEngine.UI;//Unity 4.6 UI(uGUI) Class Load
/// InstanceName into Text GameObject TextComponent text propaty
//prefab2Instance.transform.GetChild(0).GetComponent<Text>().text=prefab2Instance.transform.name;
prefab2Instance.transform.FindChild("Text").GetComponent<Text>().text=prefab2Instance.transform.name;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
int compoNum=0;
Debug.Log("#### childObject.transform.childCount="+childObject.transform.childCount);
for (int i = 0; i < childObject.transform.childCount; i++) {
GameObject gameObj = childObject.transform.GetChild(i).gameObject; //GetChild()で子のgameobjectを得る
Debug.Log("gameObj.name="+gameObj.name);
//if(go.name=="Text"){
// Debug.Log("######### find !!!! go.name="+go.name);
// continue;
//}
compoNum++;
}
Text[] components;
components = childObject.GetComponentsInChildren<Text>();
foreach (Component compo in components) {
Debug.Log("compo.name="+compo.name);
}
*/
} else {
Debug.Log("prefab2Instance.transform.parent is NG");
}
GameObject go = GameObject.Find("GameObjectA");
Debug.Log("go.transform.position.x="+ go.transform.position.x);
GameObject canvas = GameObject.Find("Canvas");
Debug.Log("canvas.transform.position.x="+ canvas.transform.position.x);
prefab1Instance.transform.parent = canvas.transform;//OK;
prefab2Instance.transform.parent = canvas.transform;//OK;
//GameObject.Find("UIButton(Clone)").transform.parent=canvas.transform;//OK
//GameObject.Find("Cube(Clone)").transform.parent=canvas.transform;//OK
}
}
この記事のデータ
http://www.mediafire.com/download/yy7br7lq51b63b3/uGUI002.zip
関連
これさんざん読んで
http://forum.unity3d.com/threads/setting-the-parent-of-a-transform-which-resides-in-a-prefab.30496/
これでtransformプロパティないじゃんとか思って
http://dev.classmethod.jp/client-side/unity-client-side/unity4-6-ui-components-property-list/
これで解決した。
http://answers.unity3d.com/questions/14234/gameobjectname-returns-a-wrong-name.html
----
- | whaison | Unity3d | 12:25 | comments(0) | - | pookmark |
- 2014.10.24 Friday
- Unity 4.6.20 Open Beta (FullyTested) で新登場したUI(uGUI) でのC# 関数との関係づけ方
-
Unity 4.6.20 Open Beta FullyTested で新登場した UI(uGUI) でのC# 関数との関係づけ方
http://unity3d.com/learn/tutorials/modules/beginner/ui
の中でもとにかく重要なボタン
http://unity3d.com/learn/tutorials/modules/beginner/ui/ui-button
のビデオチュートリアル(英語)をやってみたよ
TestButtonClick.Cs
using UnityEngine;
using System.Collections;
public class TestButtonClick : MonoBehaviour {
public void ClickTest(){
Debug.Log ("clicked");
}
public void ClickTest2(string text){
Debug.Log ("text="+text);
}
}
こんなスクリプトがあったとして
空のGameObjectにTestButtonClick.Csをドラッグして関連付けるよ
Canvas>Panel>Buttonを選択した状態で。。。
Inspecterの下の方で
OnClickで+して2つ枠が現れたら
左のNoneにさっきのGameObjectをドラッグすると
右の枠がプルダウンにかわって
さっき割り当てたTestButtonClick.Cs クラスがでてくるから
選択してさらに作ったClickTest() の関数を選択したらOK
clicked 呼ばれた!できた!
今回のデータだよ。
http://www.mediafire.com/download/esnx0hubnukivxj/UIBeta21Project2.zip
Assets/Scenes/uGUI008_UIButton.unity
が今回のデータだよ
関連資料
Unity 4.6 Beta の新GUIについて 今見ておくべき資料 http://izmiz.hateblo.jp/entry/2014/08/27/231009 - | whaison | Unity3d | 14:54 | comments(0) | - | pookmark |
- 2014.10.23 Thursday
- [Unity] 別カメラの映像をテクスチャに描画するRenderTexture(Pro専用)でテクスチャが反転してしまったら
-
[Unity] 別cameraの映像をtextureに描画するRenderTexture(Pro専用)でテクスチャが反転してしまったら
http://blog.be-style.jpn.com/article/54251664.html
be-styleさん
の記事をもとにやってみたら
2台目のカメラを用意して、そのカメラに映る映像をスクリーンに描画したい。
そんな願いを叶えてくれるのが「RenderTexture(Pro専用)」です。
詳しいことはリファレンスにありますが、簡単に使ってみたので備忘メモ。
Unityリファレンス
http://unity3d.com/support/documentation/Components/class-RenderTexture.html
まずは適当なオブジェクトと、2台目カメラの映像を写すPlaneを用意しました。
次に、プロジェクトウィンドウ内で、右クリック > Create > Render Texture
を押して、Render Textureを生成します。ここでは、「RenderTextureTarget」という名前にしました。
2台目のカメラを用意します。名前は「Sub Camera」としました。
プレビューも2台目が映し出す映像になります(画面中央の赤枠2つ)。
そのとき、Audio Listnerコンポーネントが付与されているので削除します(赤枠左2つ)。
※Audio Listnerが2つあると警告が出るため
最後に、Sub Camera の「Target Texture」に先ほど作った「RenderTextureTarget」を適用し、
planeにも「RenderTextureTarget」を適用すれば完成ですでテクスチャの向きがおかしいので
でテクスチャの向きがおかしいので
PlaneのTransform Scale X:-1 Y:0 Z:-1にするとできました。
関連
関連 , ソフトウェア Photoshopの代わり! 使える無料写真編集ソフト10選 http://www.gizmodo.jp/2013/01/photoshop10.html - | whaison | Unity3d | 12:47 | comments(0) | - | pookmark |
- 2014.10.22 Wednesday
- this.transformは内部でGetComponentしてるようなので、キャッシュしたほうがいい件でエラー
-
こちらの方の 「宴」実装時に得られたUnityプログラムノウハウ - SlideShare http://www.slideshare.net/RyoheiTokimura/ss-35321624 で
「this.transformは内部でGetComponentしてるようなので、キャッシュしたほうがいい」てのがありました
private Transform cachedTranceform;
public Transform CachedTranceform{get{if (null==cachedTranceform) cachedTranceform=this.transform; return cachedTranceform; }}
ってゆうのがあってよくわかんないから改行したくなって
if( ){ } 普通のifだとエラーが出ますprivate Transform cachedTranceform; public Transform CachedTranceform { get { if (cachedTranceform == null) { cachedTranceform = this.transform; return cachedTranceform; } } }
error CS0161: `myObject.CachedTranceform.get': not all code paths return a value
すべての条件で値を返していない というエラーでした
if( ) 1行ifならOKでした
if( ) の場合 OKprivate Transform cachedTranceform; public Transform CachedTranceform { get { if (cachedTranceform == null) cachedTranceform = this.transform; return cachedTranceform; } }
なんかすっきりしない感じー
OKはこれでした
private Transform cachedTranceform;
public Transform CachedTranceform {
get {
if (cachedTranceform == null) {
cachedTranceform = this.transform;
return cachedTranceform;
}else{
//ほかすべて条件で値を返す。
return cachedTranceform;
}
}
}
だからこれもOK
private Transform cachedTranceform;
public Transform CachedTranceform {
get {
if (cachedTranceform == null) {
cachedTranceform = this.transform;
}
//すべて条件で値を返す。
return cachedTranceform;
}
}
参考 英文サイト
http://blogs.unity3d.com/2014/05/16/custom-operator-should-we-keep-it/private Transform m_CachedTransform public Transform transform { get { if (m_CachedTransform == null) m_CachedTransform = InternalGetTransform(); return m_CachedTransform; } }
1行ifだからこれもOK - | whaison | Unity3d | 13:01 | comments(0) | - | pookmark |
- 2014.10.18 Saturday
- Serato Scratch Live RANE SL4 CDJ Boot Start UP Setting List1234567
-
Serato Scratch Live RANE SL4 CDJ Boot Start UP Setting List1234567
RANE SL4 serato
Scratch Live
0.Hardware fullset setup (but USB to PC is un conect)"Peeeeeeee..." sound
(Aux is just use Recording .basic un use)
1.Scratch Live .app Start
2.USB insert
3.if CDJ played Stop "Cue"Button/Left and Right
left table4.click to select music shift+Leftkey
5."THRU" alert Button push
6.MixFader 10%
7.CDJ "Play"Button Push/Stop "Cue"Button
right table4.shift+Rightkey5."THRU" alert Button push6.MixFader 10%7.CDJ "Play"Button Push /Stop "Cue"Button - | whaison | Serato DJ Scrach Live PCDJ | 15:06 | comments(0) | - | pookmark |
- 2014.10.16 Thursday
- Unity C# 動的 配列 List(T).Sort(CompareByID)の戻り値はint じゃないとだめな件
-
Unity C# 動的 配列 List(T).Sort(CompareByID)の戻り値はint じゃないとだめな件
http://programmers.high-way.info/cs/list-sort.html
この方が説明されてはるけど。
intじゃないとダメとは書いてなくてflootの比較したくてflootしちゃってこまったちゃん
したい比較だけして
戻り値だけintにして
private static int CompareByID (GameObject a, GameObject b)
{
if (a.transform.position.y > b.transform.position.y) {
return 1;
}
if (a.transform.position.y < b.transform.position.y) {
return -1;
}
return 0;
}
spriteSmallYtoLargeYが動的配列(List)だとして。
public List<GameObject> spriteSmallYtoLargeY;
spriteSmallYtoLargeY.Sort (CompareByID);
ってやる。
全ソース
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SlotReelLines : MonoBehaviour
{
public GameObject[] spriteObjects;
public List<GameObject> spriteSmallYtoLargeY;
public List<GameObject> spriteSmallYtoLargeY2;
public float HighestspritY;
public float ReelSpeed;
public bool ReelLoopEnd = false;
// Use this for initialization
void Start ()
{
spriteObjects = GameObject.FindGameObjectsWithTag ("SlotFace");
//Debug.Log ("spriteObjects.Length=" + spriteObjects.Length);
spriteSmallYtoLargeY = new List<GameObject> ();
spriteSmallYtoLargeY2 = new List<GameObject> ();
HighestspritY = 2.49353f;
ReelSpeed = 10.0f;
}
// Update is called once per frame
void Update ()
{
int i = 0;
spriteSmallYtoLargeY.Clear ();
spriteSmallYtoLargeY.Add (spriteObjects [0]);
if (ReelLoopEnd == false) {
ReelSpeed -= 0.025f;
if (ReelSpeed < 1.0f) {
ReelSpeed = 0.9f;
}
//Debug.Log ("ReelSpeed=" + ReelSpeed);
for (i=0; i < spriteObjects.Length; i++) {
//Debug.Log ("---------------i=" + i);
GameObject sp = spriteObjects [i];
//別スクリプトの変数を取得
//(スクリプト名は「SpriteObjectNumber」、変数名は「spObNum」)
int spNum = sp.GetComponent<SpriteObjectNumber> ().spObNum;
if (sp.transform.position.y < -2.0f) {
Debug.Log ("///////RollUp Timing////////HighestspritY=" + HighestspritY);
//sp.transform.position = new Vector3 (sp.transform.position.x, 2.9f, sp.transform.position.z);
sp.transform.position = new Vector3 (sp.transform.position.x, HighestspritY, sp.transform.position.z);
if (ReelSpeed < 1.0f) {
if (spNum == 3) {//be a default position
ReelSpeed = 0.0f;
ReelLoopEnd = true;
}
}
} else {
//sp.transform.position -= new Vector3 (sp.transform.position.x, Time.deltaTime * 10.0f, sp.transform.position.z);
sp.transform.position -= new Vector3 (sp.transform.position.x, (Time.deltaTime * ReelSpeed), sp.transform.position.z);
//Debug.Log ("//////////////////////Move/////sp.transform.position.y=" + sp.transform.position.y);
}
//Debug.Log(spNum+"sp.transform.position.y="+sp.transform.position.y);
///////http://myoujing.wpblog.jp/2014/08/874/
//Debug.Log ("spriteSmallYtoLargeY[" + i + "].transform.position.y=" + spriteSmallYtoLargeY [i].transform.position.y);
//Debug.Log ("sp.transform.position.y=" + sp.transform.position.y);
spriteSmallYtoLargeY.Add (sp);
}
////http://programmers.high-way.info/cs/list-sort.html
///spriteSmallYtoLargeY.Sort ((a, b) => a.transform.position.y - b.transform.position.y );// can't use
/// //http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/
//Debug.Log ("/// Sort////////////////////////////////////");
//spriteObjects.Sort(CompareByID);
spriteSmallYtoLargeY.Sort (CompareByID);
////////////////////////////////
string debugstr = "";
int v = 0;
for (v=0; v < spriteSmallYtoLargeY.Count-1; v++) {
debugstr += "(" + v + ")y=" + spriteSmallYtoLargeY [v].transform.position.y;
}
Debug.Log ("spriteSmallYtoLargeY===" + debugstr);
HighestspritY = spriteSmallYtoLargeY [(spriteSmallYtoLargeY.Count - 1)].transform.position.y;
//Debug.Log ("4==" + spriteSmallYtoLargeY [(spriteSmallYtoLargeY.Count - 1)].transform.position.y);
//Debug.Log ("3==" + spriteSmallYtoLargeY [(spriteSmallYtoLargeY.Count - 2)].transform.position.y);
//HighestspritY=HighestspritY+(HighestspritY-spriteSmallYtoLargeY [spriteSmallYtoLargeY.Count-2].transform.position.y);
float SaY = (HighestspritY - spriteSmallYtoLargeY [(spriteSmallYtoLargeY.Count - 2)].transform.position.y);
Debug.Log ("SaY=" + SaY);
//float SaY2 = 0.9887609f;
//SaY2 = 0.9887609f;
SaY = 0.8f;
HighestspritY = HighestspritY + SaY;
//Debug.Log ("HighestspritY="+HighestspritY);
}//if ReelEnd=true
}
private static int- | whaison | Unity3d | 16:44 | comments(0) | - | pookmark |
- 2014.10.10 Friday
- Kinectの中身といわれるOpenCVをMacOS10.8Mountain lionにインストールしてXCodeで使う方法4
-
基本おさらい
では、Xcodeを起動して、Application->Command Line Tool->Nextを選択します。
productName:
whaisonOpenCV001
organizationName:
whaison
indentfier:
jp.jugem.whaison.OpenCV
Type:C,(C++なんかもある)
などいれてNEXT
ALL >Buildsettings >Target *whaisonOpenCV001
はじめに以下のようにしてBuildsettingsの Header Search Pathsに
/opt/local/includeと設定します。
これでopencvのヘッダーファイルを読み込む際に設定したパスから入力すればよくなります。
次に、ライブラリのパスを設定します。
Build PhasesにあるLink Binary With Librariesに/opt/local/libにある
libopencv_imgproc2.4.2.dylib
libopencv_highgui.2.4.2.dylib
libopencv_core.2.4.2.dylib
を加えます。「+」を押したあとにAdd Otherを選択して検索でファイル名を入力すればすぐにでます。
これで準備完了です。あとは、main.cにプログラムを書いていきます。
//
// main.cpp
// whaisonOpenCV003CPP
//
// Created by whaison on 2014/10/10.
// Copyright (c) 2014年 whaison. All rights reserved.
//
//---------------------------------------------------------
// 概要 : 背景差分をとる
// File Name : tutorial_02.cpp
// Library : OpenCV 1.1
//---------------------------------------------------------
#include <iostream>
#include <opencv/cv.h>
#include <opencv/cxcore.h>
#include <opencv/highgui.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#define WIDTH 640 // キャプチャ画像の横幅
#define HEIGHT 480 // キャプチャ画像の縦幅
int main(int argc, const char * argv[])
{
// insert code here...
std::cout << "Hello, World!¥n";
////////////////////////////////////////////////////////////////////////////
int key; // キー入力用の変数
CvCapture *capture = NULL; // カメラキャプチャ用の構造体
IplImage *frameImage; // キャプチャ画像用IplImage
// 画像を生成する
IplImage *backgroundImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // 背景画像用IplImage
IplImage *grayImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // グレースケール画像用IplImage
IplImage *differenceImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 ); // 差分画像用IplImage
char windowNameCapture[] = "Capture"; // キャプチャした画像を表示するウィンドウの名前
char windowNameDifference[] = "Difference"; // 背景差分結果を表示するウィンドウの名前
// カメラを初期化する
if ( ( capture = cvCreateCameraCapture( 0 ) ) == NULL ) {
// カメラが見つからなかった場合
printf( "カメラが見つかりません¥n" );
return -1;
}
// ウィンドウを生成する
cvNamedWindow( windowNameCapture, CV_WINDOW_AUTOSIZE );
cvNamedWindow( windowNameDifference, CV_WINDOW_AUTOSIZE );
// 初期背景を設定するためにカメラから画像取得
frameImage = cvQueryFrame( capture );
// frameImageをグレースケール化し、背景画像とする
cvCvtColor( frameImage, backgroundImage, CV_BGR2GRAY );
// メインループ
while ( 1 ) {
// captureの入力画像1フレームをframeImageに格納する
frameImage = cvQueryFrame( capture );
// frameImageをグレースケール化したものを、grayImageに格納する
cvCvtColor( frameImage, grayImage, CV_BGR2GRAY );
// grayImageと背景画像との差分をとる
cvAbsDiff( grayImage, backgroundImage, differenceImage );
//if ( differenceImage->origin == 0 ) {
// // 左上が原点の場合
// cvFlip( differenceImage, differenceImage, 0 );
//}
// 画像を表示する
cvShowImage( windowNameCapture, frameImage );
cvShowImage( windowNameDifference, differenceImage );
// キー入力判定
key = cvWaitKey( 10 );
if ( key == 'q' ) {
// 'q'キーが押されたらループを抜ける
break;
} else if ( key == 'b' ) {
// 'b'キーが押されたら、その時点でのキャプチャ画像を背景画像とする
frameImage = cvQueryFrame( capture );
cvCvtColor( frameImage, backgroundImage, CV_BGR2GRAY );
}
}
// キャプチャを解放する
cvReleaseCapture( &capture );
// メモリを解放する
cvReleaseImage( &backgroundImage );
cvReleaseImage( &grayImage );
cvReleaseImage( &differenceImage );
// ウィンドウを破棄する
cvDestroyWindow( windowNameCapture );
cvDestroyWindow( windowNameDifference );
////////////////////////////////////////////////////////////////////////////
return 0;
}
背景差分画像がとれた! - | whaison | OpenCV | 23:22 | comments(0) | - | pookmark |
- 2014.10.10 Friday
- Unity で GameObject の 画像を C# で入れ替えたくて MeshRenderer.material = 01material だった件
-
Unity で GameObject の 画像を C#で入れ替えたくて。
GetComponent(SpriteRenderer).sprite = newSprite;
ここでいうSpriteってのは、Unity2Dで利用する
SpriteRendereの、Spriteの話で。
MissingComponentException: There is no 'SpriteRenderer' attached to the "Plane20" game object, but a script is trying to access it.
You probably need to add a SpriteRenderer to the game object "Plane20". Or your script needs to check if the component is attached before using it.
UnityEngine.SpriteRenderer.set_sprite (UnityEngine.Sprite value) (at C:/BuildAgent/work/d63dfc6385190b60/artifacts/EditorGenerated/SpritesBindings.cs:168)
TextureManager.TextureSticker () (at Assets/TextureManager.cs:58)
TextureManager.Start () (at Assets/TextureManager.cs:10)
MissingComponentExceptionは: 「 Plane20 「ゲームオブジェクトに添付なし' SpriteRenderer 'がありませんが、スクリプトはそれにアクセスしようとしている。 おそらく、ゲームオブジェクト」 Plane20 」にSpriteRendererを追加する必要があります。またはあなたのスクリプトは、コンポーネントがそれを使用する前に、接続されているかどうかを確認する必要があります。 っていわれるから
強引にSpriteRendererコンポーネント追加したら
using UnityEngine; using System.Collections;
[RequireComponent (typeof (SpriteRenderer))]
public class PlaneObjectNumber : MonoBehaviour {
public int plObNum;
// Use this for initialization
void Start () {
transform.gameObject.AddComponent("SpriteRenderer");
}
// Update is called once per frame void Update () {
} }
Can't add component 'SpriteRenderer' to Plane4 because it conflicts with the existing 'MeshFilter' derived component!
UnityEngine.GameObject:AddComponent(String)
それは、既存の「 MeshFilter '由来成分と競合するため、 Plane4にコンポーネント' SpriteRenderer 'を追加できません!
UnityEngine.GameObject : AddComponent (文字列)
ておこられたMeshFilterってなんだとおもって
でもGameObjects調べたら
GameObject
コンポーネント.プロパティ=なんたら
MeshFilter.mesh=plane
MeshRenderer.material=01material
ってなってたからこれでいけた。
using UnityEngine;
using System.Collections;
public class TextureManager : MonoBehaviour
{
float timer=0;
public int waitingTime=0;
bool firstTime=true;
//定数定義
const string BASE_TEXTURE = "Materials";
void Start () {
}
void Update(){
timer += Time.deltaTime;
if(timer > waitingTime){
//Action
if(firstTime==true){
firstTime=false;
TextureSticker();
}
timer = 0;
}
}
public void TextureSticker() {
//テクスチャを貼りたいゲームオブジェクトの配列生成(タグ名は「SlotPlaneObject」)
GameObject[] slotPlaneObject = GameObject.FindGameObjectsWithTag("SlotPlaneObject");
Debug.Log("slotPlaneObject.Length="+slotPlaneObject.Length);
//スプライト画像の配列生成(テクスチャ画像の読み込み)
//LoadAllを使うときはAssets フォルダ/Resources/Materialに必要なマテリアルだけいれて"Materials"を指定する
Material[] materias = Resources.LoadAll<Material>(BASE_TEXTURE);
Debug.Log ("materias.Length=" + materias.Length);
//string str = sprites.ToString();
//Debug.Log(str);
//var go = new GameObject.CreatePrimitive(PrimitiveType.Cube);
//Object[] textures= Resources.LoadAll("Textures");
//Debug.Log ("textures.Length=" + textures.Length);
//Texture2D texture = textures[Random.Range(0, textures.Length)];
//go.renderer.material.mainTexture = texture;
//foreach (GameObject sp in slotPlaneObject) {
int i=0;
int a=0;
for(i=0; i < slotPlaneObject.Length; i++){
//a=a+1;
//Debug.Log("a:"+a);
//Debug.Log("i:"+i);
//Debug.Log("i="+i);
GameObject sp =slotPlaneObject[i];
//ゲームオブジェクトのスプライトレンダラ設定を取得
//sp[] scripts = FindObjectsOfType(sp) as sp[];
//Debug.Log("Found " + scripts.Length + " objects with DepthSorter script");
//foreach (DepthSorter script in scripts){
// Debug.Log(script.gameObject.name);
//}
MeshRenderer meshRenderer = sp.GetComponent<MeshRenderer>();
//別スクリプトの変数を取得
//(スクリプト名は「SpriteObjectNumber」、変数名は「spObNum」)
int textureUniqueNumber = sp.GetComponent<PlaneObjectNumber>().plObNum;
////////////////////////////////////////
///
///
//spObRender.material=materias[0];
//spObRender.material = materias[0];
if(i==10 ||i==20){
meshRenderer.material = materias[3+1];
}else{
meshRenderer.material = materias[Random.Range(0, materias.Length)];
}
//switch文で、textureUniqueNumber の数字によって処理(貼るテクスチャ)を変える
switch(textureUniqueNumber)
{
case 1:
//meshRenderer.material = sprites[0];
break;
/*
case 2:
meshRenderer.material = materials[1];
break;
case 3:
meshRenderer.material = materials[2];
break;
case 4:
meshRenderer.material = materials[3];
break;
case 5:
meshRenderer.material = materials[4];
break;
case 6:
meshRenderer.material = materials[5];
break;
case 7:
meshRenderer.material = materials[6];
break;
case 8:
meshRenderer.material = materials[7];
break;
case 9:
meshRenderer.material = materials[8];
break;
case 10:
meshRenderer.material = materials[9];
break;
case 11:
meshRenderer.material = materials[0];
break;
case 12:
meshRenderer.material = materials[1];
break;
case 13:
meshRenderer.material = materials[2];
break;
case 14:
meshRenderer.material = materials[3];
break;
case 15:
meshRenderer.material = materials[4];
break;
case 16:
meshRenderer.material = materials[5];
break;
case 17:
meshRenderer.material = materials[6];
break;
case 18:
meshRenderer.material = materials[7];
break;
case 19:
meshRenderer.material = materials[8];
break;
case 20:
meshRenderer.material = materials[9];
break;
*/
//default :
//spObRender.sprite = sprites[0];
// break;
}
}
}
}
- | whaison | Unity3d | 16:07 | comments(0) | - | pookmark |
- 2014.10.10 Friday
- Unity GameObject自体にAddChild的なものがあるだろうと思ったけどchildGameObject.transform.parent = parentGameObject.transform;だった件
-
MonoScript - だらだら〜家内安全〜さん
http://d.hatena.ne.jp/nyakagawan/touch/20100606/1275825238
より
抜粋
GameObjectの階層化(ランタイム)
GameObject自体にAddChild的なものがあるだろうと思ったけど無い。…わかった!GameObjectの名前を"parentGameObjectName/childGameObjectName"ってスラッシュで区切ればおkだ、と思ったけど違う。
正解は
childGameObject.transform.parent = parentGameObject.transform;
GameObject自体にAddChild的なものがあるだろうと思ったけどchildGameObject.transform.parent = parentGameObject.transform;だった - | whaison | Unity3d | 09:49 | comments(0) | - | pookmark |