工作の2S(Seiri/Seiton)

工作やプログラムでやったことをまとめていきます

Unityのメモを残しておく 入門編

この記事の目的

自分が後で見返してなんか役に立つであろうことを残していきます.
youtu.be



UnityHUB 起動時にライセンスで怒られる

この手の開発環境はすぐ怒る.ライセンスがどうタラと怒ってきた!
Unityを個別に開いてあげて手動ライセンス更新ファイルを当てなおしてOK


GameManagerが必須

とりあえずこれをCreate Emptyから作る.同時に GameManager.csスクリプトも作成し関連付けする.
スクリプトの関連付けはスクリプトをオブジェクトにドラッグドロップ.忘れやすい.
なお,Publicメンバはエディタから変更できることも忘れやすい.

GameManagerを他から呼び出す

他から呼び出して汎用的な関数(スコア更新とか)を使う.

gameManager = GameObject.Find("GameManager");

移動

現在位置から指定した移動量動く

ベクトル指定なのでわかりやすい

this.transform.Translate(speed, 0.0f, 0.0f);
RigidBodyに速度を与える(非推奨らしい)
rbody.velocity = new Vector2(x, y);
Rididbodyを取得する
rbody = GetComponent<Rigidbody2D>();
入力を扱う -1, 0, 1で取得できる
float spx = 0.0f, spy = 0.0f;       // 自機移動スピード
spx = move_speed * Input.GetAxis("Horizontal");
spy = move_speed * Input.GetAxis("Vertical");

プレハブ

何個も生成するオブジェクトはプレハブにする.
一度Hierarchyで作ったものを再度Projectペインにぶち込むだけ.オリジナルは消しておく.

生成するプレハブをpublicメンバで受け取っておく
public TamaManager tamaPrefab;
プレハブの生成 Instantiate
Vector3 pos = transform.localPosition;  // プレイヤーの位置
Quaternion rot = transform.localRotation;  // プレイヤーの向き

TamaManager shot1 = Instantiate( tamaPrefab, pos - new Vector3(0.1f, 0.2f, 0.0f), rot );
オブジェクトを消す

時間を設定することも可能

Destroy( gameObject );

音を鳴らす

publicメンバを用意してGameManagerのAudioSourceを取得.
Destroyされるプレハブから呼び出すためGameManagerのAudioSourceを使用しているだけ.

public AudioClip seExplosion;
public AudioClip seColi;

private AudioSource audioSource;
private GameObject gameManager;

void Start()
{
    gameManager = GameObject.Find("GameManager");
    audioSource = gameManager.GetComponent<AudioSource>();
}

呼び出し

audioSource.PlayOneShot(seExplosion);

当たり判定

BoxCollider などを設定する.範囲は適度に.
当たり判定を処理する側には Rigidbody 2DIs Triggerもセットする.

private void OnTriggerEnter2D( Collider2D collision )
{
  if (collision.name.Contains("tama"))
  {
    // たまと当たった時の処理
    Destroy.(collision.gameObject); // 当たったオブジェクトを消す
  }
}

tagを使用する方法もある

if(collision.gameObject.tag == "hoge"){}