code ソーシャル

Unityアプリcodetips(10)

スポンサーリンク

//tips

//Physicsを使わないオブジェクトの落下

落下速度の細かな設定を行いたい場合はPhysicsを使わずスクリプトを使って管理することになる。

public class ItemController :MonoBehavior
{
public float dropSpeed = -0.03f;

void Update()
{
transform.Translate(0, this.dropSpeed, 0);
if(transform.position.y < -1.0f)
{
Destroy(gameObject);
}
}
}
transformで移動させる方法としては、transform.Translateとtransform.positionがあり、違いとしては、
transform.Translate:現在のオブジェクト位置を基準にして移動したいときに使用

void Update () {

if (Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(0f, 0f, 0.1f);
}
if (Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(0f, 0f, -0.1f);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(-0.1f, 0f, 0f);
}
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(0.1f, 0f, 0f);
}
キーボタンを押したら移動をさせるときなどにも使用できる。

transform.position:オブジェクトの座標を指定して移動。新しい場所へワープさせる。現在の座標に加算すればtransform.Translateと同じような移動も可能。

transform.position += transform.forward * 1f * Time.deltaTime;
transform.forward はオブジェクトが向いている方向のベクトル、1f * Time.deltaTimeは1 m/s の速さで処理を行う。

ちなみに、他の移動方法としてあるVector3.MoveTowards は、
public static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);
「現在地」から「目的地」まで「一定速度」で移動させてくれる関数である。

オブジェクトの移動については下記参考。

https://squmarigames.com/2018/11/08/unity-beginner-translate/

//すり抜け接触での相手のオブジェクトの破棄

Physicsによる当たり判定を行うには2つの条件が必要で、
・両方のオブジェクトにColliderコンポーネントがアタッチされている
・少なくとも一方にはRigidbodyコンポーネントがアタッチされている
がある。

これにより衝突時にはOnTriggerEnterメソッドが呼び出せるようになるので、バスケットとリンゴを衝突させるとして、バスケットのほうにOnTriggerEnterメソッドを追加する。

Void OnTriggerEnter(Collider other)
{
Destroy(other.gameObject);
}

Destroyするためにはその対象を知らなければならないが、OnTriggerEnterが引数として衝突相手のColliderを返すことを利用して、collider.gameObjectとすることでgameObjectを取得できDestroyできる。

//タグを使用して接触条件を追加する

リンゴタブと爆弾タブを作り、接触条件を分岐させる。
タグはgameObject.tag == “aaa”の形で表されるのでわかりやすい。

void OnTriggerEnter(Collider other)
{
if(other.gameObject.tag == “Apple”)
{
Debug.Log(“Tag=Apple”);
}
else
{
Debug.Log(“Tag=Bomb”);
}
Destroy(other.gameObject);
}

タグの使用方法例を下記に追加する。

public class Example : MonoBehaviour
{
void Start()
{
//Set the tag of this GameObject to Player
gameObject.tag = "Player";
}

private void OnTriggerEnter(Collider other)
{
//Check to see if the tag on the collider is equal to Enemy
if (other.tag == "Enemy")
{
Debug.Log("Triggered by Enemy");
}
}
}
これらの接触分岐にデバッグではなく、音を出すようにすると
public AudioClip appleSE;
public AudioClip bombSE;
AudioSource aud;

と先にAudioClip変数を宣言しておき、

void Start()
{
this.aud=GetComponent<AudioSource>();
}

void onTrigeerEnter(Collider other)
{
if(other.gameObject.tag==“Apple”)
{
this.aud.PlayOneShot(this.appleSE);
}
else
{
this.aud.PlayOneShot(this.bombSE);
}
Destroy(other.gameObject);
}

Tagで鳴らす音を切り替えている。

//1秒間隔で自動生成されるオブジェクトが落ちてくる

復習で秒間隔で自動生成するスクリプトを確認する。

自動生成するためにはprefabから行う必要があるので、
public GameObject applePrefab;
public GameObject bombPrefab;
とおき、生成間隔をspan、計測時間をdeltaとおく。
float span = 1.0f;
float delta = 0;

void Update()
{
this.delta += Time.deltaTime;
if(this.delta > this.span)
{
this.delta = 0;
Instantiate(applePrefab);
}
}
フレームが更新されるごとにTime.deltaTimeでthis.deltaに時間が加算されていき、1秒をすぎた場合にプレファブから実体を生成し、累積時間を0に戻している。

//生成オブジェクトのランダム配置

生成オブジェクトの各座標に対してランダムな値を返したい場合、Random.Range()を使用する必要がある。

そこで先のコードを参考にすると、オブジェクトの中の数値設定も行いたいのでインスタンスを変数化して、加工しやすくしている。

void Update()
{
this.delta += Time.deltaTime;
if(this.delta > this.span)
{
this.delta = 0;
GameObject item = Instantiate(applePrefab) as GameObject;
float x = Random.Range(-1,2);
float z = Random.Range(-1,2);
item.transform.position = new Vector3(x, 4, z);
}
}
Random.Range(-1,2)とは-1<=x<2の範囲のことである。

人気の記事

1

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

4

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-code, ソーシャル
-,

Copyright© BUSINESS HACKER , 2020 All Rights Reserved Powered by AFFINGER5.