2014年12月3日水曜日

【Unity】 Running Game 製作中

ランニングゲーム?ランアクションゲーム?ラン&アクションゲーム?ランゲーム?
ランゲーの正しい名称とは一体…参考文献探すのに非常に困る。

というわけでタイトルのとおり、某テンプルランみたいな Running Game (Running Action Gameかも)を作っているわけだが。
せっかくパンダくんができたことだし彼に活躍してもらいたいという想いからこうなったわけだがはたして。


以下最近詰まったこと↓


■オブジェクトAとオブジェクトBを一緒に移動させたい

追従させたい場合。シューティングゲームの子機とかプレイヤーを追うカメラとか。
子したくない場合。いろいろやり方あると思うけどそのうちのひとつ。

追従させるオブジェクトBにスクリプトをアタッチして

transform.position.z = _objectA.transform.position.z;

とかやってみてもなぜか回らない。
左辺float右辺floatで問題ないじゃんと思うけど問題あるらしい。
xyzには直接値を代入できない。正しくは

float posx = transform.position.x;
float posy = transform.position.y;
float posz = _objectA.transform.position.z;
transform.position = new Vector3 (posx, posy , posz) ;

みたいなカンジにしなきゃならない。Vector使えってことらしい。
↑はオブジェクトBのZの値だけ変わります。Z軸に沿って一緒に移動するってことね。


■Error CS0428

あるオブジェクトからゲームコントローラのスピードを参照しようとした時に起きた。エラコ↓

error CS0428: Cannot convert method group `GetComponent' to non-delegate type `GameControllerScript'. Consider using parentheses to invoke the method

書いてたスクリプト(回らない)は↓

public class MoveField : MonoBehaviour {

GameObject _gameController;
GameControllerScript _gameControllerScript;

void Awake()
{
_gameController = GameObject.FindGameObjectWithTag("GameController");
_gameControllerScript = _gameController.GetComponent<GameControllerScript>;

}

// Use this for initialization
void Start ()
{
Debug.Log (_gameControllerScript._gameSpeed);
}
}

これだけ。なぜこんなエラーが…と思って必死で調べたけどGetComponentの後ろの括弧がないだけだった。

GetComponent<GameControllerScript>();

あー、これはひどい。。


■あるオブジェクトから他のオブジェクトにアタッチされてるスクリプトの数値、関数を利用したい

多分出てくるエラーメッセージはこんなんじゃないかな。

NullReferenceException: Object reference not set to an instance of an object
MoveField.Start () (at Assets/Script2/MoveField.cs:19)

参照がうまくいってないんだね。上のコードみたいに参照すればいい。他のオブジェクトを

FindGameObjectWithTag("hogeObj")

で参照してから

hogeObj.GetComponent<hogeScript>()

でそのオブジェクトにアタッチされてるスクリプトを参照。
後はhogeScript.hogeValueでも何でも好きに使える。


■一定時間待ってから実行

Invoke(), InvokeRepeating(), Time.deltaTimeを使ったカウントを用いるなどいろいろやりようはある。
参考にさせて頂いたのは、ゲームは初心者にやさしく様の『必見!Unity初心者が学ぶ「未来事象の正しい文法」』
その上でのメモ。

Time.deltaTimeはUpdate()で使う。Fixedだと多すぎる。
deltaTimeは前フレームとの差分の秒数。





…最近思ったこととか...

大事なのはMonoDevelopの予測にちゃんと出てくること。正しい選択肢として挙がるってことね。
予測に出てこないって事は間違ってるってこと。怒り狂う前に冷静になった方がいい。

物理エンジンいらない場面って意外と多い。ランニングゲームならGravity切ってもなんの問題もないし衝突後の挙動もエンジンに頼ってると相対速度に差があるからオブジェクトすり抜けちゃう。ほんと不便。OnTriggerまわりだけで十分すぎる。

htmlは</br>がうざいなぁ。<tr>とか<td>とかよくわからん。(なきゃ)いかんのか?

0 件のコメント:

コメントを投稿