演算子

Posted コメントするカテゴリー: C

基本的な演算子

+  足す
-  引く
*  かける
/  割る
%  剰余
=  代入

例として、次のようなプログラムを作成し、実行。

#include <stdio.h>
int main(){
	printf("5+3=%d\n", 5 + 3);
	printf("5-3=%d\n", 5 - 3);
	printf("5*3=%d\n", 5 * 3);
	printf("5/3=%d\n", 5 / 3);
}

代入演算子

+=  足した値を代入
-=  引いた値を代入
*=  かけた値を代入
/=  割った値を代入
%=  余りを代入

例として、次のようなプログラムを作成し、実行。

#include <stdio.h>
int main(){
	int a = 45;
	a += 30;
	printf("45に30を足した値は%d\n", a);
	a -= 30;
	printf("45から30を引いた値は%d\n", a);
	a *= 30;
	printf("45に30をかけ合わせた値は%d\n", a);
	a /= 30;
	printf("45を30を割った値は%d\n", a);
	a %= 30;
	printf("45を30を割ったあまりは%d\n", a);
}

プログラム内の日本語の取り扱い

Posted コメントするカテゴリー: C

コンピュータ内で文字を取り扱う時には、ASCIIコードとして処理される。
ASCIIコードとは、英数字などを0~127の番号に対応させて管理している。

 

たとえば、「A」は65、「B」は66、「1」は49、「2」は50、などのように。

 

アルファベットと数字、記号を合わせても100種類程度なので、7ビットで表現される。
日本語は種類が多いので、シフトJISというコードを使う。
半角文字を表すのに1バイト、全角文字で2バイト、を表す。

 

1バイトは256種類の情報を表す。
2バイトは65536種類の情報を表す。

 

メール等に使われる日本語コードはJISコードと呼ぶ。
JISコードは1バイトのうちに7ビットを使い、はじめにシフトイン、終わりにシフトアウトという特殊なコードを用いて他のコードと区別している。

 

 

特殊文字について

Posted コメントするカテゴリー: C

「¥」マーク(半角)ではじまる文字列は特殊な動作を行う文字として使う。
「¥」マークで始まる2文字のことをエスケープシーケンスと呼ぶ。

コード    エスケープシーケンス    動き
0         \0                      null文字(NULL)
8         \b                      バックスペース(BS)
9         \t                      タブ(TAB)
10        \n                      改行(LF)
13        \r                      復帰(CR)

「¥」マーク自身を表す時には、「¥」を2個書く。

「’」シングルクォートを現すときにも「¥’」と書く。
「”」ダブルクォートを現すときにも「¥”」と書く。

printfについて

Posted コメントするカテゴリー: C

printf関数の書式を勉強します。

printf("%4d\n", 11);
printf("%04d\n", 11);

それぞれ結果は「 11」と「0011」になります。
%4dの4は桁数を表し、04dはゼロ埋めをすることを表します。

実数を表す%fは小数点前後の桁数を表す。

printf("%6.1f\n", 123.45);

上記は「123.5」と出力される

文字を表す。

char name[] = "test!!";
printf("%6s\n", name);

文字列

Posted コメントするカテゴリー: C

文字列とは、文字型の文字が集まったもの。
記述方法は以下のようになる。

char a[6];

文字列を初期化し、同時に代入する

char a[6] = "world!";

[]は1バイトを格納する文字数にあたる。
省略すると、自動的に文字数を決定する。

char a[] = "world!";

文字列に変数を代入する

#include <string.h>
char t[10];
strcpy_s(t, "world!!!!");

実際にvisual studio express2013の環境では「strcpy」を「strcpy_s」と書かないとwarning「error C4996: ‘strcpy’: This function or variable may be unsafe」が出てしまったので、コンパイルができなかった。
これは古い関数は使わずに、新しいstrcpy_s関数を使えという意味でした。(_sはセキュアな関数という意味も)

文字型

Posted コメントするカテゴリー: C

文字列について勉強します。

C言語での「文字」は半角で1文字を指し、この文字を格納する変数の型はcharになる。

charは「-128~127」までの整数が入る。

C言語は文字と文字コードを同等とみなす。

char a = 'A';

printf("%d\n", a); //文字コードとして表示される
printf("%c\n", a); //文字として表示される

//複数の文字はchar a には代入できない。
//原則的に代入できるのは1バイトのデータのみ。

ちなみに、char a = ‘A’;と宣言する時はシングルクォートにしないとエラーになりました。

数値型

Posted コメントするカテゴリー: C

ここでは整数型と実数型を勉強します。

前の記事「printf()の使い方」にも書きましたが、整数型と実数型は取り扱う数値が異なってきます。

%d は整数を10進数で表し、「-2 -1 0 1 2 ・・・」
%fは実数を表し、「プラス」「マイナス」「整数」「分数」「小数」「有理数」「ルート」「π」等の無理数

さらに詳しく整数型について掘り下げてみると整数型には次の種類のものがあります。

型名                入る値                              ビット数
int                 システムによる                      
unsigned int        システムによる                      
long                -2147483648 ~ 2147483647           32
unsigned long       0           ~ 4294967295           32
short               -32768      ~ 32767                16
unsigned short      0           ~ 65535                16
char                -128        ~ 127                  8
unsigned char       0           ~ 256                  8

unsigned とは符号がないという意味になります。

実数型は以下になります。

型名               入る値                               ビット数
float              -3.4x(10の38乗)  ~ 3.4(10の38乗)    32
unsigned int       -1.7x(10の308乗) ~ 3.4(10の308乗)   64

変数

Posted コメントするカテゴリー: C

基本中の基本。変数です。
変数は値を格納するひとつの箱のようなものです。

変数を使ってみます。

まずは変数の宣言をして、その後に代入をして使います。

int a;
int b;
a=2;
b=3;

宣言の書き方は1列に並べてまとめることもできます。

a = 2; b = 3;
int a, b;
int a=2; b=3;

のように。

printf()の使い方

Posted コメントするカテゴリー: C

printf関数について、勉強します。

hello worldを出力した時は、

printf("hello world");

とそのまま記述しましたが、printf関数については、書式を設定することもできます。

具体的には次のとおり。

printf("%d", 3);

前半の「%d」が書式になり、「3」がデータになります。

この場合出力結果は「3」になる。

 

%dの部分は書式といい、表示するデータによって使い分ける必要がある。

 

%d は整数を10進数で表し、「-2 -1 0 1 2 ・・・」

%fは実数を表し、「プラス」「マイナス」「整数」「分数」「小数」「有理数」「ルート」「π」等の無理数

%c文字

%s文字列

 

 

HelloWorld

Posted コメントするカテゴリー: C

どの言語を勉強する時にでも必ずでてくる存在。

Visual Stidio Express 2013上でHelloWorldを出力させてみました。
新規プロジェクトでWin32コンソールアプリケーションを選択し、ウィザードを完了。

初期状態でソースコードが自動生成されてしまうので、それを一旦全削除し、下記のコードを打ち込む。

#include

int main()
{
    printf("Hello world !! \n");
}

実行すると、コンソール上にHello worldが表示されます。

最初、参考にしている書籍がmainの前にintがなく、そのまま実行するとコンパイルエラーとなりましたが、エラーメッセージをよく読むとmainの型がどうのこうのと言っていたので、型を書いてやると実行できました。

C言語の学習環境を作る

Posted コメントするカテゴリー: C

C言語の基礎の基礎からはじめる為、間違っている箇所も多いかもしれません。

まずは開発環境を整える為、Microsoft Visual Studio Expressをインストールしました。
C++も書けるようですが、まずはC言語の勉強ということで、c用のソースを書いてコンパイルして動作させて覚えていこうと思います。

まずはVisual Studio Expressをダウンロード
http://www.microsoft.com/ja-jp/dev/express/

開発環境そのものは無料で手に入りますので、URLをたどってダウンロード→インストールまで。

■20140801追記
上記の統合開発環境(IDE)を使って学習をしていましたが、どうやら期間制限があるようでしたので、途中で使えなくなりました。

7月下旬からは↓のツールを使って検証を続けています。
学習用C言語開発環境 Ver 0.0.9.0
(http://9cguide.appspot.com/index.html)

上記のツールを開発していただいた作者様に感謝。

(いずれは、、、)コンパイル環境をいちから導入してセットアップできる方法を調べて把握します。
今はまだ文法を検証するほうに重点を置いています。

unity からサーバへ通信を行い、データを渡す方法

Posted コメントするカテゴリー: unity

unity側では以下のようなコードで値をサーバに送信できます。

■unity側

function Start()
{
	var url = "htt://xxxxxxxxxxxxxx.net/xxx.php";

	var wf : WWWForm = new WWWForm();
	wf.AddField("value_a", "1234");

	var gettext : WWW = new WWW(url, wwwForm);
	yield gettext;
	Debug.Log(gettext.text);
}

■サーバ側(こっちはphpでもperlでもrubyでもなんでもOKです)

<?php
	//unityから送信されてきたデータをテキストに書き出す
	$value = $_POST['value_a'];
	
	//あとはここで$value を好きなようにする

?>

シーンを切り替える方法

Posted コメントするカテゴリー: unity
Application.LoadLevel(シーン名);

もしくは

Application.LoadLevel(シーンインデックス番号);

と記述する。
ここでいうシーンインデックス番号は、ビルド設定時のダイアログに一覧表示される番号です。

今表示しているシーン名を取得したい場合には

Application.loadedLevelName

という記述をすると取得できます。

unity 2重起動する方法

Posted コメントするカテゴリー: unity

unityを一度起動してから、もう一度起動しようとすると次のようなエラーがでます。

001

それを回避する為には、Altを押しながらunityを実行すると回避できます。
(添付画像はの黒い部分には開こうとしたファイルまでのフルパスが書かれています)

一定の速度でキャラクタ(オブジェクト)を動かす場合

Posted コメントするカテゴリー: unity

・一定速度で移動する

this.transform.Translate(X軸移動量 * Time.deltaTime, Y軸移動量 * Time.deltaTime, Z軸移動量 * Time.deltaTime);

・一定速度で回転する

this.transform.Rotate(X軸回転量 * Time.deltaTime, Y軸回転量 * Time.deltaTime, Z軸回転量 * Time.deltaTime);

このやり方だと、物体は単純にx,y,zの方向に移動するだけなので、
人が歩くとか、動物が歩くとかのキャラクターの移動には使えないことが判明しました。

キャラクタを歩かせる(走らせる)にはキャラクターそのものに組み込んでいる
移動命令を発行しないとダメなようです。

キャラクター(オブジェクト)を動かす方法

Posted コメントするカテゴリー: unity

Inspectorの値を直接操作しても良いですが、もっと簡単にアニメーションさせる為の命令があります。

・移動

this.transform.Translate(「X軸方向」,「Y軸方向」,「Z軸方向」);

・回転

this.transform.Rotate(「X軸方向」,「Y軸方向」,「Z軸方向」);

上記の方法で、キャラクターを動かすことが可能です。

位置・サイズ・角度を取得・設定する

Posted コメントするカテゴリー: unity

ゲームオブジェクトには、世界全体に対する自分の位置と、自分と親子関係にあるオブジェクトとの位置があります
これらは、現在の値を取得することも,値を変更することも可能です

・ワールド位置

this.transform.position.x
this.transform.position.y
this.transform.position.z

・ワールド角度

this.transform.eulerAngles.x
this.transform.eulerAngles.y
this.transform.eulerAngles.z

・ワールドサイズ

this.transform.lossyScale.x
this.transform.lossyScale.y
this.transform.lossyScale.z

・ローカル位置

this.transform.localPosition.x
this.transform.localPosition.y
this.transform.localPosition.z

・ローカル角度

this.transform.localEulerAngles.x
this.transform.localEulerAngles.y
this.transform.localEulerAngles.z

・ローカルサイズ

this.transform.localScale.x
this.transform.localScale.y
this.transform.localScale.z

ゲームオブジェクトを検索するには

Posted コメントするカテゴリー: unity

スクリプトを Inspectorに設定した場合、自分自身は「this」です(記述を省略する場合がほとんどです)

他のゲームオブジェクトは,探す必要があります

・オブジェクト名で探す方法

var obj1 : GameObject = GameObject.Find("「Hierarchyに表示されている名称」");

・タグで探す方法

var obj1 : GameObject = GameObject.FindWithTag("「InspectorのTagに表示されている名称」");

thisの代わりに,この「obj1」変数を使います。

機能が決まった関数

Posted コメントするカテゴリー: unity

なにやらandroidとかの開発で使うメソッドみたいですが、unityで
標準的に使うメソッドです。

function Start(){
	//最初に一度だけ呼び出される
}

function Update(){
	//描画時に処理される
}

function OnCollisionEnter(col : Collision){
	//衝突判定用の処理をする
	if(col.gameObject.name == "「ゲームオブジェクト名」"){
		//それと衝突した。とか。
	}
}

使い方、書き方は色々あると思うので、まだまだこれから研究していきます。

Quaternion とは

Posted コメントするカテゴリー: unity

クオータニオンは4×4の行列のことです。
例として、回転を行う際に使用するようです

・x軸を中心に回転

this.transform.rotation = Quaternion.AngleAxis(「角度」, Vector3.right);

・y軸を中心に回転

this.transform.rotation = Quaternion.AngleAxis(「角度」, Vector3.up);

・z軸を中心に回転

this.transform.rotation = Quaternion.AngleAxis(「角度」, Vector3.forward);

後ほど実験した結果をここに書き足します。

Vector3 とは…

Posted コメントするカテゴリー: unity

unityでプログラムをしていると、必ず出てくるのがvectorというモノです。
これはなにを表しているのかというと、x座標、y座標、z座標の情報を
ひとまとめにしたものとのことです。

たとえば、以下のように書きます。

var a : Vector3 = Vector(X座標, Y座標, Z座標);

例) Vector3を使ってゲームオブジェクトに座標を設定する

var a : Vector3 = Vector3(0, 0, 0);
this.transform.position = a;

例) 現在位置をVector3に代入する

var a : Vector3 = this.transform.position;

のように使います。

unityでのjavascriptで、注意するメソッド

Posted コメントするカテゴリー: unity

プログラム上の微妙な違いがあるメソッドは次のとおり。(後日調整)

■初期化系

 Awake()
 Start()

■アップデート系

 Update()
 FixedUpdate()
 LateUpdate()

■Awake()とStart()の違い
Awake()はゲーム開始前に呼ばれもの。主に初期化に使うのが妥当です。
どのオブジェクトのAwake()から順番に呼ばれるかはランダム、
どのオブジェクトのStart()よりも前に呼び出される。
Awake()から他のオブジェクトの状態を参照するような処理はしない方がよい。
そうした処理はStart()に任せるべき。

■LateUpdate()の特徴
全てのオブジェクトのUpdate()が呼び出された後に呼び出される。
LateUpdate()は例えば、追跡カメラの処理と相性が良い。
Update()で全てのオブジェクトの移動処理が終わった後で、追跡カメラの座標を決められるから。

■Update()とFixedUpdate?()の違い
Update()は毎フレーム呼び出されるが、FixedUpdate()は指定されたフレーム毎に呼び出される。
この特性から、FixedUpdate()は特にRigidbody(剛体)に対する処理、新しく力を加えるなどに向いている。

windows7でのunityでandroidへの書き出しがエラーになる件

Posted コメントするカテゴリー: unity

先日unityからandroid端末への書き出しをしようとすると、いきなりエラーが出てきました。

内容は

Error building Player: UnityException?: Unable to find suitable jdk installaion Please make sure you have a suitable jdk installation. Android development requires at least JDK 6 (1.6). The latest JDK can be obtained from the Oracle http://www.oracle.com/technetwork/java/javase/downloads/index.html

というもので、なにやらjdk関係が悪いとのこと。
jdkのバージョンを変えて(ダウングレードして)再インストールしてみると、エラーメッセージは出なくなりました。

jdk依存するとは思えなかったけれど、unityのバージョンと関係あるのだろうか。
まだまだ未知なところがあります。

unityでよく操作するオブジェクト

Posted コメントするカテゴリー: unity

unityでコーディングする際に、よく操作するオブジェクトは下記のものになります。

詳しい使い方がわかってきたら、またここに書こうと思います。

・Vector3
3次元情報を格納するオブジェクト。
x,y,zの値を持つベクトル。位置情報を


・Input
ユーザからの入力を一元管理している。
キーボードからの入力、タッチイベント、端末の傾き等の情報、等を制御するときに使用する。


・GameObject
ゲーム空間(シーン)の中に存在するものは全てこれ


・Component
GameObjectにアタッチすることで、GameObjectがどう振る舞うか定義できる。


・Transform
Componentの一種。ゲーム内の全てのGameObjectについていて、位置、回転、サイズが格納されている。