「Unityで個人開発をしたい人のための 3Dゲーム試作ワークショップ -トライコア勉強会- #3」の講義内容のまとめ
ショットの生成までの内容の要点抜粋になります。
※ 暫定的な記載な為、後日補足します
ゲームオブジェクトのInstantinate
弾の作成
弾のゲームオブジェクトを作成
GameObject > 3D Object > Sphere
名称: PlayerShot
Scale 0.2
rigidbody を追加
プレハブ化
スクリプトの作成
弾を打ち出すスクリプトを作成
名称: Shooter
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Shooter : MonoBehaviour { // Unity側で設定する、ショットとしてコピーするためのプレハブ(設計図) public GameObject shot; // Unity側で設定する、ショットを生み出す場所を見るための空のオブジェクト public GameObject shotPoint; // Update is called once per frame void Update () { // スペースキーが押されたとき if(Input.GetKeyDown(KeyCode.F)) { // ゲームオブジェクト(ショットの設計図のコピー)を生み出す! GameObject newShot = GameObject.Instantiate(shot); // 生み出したゲームオブジェクトのポジションをshotPointと同じに. newShot.transform.position = shotPoint.transform.position; // 生み出したゲームオブジェクトの向いている方向を自分と同じに newShot.transform.rotation = gameObject.transform.rotation; } } }
Player に Shooter コンポーネントを追加
Instanciate の shot に PlayerShot のプレハブを設定
弾を生成する場所を決める
空のオブジェクトを作成
ShotPoint と名前を付ける
Player の下層に配置
空のオブジェクトは[Scene]のどこにあるか見えないので
[Inspector] オブジェクト名称のチェックボックスの左にあるアイコンをクリックして、Select Icon から好きなものを選択して表示させる
ショットの発射
弾が進むようにスクリプトを作成
名称: PlayerShot
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerShot : MonoBehaviour { // 弾のスピード public float speed = 1.0f; // 弾が持っているRigidBody public Rigidbody rigid; // Update is called once per frame void Update () { // 物理で自分自身が進む力を、 // 自分が向いている方向にspeed分だけ進むように強制書き換え rigid.velocity = transform.forward * speed; } }
重力で変に動くことがあるので、動いて欲しくない挙動を制限する
[Inspector] Rigidbody > Constraints
Freeze Posion と Freez Rotation
動いて欲しくないXYZにチェックを入れる
落ちる球の当たり判定
PlayerShot のスクリプトに以下を追加
// コライダーが当たったことを検知したとき private void OnCollisionEnter(Collision collision) { Debug.Log("コライダーがあたったよ!"); //// 何かに当たったら自分を消す //GameObject.Destroy(gameObject); //// 何かに当たったら当たったやつを消す //GameObject.Destroy(collision.gameObject); }
Shere Collider > Radius
の値を変更することで当たり判定の範囲を変えることが可能
ショットと敵の当たり判定
Shere Collider >Is Trigger にチェックを入れる
物理的な判定ではなくなる
PlayerShot のスクリプトで判定できる
// トリガーが当たったことを検知する private void OnTriggerEnter(Collider other) { Debug.Log("トリガーがあたったよ!"); // 何かに当たったら自分を消す GameObject.Destroy(gameObject); }
Edit > Project Settings > Physics
[Inspector] Layer Collision Matrix
チェックが入っているものは衝突する
Tags や Layers は
Edit > Project Settings > Tags and Layers
から新規追加が可能