// Automatically add FastDecalsAtlas but do not require it so atlas can be shared between renderers // By using [RequireComponent (typeof (FastDecalsAtlas))] would always require it on same gameobject public void OnEnable() { FastDecalsAtlasRenderer atlasRenderer = (FastDecalsAtlasRenderer)target; if (atlasRenderer != null) { if (atlasRenderer.atlas == null) { atlasRenderer.atlas = atlasRenderer.GetComponent <FastDecalsAtlas>(); if (atlasRenderer.atlas == null) { atlasRenderer.atlas = atlasRenderer.gameObject.AddComponent <FastDecalsAtlas>(); } } } }
public void SpawnDecal(Vector2 screenPosition) { Ray ray = Camera.main.ScreenPointToRay(screenPosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, 64.0f)) { Transform target = hit.transform; FastDecalsAtlasRenderer atlasRenderer = target.GetComponentInChildren <FastDecalsAtlasRenderer>(); if (atlasRenderer != null && atlasRenderer.atlas != null) { Vector3 worldPos = hit.point + hit.normal * 0.05f; Vector3 localPosition = atlasRenderer.transform.InverseTransformPoint(worldPos); Vector3 localNormal = atlasRenderer.transform.InverseTransformDirection(hit.normal); atlasRenderer.DrawDecal(localPosition, Random.Range(0.1f, 0.5f), Random.Range(0, atlasRenderer.atlas.atlasItems.Length), target.name.Contains("1") ? Color.red : Color.blue, localNormal); } } }
void Awake() { mAtlasRenderer = GetComponent <FastDecalsAtlasRenderer>(); mDecalCount = mAtlasRenderer.atlas.atlasItems.Length; }