Files
Dino_Love_Simulation/Assets/SpecialSkillsEffectsPack/Scripts/ForEffects/ObjectMoveDestroy.cs
2026-07-17 18:09:45 +09:00

93 lines
2.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectMoveDestroy : MonoBehaviour
{
public GameObject m_gameObjectMain;
public GameObject m_gameObjectTail;
GameObject m_makedObject;
public Transform m_hitObject;
public float maxLength;
public bool isDestroy;
public float ObjectDestroyTime;
public float TailDestroyTime;
public float HitObjectDestroyTime;
public float maxTime = 1;
public float MoveSpeed = 10;
public bool isCheckHitTag;
public string mtag;
public bool isShieldActive = false;
public bool isHitMake = true;
float time;
bool ishit;
float m_scalefactor;
private void Start()
{
m_scalefactor = VariousEffectsScene.m_gaph_scenesizefactor;//transform.parent.localScale.x;
time = Time.time;
}
void LateUpdate()
{
transform.Translate(Vector3.forward * Time.deltaTime * MoveSpeed * m_scalefactor);
if (!ishit)
{
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.forward, out hit, maxLength))
HitObj(hit);
}
if (isDestroy)
{
if (Time.time > time + ObjectDestroyTime)
{
MakeHitObject(transform);
Destroy(gameObject);
}
}
}
void MakeHitObject(RaycastHit hit)
{
if (isHitMake == false)
return;
m_makedObject = Instantiate(m_hitObject, hit.point, Quaternion.LookRotation(hit.normal)).gameObject;
m_makedObject.transform.parent = transform.parent;
m_makedObject.transform.localScale = new Vector3(1, 1, 1);
}
void MakeHitObject(Transform point)
{
if (isHitMake == false)
return;
m_makedObject = Instantiate(m_hitObject, point.transform.position, point.rotation).gameObject;
m_makedObject.transform.parent = transform.parent;
m_makedObject.transform.localScale = new Vector3(1, 1, 1);
}
void HitObj(RaycastHit hit)
{
if (isCheckHitTag)
if (hit.transform.tag != mtag)
return;
ishit = true;
if(m_gameObjectTail)
m_gameObjectTail.transform.parent = null;
MakeHitObject(hit);
if (isShieldActive)
{
ShieldActivate m_sc = hit.transform.GetComponent<ShieldActivate>();
if(m_sc)
m_sc.AddHitObject(hit.point);
}
Destroy(this.gameObject);
Destroy(m_gameObjectTail, TailDestroyTime);
Destroy(m_makedObject, HitObjectDestroyTime);
}
}