Question by
iLLusionlEdition · Aug 25, 2020 at 09:11 AM ·
c#raycastunity 2d
Error, Raycast2D call function in self script on duplicate object.
Всем привет. Месяц назад этот код работал на предыдущей версии юнити. У меня есть два зеркала. В первом функция Mirror вызывается из другого скрипта, другого объекта. Во втором зеркале функция Mirror вызывается из первого зеркала. И появляется куча ошибок. Я новичок в Юнити и в C#, прошу помощи. Заранее всех благодарю.
StackOverflowException
UnityEngine.PhysicsScene2D.Raycast_Internal (UnityEngine.PhysicsScene2D physicsScene, UnityEngine.Vector2 origin, UnityEngine.Vector2 direction, System.Single distance, UnityEngine.ContactFilter2D contactFilter) (at <65cab14ac59e4552b77f98a4aed18f9e>:0)
UnityEngine.PhysicsScene2D.Raycast (UnityEngine.Vector2 origin, UnityEngine.Vector2 direction, System.Single distance, UnityEngine.ContactFilter2D contactFilter) (at <65cab14ac59e4552b77f98a4aed18f9e>:0)
UnityEngine.Physics2D.Raycast (UnityEngine.Vector2 origin, UnityEngine.Vector2 direction, System.Single distance, System.Int32 layerMask) (at <65cab14ac59e4552b77f98a4aed18f9e>:0)
Mirror_BP.Mirror () (at Assets/Scripts/Mirror_BP.cs:20)
Mirror_BP.Mirror () (at Assets/Scripts/Mirror_BP.cs:27)
Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Mirror_BP : MonoBehaviour
{
public Vector2 PointHit;
private Vector2 inNormal;
public Vector2 inDirection;
public Transform NormalPos;
private Vector2 NewVector;
public float distance;
public LayerMask NeedLayer;
private Vector2 LastVector;
public void Mirror()
{
inNormal = NormalPos.position - transform.position;
inNormal = inNormal.normalized;
NewVector = Vector2.Reflect(inDirection, inNormal).normalized;
RaycastHit2D Hit = Physics2D.Raycast(PointHit, NewVector, distance, NeedLayer);
if(Hit.transform != null)
{
Debug.DrawLine(PointHit, Hit.point, Color.red);
LastVector = Hit.point - PointHit;
Hit.transform.gameObject.GetComponent<Mirror_BP>().PointHit = Hit.point;
Hit.transform.gameObject.GetComponent<Mirror_BP>().inDirection = LastVector;
Hit.transform.gameObject.GetComponent<Mirror_BP>().Mirror();
}
Comment