重要なお知らせ:誠に勝手ながら当サイト(unityroom質問掲示板)は2021年10月31日をもちまして閉鎖させていただきます。ご利用誠にありがとうございました。

unityroom.com については引き続きご利用いただけます。

0 支持
119 閲覧
現在Unity2018にてrayのターゲット照射により、爆発をおこし、爆発後にターゲットを別の場所に移動させるというシーンを作成しております。

シーン作成の中で、cubeをターゲットにした場合、照射が成功したらcubeが爆発し、ランダムで移動させるようにしているのですが、なぜかその場に判定がない残像が残り、ランダム移動した場所には透明だが判定はあるという状態になってしまっています。

このような場合どのような対処法が取れるでしょうか。

また、ターゲットをstandard assetsのEthanにしたところ、なぜか照射そのものを透過するようになったりします。

負荷がかかる場合はこのような挙動になってしまうのでしょうか。こちらもご存知でしたら、どのような対策をされているかご教示いただければ幸いです。

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class KillTarget : MonoBehaviour

{

    public GameObject target;

    public ParticleSystem hitEffect;

    public GameObject killEffect;

    public float timeToselect = 3.f;

    public int score;

    private ParticleSystem.EmissionModule hitEffectEmission;

    private float countDown;

    void Start()

    {

        score = 0;

        countDown = timeToselect;

        hitEffectEmission = hitEffect.emission;

        hitEffectEmission.enabled = false;

    }

    void Update()

    {

        //Transform camera = Camera.main.transform;

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        //Ray ray = new Ray(camera.position, camera.rotation * Vector3.forward);

        float maxDistance = 10;

        Debug.DrawRay(ray.origin, ray.direction * maxDistance, Color.green, 5, false);

        RaycastHit hit;

        if (Physics.Raycast(ray, out hit) && hit.collider.gameObject == target)

        {

            if (countDown > 0.f)

            {

                countDown -= Time.deltaTime;

                hitEffect.transform.position = hit.point;

                hitEffectEmission.enabled = true;

                Debug.Log(countDown);

                Debug.Log(hit.collider.gameObject.name);

            }

            else

            {

                Instantiate(killEffect, target.transform.position, target.transform.rotation);

                score += 1;

                countDown = timeToselect;

                SetRandomPosition();

                Debug.Log(hit.collider.gameObject.name);

            }

        }

        else

        {

            hitEffectEmission.enabled = false;

            countDown = timeToselect;

            Debug.Log(hit.collider.gameObject.name);

        }

    }

    void SetRandomPosition()

    {

        //float x = Random.Range(-5.f, 5.f);

        //float z = Random.Range(-5.f, 5.f);

        target.transform.position = new Vector3(0.f, 0.f, 0.f);

    }

}
初心者 (120 ポイント) | 119 閲覧

ログインまたはユーザー登録してから回答してください。

関連する質問

+1 支持
1 回答
駆け出し者 初心者 (130 ポイント) 2020 10/3 質問 | 831 閲覧
0 支持
1 回答
tensaku 初心者 (440 ポイント) 2020 8/30 質問 | 333 閲覧
0 支持
1 回答
2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

180 質問

161 回答

165 コメント

221 ユーザー