質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • C#

    9031questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C#Unity Paritcle Systemを使ったらPlayerが消える。

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 208

syuteru64

score 5

現在Unity5.4.1で3Dのゲームを作っています。
今回の質問内容ですがユニティちゃんからBボタンが押されたら弾幕を表示し、それ以外は弾幕を非表示するというスクリプトを作成しています。
しかし、ゲームを起動するとユニティちゃんから初期状態で弾幕が出てきて、終了するとユニティちゃん(というよりPlayerオブジェクト)が消えてしまいます。```C# 弾幕の処理 using UnityEngine; using System.Collections;

public class ShockwaveMove : MonoBehaviour {     public GameObject effect;     //飛んでいく方向     private Vector3 direction;     //飛ばす力     [SerializeField]     private float power;     //Rigidbody     private Rigidbody rigid;//パーティクルシステム

    private ParticleSystem particle;

    // Use this for initialization     void Start ()     {         rigid = GetComponent<Rigidbody>();         //自身の子要素からParticleSystemを取得         particle = GetComponentInChildren<ParticleSystem>();     }

    // Update is called once per frame     void Update ()     {         //パーティクルの再生が終わったら衝撃波を消す         if (!particle.isPlaying)         {             Destroy(this.gameObject);         }     }     //衝撃波の飛んでいく方向を設定     public void SetDirection(Vector3 direction)     {         this.direction = direction;     }     //衝撃波に力を加えて飛ばす     void FixedUpdate()     {         rigid.AddForce(direction * power);     }     void OnTriggerEnter(Collider col)     {         //壁か敵にあたった場合         if (col.tag == "Block" || col.tag == "Enemy")         {             if (col.tag == "Enemy")             {                 Destroy(effect, 0.5f);             }             Destroy(effect, 0.5f);         }     } }

```C#
弾幕の生成
using UnityEngine;
using System.Collections;

public class ShockwaveTest : MonoBehaviour
{
    [SerializeField]
    private GameObject shockwave;
    // Use this for initialization
    void Start ()
    {

    }

    // Update is called once per frame
    void Update ()
    {
        if (Input.GetKeyDown(KeyCode.B))
        {
            Debug.Log("00000");
            // 衝撃波プレハブをインスタンス化
            var obj = Instantiate(shockwave, transform.position + transform.forward, Quaternion.identity) as GameObject;
            // 衝撃波の飛んでいく方向を指定
            obj.GetComponent<ShockwaveMove>().SetDirection(transform.forward);
        }
    }
}
プレイヤーの処理


using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Player : MonoBehaviour
{
//プレイヤーの移動スピード
public float moveSpeed = 5f;
//プレイヤーの回転速度
public float rotationSpeed = 360f;

//CharacterControllerをcharacterControllerで宣言
CharacterController characterController;

//Animatorをanimatorで宣言
Animator animator;

public GameObject effectPrefab;
public GameObject Dot;
public int PlayerHP;
private Slider slider;
public float Dot1 = 0f;
public float Dot2 = 0f;

// Use this for initialization
void Start ()
{
//characterControllerという型にCharacterControllerの値をコピーしている。
characterController = GetComponent<CharacterController>();
animator = GetComponentInChildren<Animator>();
/*        slider = GameObject.Find("PlayerHPAlider").GetComponent<Slider>();
slider.maxValue = PlayerHP;
slider.value = PlayerHP;*/
}

// Update is called once per frame
void Update()
{
//animatorのanimという型で作成
Animator anim = GetComponent<Animator>();

//Vector3に新しくVector3を作りGetAxis(X軸にHorizontal、Y軸に0、Z軸にVerticalを代入)

Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
//ベクトルが0.01F以上なら
if (direction.sqrMagnitude > 0.01f)
{
//Vector3のforwardにVector3.Slerp(ゲームオブジェクトが向いている方向、方角、キャラクターのスピード×今フレームと全フレーム÷二つの方向の差分)
Vector3 forward = Vector3.Slerp(transform.forward, direction, rotationSpeed * Time.deltaTime / Vector3.Angle(transform.forward, direction));

//描画
transform.LookAt(transform.position + forward);
}

//characterController内のMoveに(direction * moveSpeed * Time.deltaTime)を代入
characterController.Move(direction * moveSpeed * Time.deltaTime);
//アニメーション処理
}
}
となります。
Paritcle Systemの設定はこうなっています。
イメージ説明イメージ説明
ご回答よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • y_waiwai

    2018/08/01 22:37

    ソースコードがぐちゃぐちゃです。編集ボタン、<code>ボタンを押して、'''の枠の中にコードをコピーしてください

    キャンセル

まだ回答がついていません

同じタグがついた質問を見る

  • C#

    9031questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。