Я работаю над 3D-игрой в боковой прокрутке в Unity, где я хочу отбрасывать лучи из пятнистого света, чтобы обнаружить препятствия, за которыми я хочу генерировать платформу теневой (аналогично проекции: первый свет).
Тем не менее. /> Иметь правильные коробки Colderers < /p>
прямо перед светом < /p>
Версия Unity: [Заполните свою версию] < /p>
Опубликания: GameObjects с boxcollider, layer: "Obstacle", tag: "shadowsurface" Physics.raycast (Lightpos, Dir, Out Hit, MaxDistance, Abstaclemask) < /p>
Маска слоя препятствий: (1
Все Raycasts Miss, даже если они могут видеть, что они находятся непосредственно на Abstacles < /p> puder < /p> puder < /p> obstacles < /p> obstacles. и Meshrenderer < /p>
препятствие не является триггером < /p>
препятствие в пределах maxdistance < /p>
debug.drawray () показывает, что он визуально пересекает объект < /p>
provice and raycast. Рейкалы не попадают в препятствие, и как я могу это исправить. < /p>
Code snippet
Ray ray = new Ray(transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit hit, maxDistance, obstacleLayer))
{
Debug.Log("Hit: " + hit.collider.name);
}
else
{
Debug.Log("No hit");
}
< /code>
using UnityEngine;
using System.Collections.Generic;
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer), typeof(MeshCollider))]
public class ShadowPlatformGenerator : MonoBehaviour
{
[Header("Settings")]
public float radius = 5f;
public int rayCount = 90;
public LayerMask obstacleMask;
public Transform lightSource;
private Mesh mesh;
private MeshFilter meshFilter;
private MeshCollider meshCollider;
void Awake()
{
meshFilter = GetComponent();
meshCollider = GetComponent();
mesh = new Mesh();
mesh.name = "ShadowPlatformMesh";
meshFilter.mesh = mesh;
}
void Start()
{
GenerateMesh();
}
void GenerateMesh()
{
if (lightSource == null) return;
Light spot = lightSource.GetComponent();
if (spot == null || spot.type != LightType.Spot)
{
Debug.LogError("Spot Light Specify");
return;
}
Vector3 origin = lightSource.position;
Vector3 forward = lightSource.forward;
float angleRange = spot.spotAngle;
float angleStart = -angleRange / 2f;
float angleStep = angleRange / rayCount;
List vertices = new List();
List triangles = new List();
Vector3 localOrigin = transform.InverseTransformPoint(origin);
vertices.Add(localOrigin);
for (int i = 0; i
using UnityEngine;
using System.Collections.Generic;
[RequireComponent(typeof(MeshFilter), typeof(MeshCollider))]
public class ShadowMaskBoolean : MonoBehaviour
{
public Light playerSpotLight;
public LayerMask obstacleMask;
public ShadowPlatformGenerator platformGenerator; // Reference to platform generator
public float radius = 3f;
public int segments = 20;
private Mesh platformMesh;
private MeshCollider platformCollider;
void Start()
{
platformMesh = platformGenerator.GetComponent().mesh;
platformCollider = platformGenerator.GetComponent();
UpdatePlatformMask();
}
void UpdatePlatformMask()
{
Vector3 origin = playerSpotLight.transform.position;
List originalVertices = new List(platformMesh.vertices);
List originalTriangles = new List(platformMesh.triangles);
HashSet validVertices = new HashSet { 0 };
float angleStep = 180f / segments;
for (int i = 0; i
Извините, мой родной язык не английский, и, насколько я знаю, я могу использовать только этот метод, чтобы помочь мне достичь своей цели, поэтому я могу использовать только CHATGPT, чтобы помочь мне задать вопросы. Если есть что -то, что я пропустил или не объяснил, пожалуйста, дайте мне знать, чтобы я мог добавить это. Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/796 ... e-scroller
Unity Raycast из Spotlight не может обнаружить препятствие в 3D-боковой прокрутке ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение