diff --git a/Viagg-io/Assets/EzySlice.meta b/Viagg-io/Assets/EzySlice.meta new file mode 100644 index 0000000..e950e22 --- /dev/null +++ b/Viagg-io/Assets/EzySlice.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d5340f9296942549a73ba8ba55b300e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/Framework.meta b/Viagg-io/Assets/EzySlice/Framework.meta new file mode 100644 index 0000000..fcb0ae5 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e74f6db7f705ba4ca4c6bf191c66fd9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/Framework/IntersectionResult.cs b/Viagg-io/Assets/EzySlice/Framework/IntersectionResult.cs new file mode 100644 index 0000000..69505a8 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/IntersectionResult.cs @@ -0,0 +1,150 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace EzySlice { + + /** + * A Basic Structure which contains intersection information + * for Plane->Triangle Intersection Tests + * TO-DO -> This structure can be optimized to hold less data + * via an optional indices array. Could lead for a faster + * intersection test aswell. + */ + public sealed class IntersectionResult { + + // general tag to check if this structure is valid + private bool is_success; + + // our intersection points/triangles + private readonly Triangle[] upper_hull; + private readonly Triangle[] lower_hull; + private readonly Vector3[] intersection_pt; + + // our counters. We use raw arrays for performance reasons + private int upper_hull_count; + private int lower_hull_count; + private int intersection_pt_count; + + public IntersectionResult() { + this.is_success = false; + + this.upper_hull = new Triangle[2]; + this.lower_hull = new Triangle[2]; + this.intersection_pt = new Vector3[2]; + + this.upper_hull_count = 0; + this.lower_hull_count = 0; + this.intersection_pt_count = 0; + } + + public Triangle[] upperHull { + get { return upper_hull; } + } + + public Triangle[] lowerHull { + get { return lower_hull; } + } + + public Vector3[] intersectionPoints { + get { return intersection_pt; } + } + + public int upperHullCount { + get { return upper_hull_count; } + } + + public int lowerHullCount { + get { return lower_hull_count; } + } + + public int intersectionPointCount { + get { return intersection_pt_count; } + } + + public bool isValid { + get { return is_success; } + } + + /** + * Used by the intersector, adds a new triangle to the + * upper hull section + */ + public IntersectionResult AddUpperHull(Triangle tri) { + upper_hull[upper_hull_count++] = tri; + + is_success = true; + + return this; + } + + /** + * Used by the intersector, adds a new triangle to the + * lower gull section + */ + public IntersectionResult AddLowerHull(Triangle tri) { + lower_hull[lower_hull_count++] = tri; + + is_success = true; + + return this; + } + + /** + * Used by the intersector, adds a new intersection point + * which is shared by both upper->lower hulls + */ + public void AddIntersectionPoint(Vector3 pt) { + intersection_pt[intersection_pt_count++] = pt; + } + + /** + * Clear the current state of this object + */ + public void Clear() { + is_success = false; + upper_hull_count = 0; + lower_hull_count = 0; + intersection_pt_count = 0; + } + + /** + * Editor only DEBUG functionality. This should not be compiled in the final + * Version. + */ + public void OnDebugDraw() { + OnDebugDraw(Color.white); + } + + public void OnDebugDraw(Color drawColor) { +#if UNITY_EDITOR + + if (!isValid) { + return; + } + + Color prevColor = Gizmos.color; + + Gizmos.color = drawColor; + + // draw the intersection points + for (int i = 0; i < intersectionPointCount; i++) { + Gizmos.DrawSphere(intersectionPoints[i], 0.1f); + } + + // draw the upper hull in RED + for (int i = 0; i < upperHullCount; i++) { + upperHull[i].OnDebugDraw(Color.red); + } + + // draw the lower hull in BLUE + for (int i = 0; i < lowerHullCount; i++) { + lowerHull[i].OnDebugDraw(Color.blue); + } + + Gizmos.color = prevColor; + +#endif + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/EzySlice/Framework/IntersectionResult.cs.meta b/Viagg-io/Assets/EzySlice/Framework/IntersectionResult.cs.meta new file mode 100644 index 0000000..0161937 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/IntersectionResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5efa1a1afdfb25242a95d994371519bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/Framework/Intersector.cs b/Viagg-io/Assets/EzySlice/Framework/Intersector.cs new file mode 100644 index 0000000..f59b9e7 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/Intersector.cs @@ -0,0 +1,491 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace EzySlice { + /** + * Contains static functionality to perform geometric intersection tests. + */ + public sealed class Intersector { + + /** + * Perform an intersection between Plane and Line, storing intersection point + * in reference q. Function returns true if intersection has been found or + * false otherwise. + */ + public static bool Intersect(Plane pl, Line ln, out Vector3 q) { + return Intersector.Intersect(pl, ln.positionA, ln.positionB, out q); + } + + + public const float Epsilon = 0.0001f; + /** + * Perform an intersection between Plane and Line made up of points a and b. Intersection + * point will be stored in reference q. Function returns true if intersection has been + * found or false otherwise. + */ + public static bool Intersect(Plane pl, Vector3 a, Vector3 b, out Vector3 q) { + Vector3 normal = pl.normal; + Vector3 ab = b - a; + + float t = (pl.dist - Vector3.Dot(normal, a)) / Vector3.Dot(normal, ab); + + // need to be careful and compensate for floating errors + if (t >= -Epsilon && t <= (1 + Epsilon)) { + q = a + t * ab; + + return true; + } + + q = Vector3.zero; + + return false; + } + + /** + * Support functionality + */ + public static float TriArea2D(float x1, float y1, float x2, float y2, float x3, float y3) { + return (x1 - x2) * (y2 - y3) - (x2 - x3) * (y1 - y2); + } + + /** + * Perform an intersection between Plane and Triangle. This is a comprehensive function + * which alwo builds a HULL Hirearchy useful for decimation projects. This obviously + * comes at the cost of more complex code and runtime checks, but the returned results + * are much more flexible. + * Results will be filled into the IntersectionResult reference. Check result.isValid() + * for the final results. + */ + public static void Intersect(Plane pl, Triangle tri, IntersectionResult result) { + // clear the previous results from the IntersectionResult + result.Clear(); + + // grab local variables for easier access + Vector3 a = tri.positionA; + Vector3 b = tri.positionB; + Vector3 c = tri.positionC; + + // check to see which side of the plane the points all + // lay in. SideOf operation is a simple dot product and some comparison + // operations, so these are a very quick checks + SideOfPlane sa = pl.SideOf(a); + SideOfPlane sb = pl.SideOf(b); + SideOfPlane sc = pl.SideOf(c); + + // we cannot intersect if the triangle points all fall on the same side + // of the plane. This is an easy early out test as no intersections are possible. + if (sa == sb && sb == sc) { + return; + } + + // detect cases where two points lay straight on the plane, meaning + // that the plane is actually parralel with one of the edges of the triangle + else if ((sa == SideOfPlane.ON && sa == sb) || + (sa == SideOfPlane.ON && sa == sc) || + (sb == SideOfPlane.ON && sb == sc)) { + return; + } + + // detect cases where one point is on the plane and the other two are on the same side + else if ((sa == SideOfPlane.ON && sb != SideOfPlane.ON && sb == sc) || + (sb == SideOfPlane.ON && sa != SideOfPlane.ON && sa == sc) || + (sc == SideOfPlane.ON && sa != SideOfPlane.ON && sa == sb)) { + return; + } + + // keep in mind that intersection points are shared by both + // the upper HULL and lower HULL hence they lie perfectly + // on the plane that cut them + Vector3 qa; + Vector3 qb; + + // check the cases where the points of the triangle actually lie on the plane itself + // in these cases, there is only going to be 2 triangles, one for the upper HULL and + // the other on the lower HULL + // we just need to figure out which points to accept into the upper or lower hulls. + if (sa == SideOfPlane.ON) { + // if the point a is on the plane, test line b-c + if (Intersector.Intersect(pl, b, c, out qa)) { + // line b-c intersected, construct out triangles and return approprietly + result.AddIntersectionPoint(qa); + result.AddIntersectionPoint(a); + + // our two generated triangles, we need to figure out which + // triangle goes into the UPPER hull and which goes into the LOWER hull + Triangle ta = new Triangle(a, b, qa); + Triangle tb = new Triangle(a, qa, c); + + // generate UV coordinates if there is any + if (tri.hasUV) { + // the computed UV coordinate if the intersection point + Vector2 pq = tri.GenerateUV(qa); + Vector2 pa = tri.uvA; + Vector2 pb = tri.uvB; + Vector2 pc = tri.uvC; + + ta.SetUV(pa, pb, pq); + tb.SetUV(pa, pq, pc); + } + + // generate Normal coordinates if there is any + if (tri.hasNormal) { + // the computed Normal coordinate if the intersection point + Vector3 pq = tri.GenerateNormal(qa); + Vector3 pa = tri.normalA; + Vector3 pb = tri.normalB; + Vector3 pc = tri.normalC; + + ta.SetNormal(pa, pb, pq); + tb.SetNormal(pa, pq, pc); + } + + // generate Tangent coordinates if there is any + if (tri.hasTangent) { + // the computed Tangent coordinate if the intersection point + Vector4 pq = tri.GenerateTangent(qa); + Vector4 pa = tri.tangentA; + Vector4 pb = tri.tangentB; + Vector4 pc = tri.tangentC; + + ta.SetTangent(pa, pb, pq); + tb.SetTangent(pa, pq, pc); + } + + // b point lies on the upside of the plane + if (sb == SideOfPlane.UP) { + result.AddUpperHull(ta).AddLowerHull(tb); + } + + // b point lies on the downside of the plane + else if (sb == SideOfPlane.DOWN) { + result.AddUpperHull(tb).AddLowerHull(ta); + } + } + } + + // test the case where the b point lies on the plane itself + else if (sb == SideOfPlane.ON) { + // if the point b is on the plane, test line a-c + if (Intersector.Intersect(pl, a, c, out qa)) { + // line a-c intersected, construct out triangles and return approprietly + result.AddIntersectionPoint(qa); + result.AddIntersectionPoint(b); + + // our two generated triangles, we need to figure out which + // triangle goes into the UPPER hull and which goes into the LOWER hull + Triangle ta = new Triangle(a, b, qa); + Triangle tb = new Triangle(qa, b, c); + + // generate UV coordinates if there is any + if (tri.hasUV) { + // the computed UV coordinate if the intersection point + Vector2 pq = tri.GenerateUV(qa); + Vector2 pa = tri.uvA; + Vector2 pb = tri.uvB; + Vector2 pc = tri.uvC; + + ta.SetUV(pa, pb, pq); + tb.SetUV(pq, pb, pc); + } + + // generate Normal coordinates if there is any + if (tri.hasNormal) { + // the computed Normal coordinate if the intersection point + Vector3 pq = tri.GenerateNormal(qa); + Vector3 pa = tri.normalA; + Vector3 pb = tri.normalB; + Vector3 pc = tri.normalC; + + ta.SetNormal(pa, pb, pq); + tb.SetNormal(pq, pb, pc); + } + + // generate Tangent coordinates if there is any + if (tri.hasTangent) { + // the computed Tangent coordinate if the intersection point + Vector4 pq = tri.GenerateTangent(qa); + Vector4 pa = tri.tangentA; + Vector4 pb = tri.tangentB; + Vector4 pc = tri.tangentC; + + ta.SetTangent(pa, pb, pq); + tb.SetTangent(pq, pb, pc); + } + + // a point lies on the upside of the plane + if (sa == SideOfPlane.UP) { + result.AddUpperHull(ta).AddLowerHull(tb); + } + + // a point lies on the downside of the plane + else if (sa == SideOfPlane.DOWN) { + result.AddUpperHull(tb).AddLowerHull(ta); + } + } + } + + // test the case where the c point lies on the plane itself + else if (sc == SideOfPlane.ON) { + // if the point c is on the plane, test line a-b + if (Intersector.Intersect(pl, a, b, out qa)) { + // line a-c intersected, construct out triangles and return approprietly + result.AddIntersectionPoint(qa); + result.AddIntersectionPoint(c); + + // our two generated triangles, we need to figure out which + // triangle goes into the UPPER hull and which goes into the LOWER hull + Triangle ta = new Triangle(a, qa, c); + Triangle tb = new Triangle(qa, b, c); + + // generate UV coordinates if there is any + if (tri.hasUV) { + // the computed UV coordinate if the intersection point + Vector2 pq = tri.GenerateUV(qa); + Vector2 pa = tri.uvA; + Vector2 pb = tri.uvB; + Vector2 pc = tri.uvC; + + ta.SetUV(pa, pq, pc); + tb.SetUV(pq, pb, pc); + } + + // generate Normal coordinates if there is any + if (tri.hasNormal) { + // the computed Normal coordinate if the intersection point + Vector3 pq = tri.GenerateNormal(qa); + Vector3 pa = tri.normalA; + Vector3 pb = tri.normalB; + Vector3 pc = tri.normalC; + + ta.SetNormal(pa, pq, pc); + tb.SetNormal(pq, pb, pc); + } + + // generate Tangent coordinates if there is any + if (tri.hasTangent) { + // the computed Tangent coordinate if the intersection point + Vector4 pq = tri.GenerateTangent(qa); + Vector4 pa = tri.tangentA; + Vector4 pb = tri.tangentB; + Vector4 pc = tri.tangentC; + + ta.SetTangent(pa, pq, pc); + tb.SetTangent(pq, pb, pc); + } + + // a point lies on the upside of the plane + if (sa == SideOfPlane.UP) { + result.AddUpperHull(ta).AddLowerHull(tb); + } + + // a point lies on the downside of the plane + else if (sa == SideOfPlane.DOWN) { + result.AddUpperHull(tb).AddLowerHull(ta); + } + } + } + + // at this point, all edge cases have been tested and failed, we need to perform + // full intersection tests against the lines. From this point onwards we will generate + // 3 triangles + else if (sa != sb && Intersector.Intersect(pl, a, b, out qa)) { + // intersection found against a - b + result.AddIntersectionPoint(qa); + + // since intersection was found against a - b, we need to check which other + // lines to check (we only need to check one more line) for intersection. + // the line we check against will be the line against the point which lies on + // the other side of the plane. + if (sa == sc) { + // we likely have an intersection against line b-c which will complete this loop + if (Intersector.Intersect(pl, b, c, out qb)) { + result.AddIntersectionPoint(qb); + + // our three generated triangles. Two of these triangles will end + // up on either the UPPER or LOWER hulls. + Triangle ta = new Triangle(qa, b, qb); + Triangle tb = new Triangle(a, qa, qb); + Triangle tc = new Triangle(a, qb, c); + + // generate UV coordinates if there is any + if (tri.hasUV) { + // the computed UV coordinate if the intersection point + Vector2 pqa = tri.GenerateUV(qa); + Vector2 pqb = tri.GenerateUV(qb); + Vector2 pa = tri.uvA; + Vector2 pb = tri.uvB; + Vector2 pc = tri.uvC; + + ta.SetUV(pqa, pb, pqb); + tb.SetUV(pa, pqa, pqb); + tc.SetUV(pa, pqb, pc); + } + + // generate Normal coordinates if there is any + if (tri.hasNormal) { + // the computed Normal coordinate if the intersection point + Vector3 pqa = tri.GenerateNormal(qa); + Vector3 pqb = tri.GenerateNormal(qb); + Vector3 pa = tri.normalA; + Vector3 pb = tri.normalB; + Vector3 pc = tri.normalC; + + ta.SetNormal(pqa, pb, pqb); + tb.SetNormal(pa, pqa, pqb); + tc.SetNormal(pa, pqb, pc); + } + + // generate Tangent coordinates if there is any + if (tri.hasTangent) { + // the computed Tangent coordinate if the intersection point + Vector4 pqa = tri.GenerateTangent(qa); + Vector4 pqb = tri.GenerateTangent(qb); + Vector4 pa = tri.tangentA; + Vector4 pb = tri.tangentB; + Vector4 pc = tri.tangentC; + + ta.SetTangent(pqa, pb, pqb); + tb.SetTangent(pa, pqa, pqb); + tc.SetTangent(pa, pqb, pc); + } + + if (sa == SideOfPlane.UP) { + result.AddUpperHull(tb).AddUpperHull(tc).AddLowerHull(ta); + } else { + result.AddLowerHull(tb).AddLowerHull(tc).AddUpperHull(ta); + } + } + } else { + // in this scenario, the point a is a "lone" point which lies in either upper + // or lower HULL. We need to perform another intersection to find the last point + if (Intersector.Intersect(pl, a, c, out qb)) { + result.AddIntersectionPoint(qb); + + // our three generated triangles. Two of these triangles will end + // up on either the UPPER or LOWER hulls. + Triangle ta = new Triangle(a, qa, qb); + Triangle tb = new Triangle(qa, b, c); + Triangle tc = new Triangle(qb, qa, c); + + // generate UV coordinates if there is any + if (tri.hasUV) { + // the computed UV coordinate if the intersection point + Vector2 pqa = tri.GenerateUV(qa); + Vector2 pqb = tri.GenerateUV(qb); + Vector2 pa = tri.uvA; + Vector2 pb = tri.uvB; + Vector2 pc = tri.uvC; + + ta.SetUV(pa, pqa, pqb); + tb.SetUV(pqa, pb, pc); + tc.SetUV(pqb, pqa, pc); + } + + // generate Normal coordinates if there is any + if (tri.hasNormal) { + // the computed Normal coordinate if the intersection point + Vector3 pqa = tri.GenerateNormal(qa); + Vector3 pqb = tri.GenerateNormal(qb); + Vector3 pa = tri.normalA; + Vector3 pb = tri.normalB; + Vector3 pc = tri.normalC; + + ta.SetNormal(pa, pqa, pqb); + tb.SetNormal(pqa, pb, pc); + tc.SetNormal(pqb, pqa, pc); + } + + // generate Tangent coordinates if there is any + if (tri.hasTangent) { + // the computed Tangent coordinate if the intersection point + Vector4 pqa = tri.GenerateTangent(qa); + Vector4 pqb = tri.GenerateTangent(qb); + Vector4 pa = tri.tangentA; + Vector4 pb = tri.tangentB; + Vector4 pc = tri.tangentC; + + ta.SetTangent(pa, pqa, pqb); + tb.SetTangent(pqa, pb, pc); + tc.SetTangent(pqb, pqa, pc); + } + + if (sa == SideOfPlane.UP) { + result.AddUpperHull(ta).AddLowerHull(tb).AddLowerHull(tc); + } else { + result.AddLowerHull(ta).AddUpperHull(tb).AddUpperHull(tc); + } + } + } + } + + // if line a-b did not intersect (or the lie on the same side of the plane) + // this simplifies the problem a fair bit. This means we have an intersection + // in line a-c and b-c, which we can use to build a new UPPER and LOWER hulls + // we are expecting both of these intersection tests to pass, otherwise something + // went wrong (float errors? missed a checked case?) + else if (Intersector.Intersect(pl, c, a, out qa) && Intersector.Intersect(pl, c, b, out qb)) { + // in here we know that line a-b actually lie on the same side of the plane, this will + // simplify the rest of the logic. We also have our intersection points + // the computed UV coordinate of the intersection point + + result.AddIntersectionPoint(qa); + result.AddIntersectionPoint(qb); + + // our three generated triangles. Two of these triangles will end + // up on either the UPPER or LOWER hulls. + Triangle ta = new Triangle(qa, qb, c); + Triangle tb = new Triangle(a, qb, qa); + Triangle tc = new Triangle(a, b, qb); + + // generate UV coordinates if there is any + if (tri.hasUV) { + // the computed UV coordinate if the intersection point + Vector2 pqa = tri.GenerateUV(qa); + Vector2 pqb = tri.GenerateUV(qb); + Vector2 pa = tri.uvA; + Vector2 pb = tri.uvB; + Vector2 pc = tri.uvC; + + ta.SetUV(pqa, pqb, pc); + tb.SetUV(pa, pqb, pqa); + tc.SetUV(pa, pb, pqb); + } + + // generate Normal coordinates if there is any + if (tri.hasNormal) { + // the computed Normal coordinate if the intersection point + Vector3 pqa = tri.GenerateNormal(qa); + Vector3 pqb = tri.GenerateNormal(qb); + Vector3 pa = tri.normalA; + Vector3 pb = tri.normalB; + Vector3 pc = tri.normalC; + + ta.SetNormal(pqa, pqb, pc); + tb.SetNormal(pa, pqb, pqa); + tc.SetNormal(pa, pb, pqb); + } + + // generate Tangent coordinates if there is any + if (tri.hasTangent) { + // the computed Tangent coordinate if the intersection point + Vector4 pqa = tri.GenerateTangent(qa); + Vector4 pqb = tri.GenerateTangent(qb); + Vector4 pa = tri.tangentA; + Vector4 pb = tri.tangentB; + Vector4 pc = tri.tangentC; + + ta.SetTangent(pqa, pqb, pc); + tb.SetTangent(pa, pqb, pqa); + tc.SetTangent(pa, pb, pqb); + } + + if (sa == SideOfPlane.UP) { + result.AddUpperHull(tb).AddUpperHull(tc).AddLowerHull(ta); + } else { + result.AddLowerHull(tb).AddLowerHull(tc).AddUpperHull(ta); + } + } + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/EzySlice/Framework/Intersector.cs.meta b/Viagg-io/Assets/EzySlice/Framework/Intersector.cs.meta new file mode 100644 index 0000000..019fadb --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/Intersector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 966c18ce8e503ed47a80ec55f6a1928e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/Framework/Line.cs b/Viagg-io/Assets/EzySlice/Framework/Line.cs new file mode 100644 index 0000000..0dc7288 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/Line.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace EzySlice { + public struct Line { + private readonly Vector3 m_pos_a; + private readonly Vector3 m_pos_b; + + public Line(Vector3 pta, Vector3 ptb) { + this.m_pos_a = pta; + this.m_pos_b = ptb; + } + + public float dist { + get { return Vector3.Distance(this.m_pos_a, this.m_pos_b); } + } + + public float distSq { + get { return (this.m_pos_a - this.m_pos_b).sqrMagnitude; } + } + + public Vector3 positionA { + get { return this.m_pos_a; } + } + + public Vector3 positionB { + get { return this.m_pos_b; } + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/EzySlice/Framework/Line.cs.meta b/Viagg-io/Assets/EzySlice/Framework/Line.cs.meta new file mode 100644 index 0000000..e341303 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/Line.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c53f19a109c6ef4aa92ee2d52fffd2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/Framework/Plane.cs b/Viagg-io/Assets/EzySlice/Framework/Plane.cs new file mode 100644 index 0000000..fd94337 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/Plane.cs @@ -0,0 +1,141 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace EzySlice { + + /** + * Quick Internal structure which checks where the point lays on the + * Plane. UP = Upwards from the Normal, DOWN = Downwards from the Normal + * ON = Point lays straight on the plane + */ + public enum SideOfPlane { + UP, + DOWN, + ON + } + + /** + * Represents a simple 3D Plane structure with a position + * and direction which extends infinitely in its axis. This provides + * an optimal structure for collision tests for the slicing framework. + */ + public struct Plane { + private Vector3 m_normal; + private float m_dist; + + // this is for editor debugging only! do NOT try to access this + // variable at runtime, we will be stripping it out for final + // builds +#if UNITY_EDITOR + private Transform trans_ref; +#endif + + public Plane(Vector3 pos, Vector3 norm) { + this.m_normal = norm; + this.m_dist = Vector3.Dot(norm, pos); + + // this is for editor debugging only! +#if UNITY_EDITOR + trans_ref = null; +#endif + } + + public Plane(Vector3 norm, float dot) { + this.m_normal = norm; + this.m_dist = dot; + + // this is for editor debugging only! +#if UNITY_EDITOR + trans_ref = null; +#endif + } + + public Plane(Vector3 a, Vector3 b, Vector3 c) { + m_normal = Vector3.Normalize(Vector3.Cross(b - a, c - a)); + m_dist = -Vector3.Dot(m_normal, a); + + // this is for editor debugging only! +#if UNITY_EDITOR + trans_ref = null; +#endif + } + + public void Compute(Vector3 pos, Vector3 norm) { + this.m_normal = norm; + this.m_dist = Vector3.Dot(norm, pos); + } + + public void Compute(Transform trans) { + Compute(trans.position, trans.up); + + // this is for editor debugging only! +#if UNITY_EDITOR + trans_ref = trans; +#endif + } + + public void Compute(GameObject obj) { + Compute(obj.transform); + } + + public Vector3 normal { + get { return this.m_normal; } + } + + public float dist { + get { return this.m_dist; } + } + + /** + * Checks which side of the plane the point lays on. + */ + public SideOfPlane SideOf(Vector3 pt) { + float result = Vector3.Dot(m_normal, pt) - m_dist; + + if (result > Intersector.Epsilon) { + return SideOfPlane.UP; + } + + if (result < -Intersector.Epsilon) { + return SideOfPlane.DOWN; + } + + return SideOfPlane.ON; + } + + /** + * Editor only DEBUG functionality. This should not be compiled in the final + * Version. + */ + public void OnDebugDraw() { + OnDebugDraw(Color.white); + } + + public void OnDebugDraw(Color drawColor) { + // NOTE -> Gizmos are only supported in the editor. We will keep these function + // signatures for consistancy however at final build, these will do nothing + // TO/DO -> Should we throw a runtime exception if this function tried to get executed + // at runtime? +#if UNITY_EDITOR + + if (trans_ref == null) { + return; + } + + Color prevColor = Gizmos.color; + Matrix4x4 prevMatrix = Gizmos.matrix; + + // TO-DO + Gizmos.matrix = Matrix4x4.TRS(trans_ref.position, trans_ref.rotation, trans_ref.localScale); + Gizmos.color = drawColor; + + Gizmos.DrawWireCube(Vector3.zero, new Vector3(1.0f, 0.0f, 1.0f)); + + Gizmos.color = prevColor; + Gizmos.matrix = prevMatrix; + +#endif + } + } +} diff --git a/Viagg-io/Assets/EzySlice/Framework/Plane.cs.meta b/Viagg-io/Assets/EzySlice/Framework/Plane.cs.meta new file mode 100644 index 0000000..3578b55 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/Plane.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0838665d3fc17c645a1d7d45613d4f30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/Framework/TextureRegion.cs b/Viagg-io/Assets/EzySlice/Framework/TextureRegion.cs new file mode 100644 index 0000000..a3bc320 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/TextureRegion.cs @@ -0,0 +1,115 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace EzySlice { + /** + * TextureRegion defines a region of a specific texture which can be used + * for custom UV Mapping Routines. + * + * TextureRegions are always stored in normalized UV Coordinate space between + * 0.0f and 1.0f + */ + public struct TextureRegion { + private readonly float pos_start_x; + private readonly float pos_start_y; + private readonly float pos_end_x; + private readonly float pos_end_y; + + public TextureRegion(float startX, float startY, float endX, float endY) { + this.pos_start_x = startX; + this.pos_start_y = startY; + this.pos_end_x = endX; + this.pos_end_y = endY; + } + + public float startX { get { return this.pos_start_x; } } + public float startY { get { return this.pos_start_y; } } + public float endX { get { return this.pos_end_x; } } + public float endY { get { return this.pos_end_y; } } + + public Vector2 start { get { return new Vector2(startX, startY); } } + public Vector2 end { get { return new Vector2(endX, endY); } } + + /** + * Perform a mapping of a UV coordinate (computed in 0,1 space) + * into the new coordinates defined by the provided TextureRegion + */ + public Vector2 Map(Vector2 uv) { + return Map(uv.x, uv.y); + } + + /** + * Perform a mapping of a UV coordinate (computed in 0,1 space) + * into the new coordinates defined by the provided TextureRegion + */ + public Vector2 Map(float x, float y) { + float mappedX = MAP(x, 0.0f, 1.0f, pos_start_x, pos_end_x); + float mappedY = MAP(y, 0.0f, 1.0f, pos_start_y, pos_end_y); + + return new Vector2(mappedX, mappedY); + } + + /** + * Our mapping function to map arbitrary values into our required texture region + */ + private static float MAP(float x, float in_min, float in_max, float out_min, float out_max) { + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; + } + } + + /** + * Define our TextureRegion extension to easily calculate + * from a Texture2D Object. + */ + public static class TextureRegionExtension { + + /** + * Helper function to quickly calculate the Texture Region from a material. + * This extension function will use the mainTexture component to perform the + * calculation. + * + * Will throw a null exception if the texture does not exist. See + * Texture.getTextureRegion() for function details. + */ + public static TextureRegion GetTextureRegion(this Material mat, + int pixX, + int pixY, + int pixWidth, + int pixHeight) { + return mat.mainTexture.GetTextureRegion(pixX, pixY, pixWidth, pixHeight); + } + + /** + * Using a Texture2D, calculate and return a specific TextureRegion + * Coordinates are provided in pixel coordinates where 0,0 is the + * bottom left corner of the texture. + * + * The texture region will automatically be calculated to ensure that it + * will fit inside the provided texture. + */ + public static TextureRegion GetTextureRegion(this Texture tex, + int pixX, + int pixY, + int pixWidth, + int pixHeight) { + int textureWidth = tex.width; + int textureHeight = tex.height; + + // ensure we are not referencing out of bounds coordinates + // relative to our texture + int calcWidth = Mathf.Min(textureWidth, pixWidth); + int calcHeight = Mathf.Min(textureHeight, pixHeight); + int calcX = Mathf.Min(Mathf.Abs(pixX), textureWidth); + int calcY = Mathf.Min(Mathf.Abs(pixY), textureHeight); + + float startX = calcX / (float) textureWidth; + float startY = calcY / (float) textureHeight; + float endX = (calcX + calcWidth) / (float) textureWidth; + float endY = (calcY + calcHeight) / (float) textureHeight; + + // texture region is a struct which is allocated on the stack + return new TextureRegion(startX, startY, endX, endY); + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/EzySlice/Framework/TextureRegion.cs.meta b/Viagg-io/Assets/EzySlice/Framework/TextureRegion.cs.meta new file mode 100644 index 0000000..e6a8d43 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/TextureRegion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18937420d6e20bf43aa3ff0774c73407 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/Framework/Triangle.cs b/Viagg-io/Assets/EzySlice/Framework/Triangle.cs new file mode 100644 index 0000000..c49a8f7 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/Triangle.cs @@ -0,0 +1,349 @@ +using UnityEngine; + +namespace EzySlice { + /** + * Represents a simple 3D Triangle structure with position + * and UV map. The UV is required if the slicer needs + * to recalculate the new UV position for texture mapping. + */ + public struct Triangle { + // the points which represent this triangle + // these have to be set and are immutable. Cannot be + // changed once set + private readonly Vector3 m_pos_a; + private readonly Vector3 m_pos_b; + private readonly Vector3 m_pos_c; + + // the UV coordinates of this triangle + // these are optional and may not be set + private bool m_uv_set; + private Vector2 m_uv_a; + private Vector2 m_uv_b; + private Vector2 m_uv_c; + + // the Normals of the Vertices + // these are optional and may not be set + private bool m_nor_set; + private Vector3 m_nor_a; + private Vector3 m_nor_b; + private Vector3 m_nor_c; + + // the Tangents of the Vertices + // these are optional and may not be set + private bool m_tan_set; + private Vector4 m_tan_a; + private Vector4 m_tan_b; + private Vector4 m_tan_c; + + public Triangle(Vector3 posa, + Vector3 posb, + Vector3 posc) { + this.m_pos_a = posa; + this.m_pos_b = posb; + this.m_pos_c = posc; + + this.m_uv_set = false; + this.m_uv_a = Vector2.zero; + this.m_uv_b = Vector2.zero; + this.m_uv_c = Vector2.zero; + + this.m_nor_set = false; + this.m_nor_a = Vector3.zero; + this.m_nor_b = Vector3.zero; + this.m_nor_c = Vector3.zero; + + this.m_tan_set = false; + this.m_tan_a = Vector4.zero; + this.m_tan_b = Vector4.zero; + this.m_tan_c = Vector4.zero; + } + + public Vector3 positionA { + get { return this.m_pos_a; } + } + + public Vector3 positionB { + get { return this.m_pos_b; } + } + + public Vector3 positionC { + get { return this.m_pos_c; } + } + + public bool hasUV { + get { return this.m_uv_set; } + } + + public void SetUV(Vector2 uvA, Vector2 uvB, Vector2 uvC) { + this.m_uv_a = uvA; + this.m_uv_b = uvB; + this.m_uv_c = uvC; + + this.m_uv_set = true; + } + + public Vector2 uvA { + get { return this.m_uv_a; } + } + + public Vector2 uvB { + get { return this.m_uv_b; } + } + + public Vector2 uvC { + get { return this.m_uv_c; } + } + + public bool hasNormal { + get { return this.m_nor_set; } + } + + public void SetNormal(Vector3 norA, Vector3 norB, Vector3 norC) { + this.m_nor_a = norA; + this.m_nor_b = norB; + this.m_nor_c = norC; + + this.m_nor_set = true; + } + + public Vector3 normalA { + get { return this.m_nor_a; } + } + + public Vector3 normalB { + get { return this.m_nor_b; } + } + + public Vector3 normalC { + get { return this.m_nor_c; } + } + + public bool hasTangent { + get { return this.m_tan_set; } + } + + public void SetTangent(Vector4 tanA, Vector4 tanB, Vector4 tanC) { + this.m_tan_a = tanA; + this.m_tan_b = tanB; + this.m_tan_c = tanC; + + this.m_tan_set = true; + } + + public Vector4 tangentA { + get { return this.m_tan_a; } + } + + public Vector4 tangentB { + get { return this.m_tan_b; } + } + + public Vector4 tangentC { + get { return this.m_tan_c; } + } + + /** + * Compute and set the tangents of this triangle + * Derived From https://answers.unity.com/questions/7789/calculating-tangents-vector4.html + */ + public void ComputeTangents() { + // computing tangents requires both UV and normals set + if (!m_nor_set || !m_uv_set) { + return; + } + + Vector3 v1 = m_pos_a; + Vector3 v2 = m_pos_b; + Vector3 v3 = m_pos_c; + + Vector2 w1 = m_uv_a; + Vector2 w2 = m_uv_b; + Vector2 w3 = m_uv_c; + + float x1 = v2.x - v1.x; + float x2 = v3.x - v1.x; + float y1 = v2.y - v1.y; + float y2 = v3.y - v1.y; + float z1 = v2.z - v1.z; + float z2 = v3.z - v1.z; + + float s1 = w2.x - w1.x; + float s2 = w3.x - w1.x; + float t1 = w2.y - w1.y; + float t2 = w3.y - w1.y; + + float r = 1.0f / (s1 * t2 - s2 * t1); + + Vector3 sdir = new Vector3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r); + Vector3 tdir = new Vector3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r); + + Vector3 n1 = m_nor_a; + Vector3 nt1 = sdir; + + Vector3.OrthoNormalize(ref n1, ref nt1); + Vector4 tanA = new Vector4(nt1.x, nt1.y, nt1.z, (Vector3.Dot(Vector3.Cross(n1, nt1), tdir) < 0.0f) ? -1.0f : 1.0f); + + Vector3 n2 = m_nor_b; + Vector3 nt2 = sdir; + + Vector3.OrthoNormalize(ref n2, ref nt2); + Vector4 tanB = new Vector4(nt2.x, nt2.y, nt2.z, (Vector3.Dot(Vector3.Cross(n2, nt2), tdir) < 0.0f) ? -1.0f : 1.0f); + + Vector3 n3 = m_nor_c; + Vector3 nt3 = sdir; + + Vector3.OrthoNormalize(ref n3, ref nt3); + Vector4 tanC = new Vector4(nt3.x, nt3.y, nt3.z, (Vector3.Dot(Vector3.Cross(n3, nt3), tdir) < 0.0f) ? -1.0f : 1.0f); + + // finally set the tangents of this object + SetTangent(tanA, tanB, tanC); + } + + /** + * Calculate the Barycentric coordinate weight values u-v-w for Point p in respect to the provided + * triangle. This is useful for computing new UV coordinates for arbitrary points. + */ + public Vector3 Barycentric(Vector3 p) { + Vector3 a = m_pos_a; + Vector3 b = m_pos_b; + Vector3 c = m_pos_c; + + Vector3 m = Vector3.Cross(b - a, c - a); + + float nu; + float nv; + float ood; + + float x = Mathf.Abs(m.x); + float y = Mathf.Abs(m.y); + float z = Mathf.Abs(m.z); + + // compute areas of plane with largest projections + if (x >= y && x >= z) { + // area of PBC in yz plane + nu = Intersector.TriArea2D(p.y, p.z, b.y, b.z, c.y, c.z); + // area of PCA in yz plane + nv = Intersector.TriArea2D(p.y, p.z, c.y, c.z, a.y, a.z); + // 1/2*area of ABC in yz plane + ood = 1.0f / m.x; + } else if (y >= x && y >= z) { + // project in xz plane + nu = Intersector.TriArea2D(p.x, p.z, b.x, b.z, c.x, c.z); + nv = Intersector.TriArea2D(p.x, p.z, c.x, c.z, a.x, a.z); + ood = 1.0f / -m.y; + } else { + // project in xy plane + nu = Intersector.TriArea2D(p.x, p.y, b.x, b.y, c.x, c.y); + nv = Intersector.TriArea2D(p.x, p.y, c.x, c.y, a.x, a.y); + ood = 1.0f / m.z; + } + + float u = nu * ood; + float v = nv * ood; + float w = 1.0f - u - v; + + return new Vector3(u, v, w); + } + + /** + * Generate a set of new UV coordinates for the provided point pt in respect to Triangle. + * + * Uses weight values for the computation, so this triangle must have UV's set to return + * the correct results. Otherwise Vector2.zero will be returned. check via hasUV(). + */ + public Vector2 GenerateUV(Vector3 pt) { + // if not set, result will be zero, quick exit + if (!m_uv_set) { + return Vector2.zero; + } + + Vector3 weights = Barycentric(pt); + + return (weights.x * m_uv_a) + (weights.y * m_uv_b) + (weights.z * m_uv_c); + } + + /** + * Generates a set of new Normal coordinates for the provided point pt in respect to Triangle. + * + * Uses weight values for the computation, so this triangle must have Normal's set to return + * the correct results. Otherwise Vector3.zero will be returned. check via hasNormal(). + */ + public Vector3 GenerateNormal(Vector3 pt) { + // if not set, result will be zero, quick exit + if (!m_nor_set) { + return Vector3.zero; + } + + Vector3 weights = Barycentric(pt); + + return (weights.x * m_nor_a) + (weights.y * m_nor_b) + (weights.z * m_nor_c); + } + + /** + * Generates a set of new Tangent coordinates for the provided point pt in respect to Triangle. + * + * Uses weight values for the computation, so this triangle must have Tangent's set to return + * the correct results. Otherwise Vector4.zero will be returned. check via hasTangent(). + */ + public Vector4 GenerateTangent(Vector3 pt) { + // if not set, result will be zero, quick exit + if (!m_nor_set) { + return Vector4.zero; + } + + Vector3 weights = Barycentric(pt); + + return (weights.x * m_tan_a) + (weights.y * m_tan_b) + (weights.z * m_tan_c); + } + + /** + * Helper function to split this triangle by the provided plane and store + * the results inside the IntersectionResult structure. + * Returns true on success or false otherwise + */ + public bool Split(Plane pl, IntersectionResult result) { + Intersector.Intersect(pl, this, result); + + return result.isValid; + } + + /** + * Check the triangle winding order, if it's Clock Wise or Counter Clock Wise + */ + public bool IsCW() { + return SignedSquare(m_pos_a, m_pos_b, m_pos_c) >= float.Epsilon; + } + + /** + * Returns the Signed square of a given triangle, useful for checking the + * winding order + */ + public static float SignedSquare(Vector3 a, Vector3 b, Vector3 c) { + return (a.x * (b.y * c.z - b.z * c.y) - + a.y * (b.x * c.z - b.z * c.x) + + a.z * (b.x * c.y - b.y * c.x)); + } + + /** + * Editor only DEBUG functionality. This should not be compiled in the final + * Version. + */ + public void OnDebugDraw() { + OnDebugDraw(Color.white); + } + + public void OnDebugDraw(Color drawColor) { +#if UNITY_EDITOR + Color prevColor = Gizmos.color; + + Gizmos.color = drawColor; + + Gizmos.DrawLine(positionA, positionB); + Gizmos.DrawLine(positionB, positionC); + Gizmos.DrawLine(positionC, positionA); + + Gizmos.color = prevColor; +#endif + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/EzySlice/Framework/Triangle.cs.meta b/Viagg-io/Assets/EzySlice/Framework/Triangle.cs.meta new file mode 100644 index 0000000..78c28cd --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/Triangle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96f717fa4e78b3a488db75d4d84a7a3c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/Framework/Triangulator.cs b/Viagg-io/Assets/EzySlice/Framework/Triangulator.cs new file mode 100644 index 0000000..5c5a3aa --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/Triangulator.cs @@ -0,0 +1,199 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace EzySlice { + + /** + * Contains static functionality for performing Triangulation on arbitrary vertices. + * Read the individual function descriptions for specific details. + */ + public sealed class Triangulator { + + /** + * Represents a 3D Vertex which has been mapped onto a 2D surface + * and is mainly used in MonotoneChain to triangulate a set of vertices + * against a flat plane. + */ + internal struct Mapped2D { + private readonly Vector3 original; + private readonly Vector2 mapped; + + public Mapped2D(Vector3 newOriginal, Vector3 u, Vector3 v) { + this.original = newOriginal; + this.mapped = new Vector2(Vector3.Dot(newOriginal, u), Vector3.Dot(newOriginal, v)); + } + + public Vector2 mappedValue { + get { return this.mapped; } + } + + public Vector3 originalValue { + get { return this.original; } + } + } + + /** + * Overloaded variant of MonotoneChain which will calculate UV coordinates of the Triangles + * between 0.0 and 1.0 (default). + * + * See MonotoneChain(vertices, normal, tri, TextureRegion) for full explanation + */ + public static bool MonotoneChain(List vertices, Vector3 normal, out List tri) { + // default texture region is in coordinates 0,0 to 1,1 + return MonotoneChain(vertices, normal, out tri, new TextureRegion(0.0f, 0.0f, 1.0f, 1.0f)); + } + + /** + * O(n log n) Convex Hull Algorithm. + * Accepts a list of vertices as Vector3 and triangulates them according to a projection + * plane defined as planeNormal. Algorithm will output vertices, indices and UV coordinates + * as arrays + */ + public static bool MonotoneChain(List vertices, Vector3 normal, out List tri, TextureRegion texRegion) { + int count = vertices.Count; + + // we cannot triangulate less than 3 points. Use minimum of 3 points + if (count < 3) { + tri = null; + return false; + } + + // first, we map from 3D points into a 2D plane represented by the provided normal + Vector3 u = Vector3.Normalize(Vector3.Cross(normal, Vector3.up)); + if (Vector3.zero == u) { + u = Vector3.Normalize(Vector3.Cross(normal, Vector3.forward)); + } + Vector3 v = Vector3.Cross(u, normal); + + // generate an array of mapped values + Mapped2D[] mapped = new Mapped2D[count]; + + // these values will be used to generate new UV coordinates later on + float maxDivX = float.MinValue; + float maxDivY = float.MinValue; + float minDivX = float.MaxValue; + float minDivY = float.MaxValue; + + // map the 3D vertices into the 2D mapped values + for (int i = 0; i < count; i++) { + Vector3 vertToAdd = vertices[i]; + + Mapped2D newMappedValue = new Mapped2D(vertToAdd, u, v); + Vector2 mapVal = newMappedValue.mappedValue; + + // grab our maximal values so we can map UV's in a proper range + maxDivX = Mathf.Max(maxDivX, mapVal.x); + maxDivY = Mathf.Max(maxDivY, mapVal.y); + minDivX = Mathf.Min(minDivX, mapVal.x); + minDivY = Mathf.Min(minDivY, mapVal.y); + + mapped[i] = newMappedValue; + } + + // sort our newly generated array values + Array.Sort(mapped, (a, b) => { + Vector2 x = a.mappedValue; + Vector2 p = b.mappedValue; + + return (x.x < p.x || (x.x == p.x && x.y < p.y)) ? -1 : 1; + }); + + // our final hull mappings will end up in here + Mapped2D[] hulls = new Mapped2D[count + 1]; + + int k = 0; + + // build the lower hull of the chain + for (int i = 0; i < count; i++) { + while (k >= 2) { + Vector2 mA = hulls[k - 2].mappedValue; + Vector2 mB = hulls[k - 1].mappedValue; + Vector2 mC = mapped[i].mappedValue; + + if (Intersector.TriArea2D(mA.x, mA.y, mB.x, mB.y, mC.x, mC.y) > 0.0f) { + break; + } + + k--; + } + + hulls[k++] = mapped[i]; + } + + // build the upper hull of the chain + for (int i = count - 2, t = k + 1; i >= 0; i--) { + while (k >= t) { + Vector2 mA = hulls[k - 2].mappedValue; + Vector2 mB = hulls[k - 1].mappedValue; + Vector2 mC = mapped[i].mappedValue; + + if (Intersector.TriArea2D(mA.x, mA.y, mB.x, mB.y, mC.x, mC.y) > 0.0f) { + break; + } + + k--; + } + + hulls[k++] = mapped[i]; + } + + // finally we can build our mesh, generate all the variables + // and fill them up + int vertCount = k - 1; + int triCount = (vertCount - 2) * 3; + + // this should not happen, but here just in case + if (vertCount < 3) { + tri = null; + return false; + } + + // ensure List does not dynamically grow, performing copy ops each time! + tri = new List(triCount / 3); + + float width = maxDivX - minDivX; + float height = maxDivY - minDivY; + + int indexCount = 1; + + // generate both the vertices and uv's in this loop + for (int i = 0; i < triCount; i += 3) { + // the Vertices in our triangle + Mapped2D posA = hulls[0]; + Mapped2D posB = hulls[indexCount]; + Mapped2D posC = hulls[indexCount + 1]; + + // generate UV Maps + Vector2 uvA = posA.mappedValue; + Vector2 uvB = posB.mappedValue; + Vector2 uvC = posC.mappedValue; + + uvA.x = (uvA.x - minDivX) / width; + uvA.y = (uvA.y - minDivY) / height; + + uvB.x = (uvB.x - minDivX) / width; + uvB.y = (uvB.y - minDivY) / height; + + uvC.x = (uvC.x - minDivX) / width; + uvC.y = (uvC.y - minDivY) / height; + + Triangle newTriangle = new Triangle(posA.originalValue, posB.originalValue, posC.originalValue); + + // ensure our UV coordinates are mapped into the requested TextureRegion + newTriangle.SetUV(texRegion.Map(uvA), texRegion.Map(uvB), texRegion.Map(uvC)); + + // the normals is the same for all vertices since the final mesh is completly flat + newTriangle.SetNormal(normal, normal, normal); + newTriangle.ComputeTangents(); + + tri.Add(newTriangle); + + indexCount++; + } + + return true; + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/EzySlice/Framework/Triangulator.cs.meta b/Viagg-io/Assets/EzySlice/Framework/Triangulator.cs.meta new file mode 100644 index 0000000..80bcadb --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Framework/Triangulator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df75fed5929ce23479250922ef5b2b7c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/SlicedHull.cs b/Viagg-io/Assets/EzySlice/SlicedHull.cs new file mode 100644 index 0000000..cf954e7 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/SlicedHull.cs @@ -0,0 +1,141 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace EzySlice { + + /** + * The final generated data structure from a slice operation. This provides easy access + * to utility functions and the final Mesh data for each section of the HULL. + */ + public sealed class SlicedHull { + private Mesh upper_hull; + private Mesh lower_hull; + + public SlicedHull(Mesh upperHull, Mesh lowerHull) { + this.upper_hull = upperHull; + this.lower_hull = lowerHull; + } + + public GameObject CreateUpperHull(GameObject original) { + return CreateUpperHull(original, null); + } + + public GameObject CreateUpperHull(GameObject original, Material crossSectionMat) { + GameObject newObject = CreateUpperHull(); + + if (newObject != null) { + newObject.transform.localPosition = original.transform.localPosition; + newObject.transform.localRotation = original.transform.localRotation; + newObject.transform.localScale = original.transform.localScale; + + Material[] shared = original.GetComponent().sharedMaterials; + Mesh mesh = original.GetComponent().sharedMesh; + + // nothing changed in the hierarchy, the cross section must have been batched + // with the submeshes, return as is, no need for any changes + if (mesh.subMeshCount == upper_hull.subMeshCount) { + // the the material information + newObject.GetComponent().sharedMaterials = shared; + + return newObject; + } + + // otherwise the cross section was added to the back of the submesh array because + // it uses a different material. We need to take this into account + Material[] newShared = new Material[shared.Length + 1]; + + // copy our material arrays across using native copy (should be faster than loop) + System.Array.Copy(shared, newShared, shared.Length); + newShared[shared.Length] = crossSectionMat; + + // the the material information + newObject.GetComponent().sharedMaterials = newShared; + } + + return newObject; + } + + public GameObject CreateLowerHull(GameObject original) { + return CreateLowerHull(original, null); + } + + public GameObject CreateLowerHull(GameObject original, Material crossSectionMat) { + GameObject newObject = CreateLowerHull(); + + if (newObject != null) { + newObject.transform.localPosition = original.transform.localPosition; + newObject.transform.localRotation = original.transform.localRotation; + newObject.transform.localScale = original.transform.localScale; + + Material[] shared = original.GetComponent().sharedMaterials; + Mesh mesh = original.GetComponent().sharedMesh; + + // nothing changed in the hierarchy, the cross section must have been batched + // with the submeshes, return as is, no need for any changes + if (mesh.subMeshCount == lower_hull.subMeshCount) { + // the the material information + newObject.GetComponent().sharedMaterials = shared; + + return newObject; + } + + // otherwise the cross section was added to the back of the submesh array because + // it uses a different material. We need to take this into account + Material[] newShared = new Material[shared.Length + 1]; + + // copy our material arrays across using native copy (should be faster than loop) + System.Array.Copy(shared, newShared, shared.Length); + newShared[shared.Length] = crossSectionMat; + + // the the material information + newObject.GetComponent().sharedMaterials = newShared; + } + + return newObject; + } + + /** + * Generate a new GameObject from the upper hull of the mesh + * This function will return null if upper hull does not exist + */ + public GameObject CreateUpperHull() { + return CreateEmptyObject("Upper_Hull", upper_hull); + } + + /** + * Generate a new GameObject from the Lower hull of the mesh + * This function will return null if lower hull does not exist + */ + public GameObject CreateLowerHull() { + return CreateEmptyObject("Lower_Hull", lower_hull); + } + + public Mesh upperHull { + get { return this.upper_hull; } + } + + public Mesh lowerHull { + get { return this.lower_hull; } + } + + /** + * Helper function which will create a new GameObject to be able to add + * a new mesh for rendering and return. + */ + private static GameObject CreateEmptyObject(string name, Mesh hull) { + if (hull == null) { + return null; + } + + GameObject newObject = new GameObject(name); + + newObject.AddComponent(); + MeshFilter filter = newObject.AddComponent(); + + filter.mesh = hull; + + return newObject; + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/EzySlice/SlicedHull.cs.meta b/Viagg-io/Assets/EzySlice/SlicedHull.cs.meta new file mode 100644 index 0000000..d9abc69 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/SlicedHull.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3038362ea1df3e0448b1b60ebe0a0034 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/Slicer.cs b/Viagg-io/Assets/EzySlice/Slicer.cs new file mode 100644 index 0000000..3261cce --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Slicer.cs @@ -0,0 +1,481 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace EzySlice { + + /** + * Contains methods for slicing GameObjects + */ + public sealed class Slicer { + + /** + * An internal class for storing internal submesh values + */ + internal class SlicedSubmesh { + public readonly List upperHull = new List(); + public readonly List lowerHull = new List(); + + /** + * Check if the submesh has had any UV's added. + * NOTE -> This should be supported properly + */ + public bool hasUV { + get { + // what is this abomination?? + return upperHull.Count > 0 ? upperHull[0].hasUV : lowerHull.Count > 0 && lowerHull[0].hasUV; + } + } + + /** + * Check if the submesh has had any Normals added. + * NOTE -> This should be supported properly + */ + public bool hasNormal { + get { + // what is this abomination?? + return upperHull.Count > 0 ? upperHull[0].hasNormal : lowerHull.Count > 0 && lowerHull[0].hasNormal; + } + } + + /** + * Check if the submesh has had any Tangents added. + * NOTE -> This should be supported properly + */ + public bool hasTangent { + get { + // what is this abomination?? + return upperHull.Count > 0 ? upperHull[0].hasTangent : lowerHull.Count > 0 && lowerHull[0].hasTangent; + } + } + + /** + * Check if proper slicing has occured for this submesh. Slice occured if there + * are triangles in both the upper and lower hulls + */ + public bool isValid { + get { + return upperHull.Count > 0 && lowerHull.Count > 0; + } + } + } + + /** + * Helper function to accept a gameobject which will transform the plane + * approprietly before the slice occurs + * See -> Slice(Mesh, Plane) for more info + */ + public static SlicedHull Slice(GameObject obj, Plane pl, TextureRegion crossRegion, Material crossMaterial) { + + // cannot continue without a proper filter + if (!obj.TryGetComponent(out var filter)) { + Debug.LogWarning("EzySlice::Slice -> Provided GameObject must have a MeshFilter Component."); + + return null; + } + + + // cannot continue without a proper renderer + if (!obj.TryGetComponent(out var renderer)) { + Debug.LogWarning("EzySlice::Slice -> Provided GameObject must have a MeshRenderer Component."); + + return null; + } + + Material[] materials = renderer.sharedMaterials; + + Mesh mesh = filter.sharedMesh; + + // cannot slice a mesh that doesn't exist + if (mesh == null) { + Debug.LogWarning("EzySlice::Slice -> Provided GameObject must have a Mesh that is not NULL."); + + return null; + } + + int submeshCount = mesh.subMeshCount; + + // to make things straightforward, exit without slicing if the materials and mesh + // array don't match. This shouldn't happen anyway + if (materials.Length != submeshCount) { + Debug.LogWarning("EzySlice::Slice -> Provided Material array must match the length of submeshes."); + + return null; + } + + // we need to find the index of the material for the cross section. + // default to the end of the array + int crossIndex = materials.Length; + + // for cases where the sliced material is null, we will append the cross section to the end + // of the submesh array, this is because the application may want to set/change the material + // after slicing has occured, so we don't assume anything + if (crossMaterial != null) { + for (int i = 0; i < crossIndex; i++) { + if (materials[i] == crossMaterial) { + crossIndex = i; + break; + } + } + } + + return Slice(mesh, pl, crossRegion, crossIndex); + } + + /** + * Slice the gameobject mesh (if any) using the Plane, which will generate + * a maximum of 2 other Meshes. + * This function will recalculate new UV coordinates to ensure textures are applied + * properly. + * Returns null if no intersection has been found or the GameObject does not contain + * a valid mesh to cut. + */ + public static SlicedHull Slice(Mesh sharedMesh, Plane pl, TextureRegion region, int crossIndex) { + if (sharedMesh == null) { + return null; + } + + Vector3[] verts = sharedMesh.vertices; + Vector2[] uv = sharedMesh.uv; + Vector3[] norm = sharedMesh.normals; + Vector4[] tan = sharedMesh.tangents; + + int submeshCount = sharedMesh.subMeshCount; + + // each submesh will be sliced and placed in its own array structure + SlicedSubmesh[] slices = new SlicedSubmesh[submeshCount]; + // the cross section hull is common across all submeshes + List crossHull = new List(); + + // we reuse this object for all intersection tests + IntersectionResult result = new IntersectionResult(); + + // see if we would like to split the mesh using uv, normals and tangents + bool genUV = verts.Length == uv.Length; + bool genNorm = verts.Length == norm.Length; + bool genTan = verts.Length == tan.Length; + + // iterate over all the submeshes individually. vertices and indices + // are all shared within the submesh + for (int submesh = 0; submesh < submeshCount; submesh++) { + int[] indices = sharedMesh.GetTriangles(submesh); + int indicesCount = indices.Length; + + SlicedSubmesh mesh = new SlicedSubmesh(); + + // loop through all the mesh vertices, generating upper and lower hulls + // and all intersection points + for (int index = 0; index < indicesCount; index += 3) { + int i0 = indices[index + 0]; + int i1 = indices[index + 1]; + int i2 = indices[index + 2]; + + Triangle newTri = new Triangle(verts[i0], verts[i1], verts[i2]); + + // generate UV if available + if (genUV) { + newTri.SetUV(uv[i0], uv[i1], uv[i2]); + } + + // generate normals if available + if (genNorm) { + newTri.SetNormal(norm[i0], norm[i1], norm[i2]); + } + + // generate tangents if available + if (genTan) { + newTri.SetTangent(tan[i0], tan[i1], tan[i2]); + } + + // slice this particular triangle with the provided + // plane + if (newTri.Split(pl, result)) { + int upperHullCount = result.upperHullCount; + int lowerHullCount = result.lowerHullCount; + int interHullCount = result.intersectionPointCount; + + for (int i = 0; i < upperHullCount; i++) { + mesh.upperHull.Add(result.upperHull[i]); + } + + for (int i = 0; i < lowerHullCount; i++) { + mesh.lowerHull.Add(result.lowerHull[i]); + } + + for (int i = 0; i < interHullCount; i++) { + crossHull.Add(result.intersectionPoints[i]); + } + } else { + SideOfPlane sa = pl.SideOf(verts[i0]); + SideOfPlane sb = pl.SideOf(verts[i1]); + SideOfPlane sc = pl.SideOf(verts[i2]); + + SideOfPlane side = SideOfPlane.ON; + if (sa != SideOfPlane.ON) + { + side = sa; + } + + if (sb != SideOfPlane.ON) + { + Debug.Assert(side == SideOfPlane.ON || side == sb); + side = sb; + } + + if (sc != SideOfPlane.ON) + { + Debug.Assert(side == SideOfPlane.ON || side == sc); + side = sc; + } + + if (side == SideOfPlane.UP || side == SideOfPlane.ON) { + mesh.upperHull.Add(newTri); + } else { + mesh.lowerHull.Add(newTri); + } + } + } + + // register into the index + slices[submesh] = mesh; + } + + // check if slicing actually occured + for (int i = 0; i < slices.Length; i++) { + // check if at least one of the submeshes was sliced. If so, stop checking + // because we need to go through the generation step + if (slices[i] != null && slices[i].isValid) { + return CreateFrom(slices, CreateFrom(crossHull, pl.normal, region), crossIndex); + } + } + + // no slicing occured, just return null to signify + return null; + } + + /** + * Generates a single SlicedHull from a set of cut submeshes + */ + private static SlicedHull CreateFrom(SlicedSubmesh[] meshes, List cross, int crossSectionIndex) { + int submeshCount = meshes.Length; + + int upperHullCount = 0; + int lowerHullCount = 0; + + // get the total amount of upper, lower and intersection counts + for (int submesh = 0; submesh < submeshCount; submesh++) { + upperHullCount += meshes[submesh].upperHull.Count; + lowerHullCount += meshes[submesh].lowerHull.Count; + } + + Mesh upperHull = CreateUpperHull(meshes, upperHullCount, cross, crossSectionIndex); + Mesh lowerHull = CreateLowerHull(meshes, lowerHullCount, cross, crossSectionIndex); + + return new SlicedHull(upperHull, lowerHull); + } + + private static Mesh CreateUpperHull(SlicedSubmesh[] mesh, int total, List crossSection, int crossSectionIndex) { + return CreateHull(mesh, total, crossSection, crossSectionIndex, true); + } + + private static Mesh CreateLowerHull(SlicedSubmesh[] mesh, int total, List crossSection, int crossSectionIndex) { + return CreateHull(mesh, total, crossSection, crossSectionIndex, false); + } + + /** + * Generate a single Mesh HULL of either the UPPER or LOWER hulls. + */ + private static Mesh CreateHull(SlicedSubmesh[] meshes, int total, List crossSection, int crossIndex, bool isUpper) { + if (total <= 0) { + return null; + } + + int submeshCount = meshes.Length; + int crossCount = crossSection != null ? crossSection.Count : 0; + + Mesh newMesh = new Mesh(); + newMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; + + int arrayLen = (total + crossCount) * 3; + + bool hasUV = meshes[0].hasUV; + bool hasNormal = meshes[0].hasNormal; + bool hasTangent = meshes[0].hasTangent; + + // vertices and uv's are common for all submeshes + Vector3[] newVertices = new Vector3[arrayLen]; + Vector2[] newUvs = hasUV ? new Vector2[arrayLen] : null; + Vector3[] newNormals = hasNormal ? new Vector3[arrayLen] : null; + Vector4[] newTangents = hasTangent ? new Vector4[arrayLen] : null; + + // each index refers to our submesh triangles + List triangles = new List(submeshCount); + + int vIndex = 0; + + // first we generate all our vertices, uv's and triangles + for (int submesh = 0; submesh < submeshCount; submesh++) { + // pick the hull we will be playing around with + List hull = isUpper ? meshes[submesh].upperHull : meshes[submesh].lowerHull; + int hullCount = hull.Count; + + int[] indices = new int[hullCount * 3]; + + // fill our mesh arrays + for (int i = 0, triIndex = 0; i < hullCount; i++, triIndex += 3) { + Triangle newTri = hull[i]; + + int i0 = vIndex + 0; + int i1 = vIndex + 1; + int i2 = vIndex + 2; + + // add the vertices + newVertices[i0] = newTri.positionA; + newVertices[i1] = newTri.positionB; + newVertices[i2] = newTri.positionC; + + // add the UV coordinates if any + if (hasUV) { + newUvs[i0] = newTri.uvA; + newUvs[i1] = newTri.uvB; + newUvs[i2] = newTri.uvC; + } + + // add the Normals if any + if (hasNormal) { + newNormals[i0] = newTri.normalA; + newNormals[i1] = newTri.normalB; + newNormals[i2] = newTri.normalC; + } + + // add the Tangents if any + if (hasTangent) { + newTangents[i0] = newTri.tangentA; + newTangents[i1] = newTri.tangentB; + newTangents[i2] = newTri.tangentC; + } + + // triangles are returned in clocwise order from the + // intersector, no need to sort these + indices[triIndex] = i0; + indices[triIndex + 1] = i1; + indices[triIndex + 2] = i2; + + vIndex += 3; + } + + // add triangles to the index for later generation + triangles.Add(indices); + } + + // generate the cross section required for this particular hull + if (crossSection != null && crossCount > 0) { + int[] crossIndices = new int[crossCount * 3]; + + for (int i = 0, triIndex = 0; i < crossCount; i++, triIndex += 3) { + Triangle newTri = crossSection[i]; + + int i0 = vIndex + 0; + int i1 = vIndex + 1; + int i2 = vIndex + 2; + + // add the vertices + newVertices[i0] = newTri.positionA; + newVertices[i1] = newTri.positionB; + newVertices[i2] = newTri.positionC; + + // add the UV coordinates if any + if (hasUV) { + newUvs[i0] = newTri.uvA; + newUvs[i1] = newTri.uvB; + newUvs[i2] = newTri.uvC; + } + + // add the Normals if any + if (hasNormal) { + // invert the normals dependiong on upper or lower hull + if (isUpper) { + newNormals[i0] = -newTri.normalA; + newNormals[i1] = -newTri.normalB; + newNormals[i2] = -newTri.normalC; + } else { + newNormals[i0] = newTri.normalA; + newNormals[i1] = newTri.normalB; + newNormals[i2] = newTri.normalC; + } + } + + // add the Tangents if any + if (hasTangent) { + newTangents[i0] = newTri.tangentA; + newTangents[i1] = newTri.tangentB; + newTangents[i2] = newTri.tangentC; + } + + // add triangles in clockwise for upper + // and reversed for lower hulls, to ensure the mesh + // is facing the right direction + if (isUpper) { + crossIndices[triIndex] = i0; + crossIndices[triIndex + 1] = i1; + crossIndices[triIndex + 2] = i2; + } else { + crossIndices[triIndex] = i0; + crossIndices[triIndex + 1] = i2; + crossIndices[triIndex + 2] = i1; + } + + vIndex += 3; + } + + // add triangles to the index for later generation + if (triangles.Count <= crossIndex) { + triangles.Add(crossIndices); + } else { + // otherwise, we need to merge the triangles for the provided subsection + int[] prevTriangles = triangles[crossIndex]; + int[] merged = new int[prevTriangles.Length + crossIndices.Length]; + + System.Array.Copy(prevTriangles, merged, prevTriangles.Length); + System.Array.Copy(crossIndices, 0, merged, prevTriangles.Length, crossIndices.Length); + + // replace the previous array with the new merged array + triangles[crossIndex] = merged; + } + } + + int totalTriangles = triangles.Count; + + newMesh.subMeshCount = totalTriangles; + // fill the mesh structure + newMesh.vertices = newVertices; + + if (hasUV) { + newMesh.uv = newUvs; + } + + if (hasNormal) { + newMesh.normals = newNormals; + } + + if (hasTangent) { + newMesh.tangents = newTangents; + } + + // add the submeshes + for (int i = 0; i < totalTriangles; i++) { + newMesh.SetTriangles(triangles[i], i, false); + } + + return newMesh; + } + + /** + * Generate Two Meshes (an upper and lower) cross section from a set of intersection + * points and a plane normal. Intersection Points do not have to be in order. + */ + private static List CreateFrom(List intPoints, Vector3 planeNormal, TextureRegion region) { + return Triangulator.MonotoneChain(intPoints, planeNormal, out List tris, region) ? tris : null; + } + } +} diff --git a/Viagg-io/Assets/EzySlice/Slicer.cs.meta b/Viagg-io/Assets/EzySlice/Slicer.cs.meta new file mode 100644 index 0000000..1453b08 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/Slicer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13ba410a4bbab5f40ae5b40d911f65e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/EzySlice/SlicerExtensions.cs b/Viagg-io/Assets/EzySlice/SlicerExtensions.cs new file mode 100644 index 0000000..40dade5 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/SlicerExtensions.cs @@ -0,0 +1,98 @@ +using System.Collections; +using UnityEngine; + +namespace EzySlice { + /** + * Define Extension methods for easy access to slicer functionality + */ + public static class SlicerExtensions { + + /** + * SlicedHull Return functions and appropriate overrides! + */ + public static SlicedHull Slice(this GameObject obj, Plane pl, Material crossSectionMaterial = null) { + return Slice(obj, pl, new TextureRegion(0.0f, 0.0f, 1.0f, 1.0f), crossSectionMaterial); + } + + public static SlicedHull Slice(this GameObject obj, Vector3 position, Vector3 direction, Material crossSectionMaterial = null) { + return Slice(obj, position, direction, new TextureRegion(0.0f, 0.0f, 1.0f, 1.0f), crossSectionMaterial); + } + + public static SlicedHull Slice(this GameObject obj, Vector3 position, Vector3 direction, TextureRegion textureRegion, Material crossSectionMaterial = null) { + Plane cuttingPlane = new Plane(); + + Matrix4x4 mat = obj.transform.worldToLocalMatrix; + Matrix4x4 transpose = mat.transpose; + Matrix4x4 inv = transpose.inverse; + + Vector3 refUp = inv.MultiplyVector(direction).normalized; + Vector3 refPt = obj.transform.InverseTransformPoint(position); + + cuttingPlane.Compute(refPt, refUp); + + return Slice(obj, cuttingPlane, textureRegion, crossSectionMaterial); + } + + public static SlicedHull Slice(this GameObject obj, Plane pl, TextureRegion textureRegion, Material crossSectionMaterial = null) { + return Slicer.Slice(obj, pl, textureRegion, crossSectionMaterial); + } + + /** + * These functions (and overrides) will return the final indtaniated GameObjects types + */ + public static GameObject[] SliceInstantiate(this GameObject obj, Plane pl) { + return SliceInstantiate(obj, pl, new TextureRegion(0.0f, 0.0f, 1.0f, 1.0f)); + } + + public static GameObject[] SliceInstantiate(this GameObject obj, Vector3 position, Vector3 direction) { + return SliceInstantiate(obj, position, direction, null); + } + + public static GameObject[] SliceInstantiate(this GameObject obj, Vector3 position, Vector3 direction, Material crossSectionMat) { + return SliceInstantiate(obj, position, direction, new TextureRegion(0.0f, 0.0f, 1.0f, 1.0f), crossSectionMat); + } + + public static GameObject[] SliceInstantiate(this GameObject obj, Vector3 position, Vector3 direction, TextureRegion cuttingRegion, Material crossSectionMaterial = null) { + EzySlice.Plane cuttingPlane = new EzySlice.Plane(); + + Matrix4x4 mat = obj.transform.worldToLocalMatrix; + Matrix4x4 transpose = mat.transpose; + Matrix4x4 inv = transpose.inverse; + + Vector3 refUp = inv.MultiplyVector(direction).normalized; + Vector3 refPt = obj.transform.InverseTransformPoint(position); + + cuttingPlane.Compute(refPt, refUp); + + return SliceInstantiate(obj, cuttingPlane, cuttingRegion, crossSectionMaterial); + } + + public static GameObject[] SliceInstantiate(this GameObject obj, Plane pl, TextureRegion cuttingRegion, Material crossSectionMaterial = null) { + SlicedHull slice = Slicer.Slice(obj, pl, cuttingRegion, crossSectionMaterial); + + if (slice == null) { + return null; + } + + GameObject upperHull = slice.CreateUpperHull(obj, crossSectionMaterial); + GameObject lowerHull = slice.CreateLowerHull(obj, crossSectionMaterial); + + if (upperHull != null && lowerHull != null) { + return new GameObject[] { upperHull, lowerHull }; + } + + // otherwise return only the upper hull + if (upperHull != null) { + return new GameObject[] { upperHull }; + } + + // otherwise return only the lower hull + if (lowerHull != null) { + return new GameObject[] { lowerHull }; + } + + // nothing to return, so return nothing! + return null; + } + } +} \ No newline at end of file diff --git a/Viagg-io/Assets/EzySlice/SlicerExtensions.cs.meta b/Viagg-io/Assets/EzySlice/SlicerExtensions.cs.meta new file mode 100644 index 0000000..07408e4 --- /dev/null +++ b/Viagg-io/Assets/EzySlice/SlicerExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2aa5e11ceb30cee49873e7144bfe9f3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/Materials/zwiebel-schnitt.mat b/Viagg-io/Assets/Materials/zwiebel-schnitt.mat new file mode 100644 index 0000000..c95a3f5 --- /dev/null +++ b/Viagg-io/Assets/Materials/zwiebel-schnitt.mat @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: zwiebel-schnitt + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _METALLICSPECGLOSSMAP + - _NORMALMAP + - _OCCLUSIONMAP + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 0141417cc0f438f4aa81e55237061c24, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: e3d2439187ac5414d9376865da854cbd, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 0141417cc0f438f4aa81e55237061c24, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 62ce778d655532b45876660f0ed892aa, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 588367c3b2c68e140ba00cf67664efb9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 0.099 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] +--- !u!114 &4099119872254075129 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 7 diff --git a/Viagg-io/Assets/Materials/zwiebel-schnitt.mat.meta b/Viagg-io/Assets/Materials/zwiebel-schnitt.mat.meta new file mode 100644 index 0000000..ad1e32c --- /dev/null +++ b/Viagg-io/Assets/Materials/zwiebel-schnitt.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d836bc61ec5c2a84da0f49adf376387b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/Models/kuechen-messer.fbx b/Viagg-io/Assets/Models/kuechen-messer.fbx index 1a7a2ec..28aff99 100644 Binary files a/Viagg-io/Assets/Models/kuechen-messer.fbx and b/Viagg-io/Assets/Models/kuechen-messer.fbx differ diff --git a/Viagg-io/Assets/Models/textures/zwiebel-scheibe-AO.jpg b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-AO.jpg new file mode 100644 index 0000000..2b2be32 Binary files /dev/null and b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-AO.jpg differ diff --git a/Viagg-io/Assets/Models/textures/zwiebel-scheibe-AO.jpg.meta b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-AO.jpg.meta new file mode 100644 index 0000000..281c107 --- /dev/null +++ b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-AO.jpg.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: e0e07c613800a994f884cc039cb32efb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/Models/textures/zwiebel-scheibe-COL.jpg b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-COL.jpg new file mode 100644 index 0000000..b689665 Binary files /dev/null and b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-COL.jpg differ diff --git a/Viagg-io/Assets/Models/textures/zwiebel-scheibe-COL.jpg.meta b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-COL.jpg.meta new file mode 100644 index 0000000..412dd9e --- /dev/null +++ b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-COL.jpg.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 0141417cc0f438f4aa81e55237061c24 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/Models/textures/zwiebel-scheibe-DISP.jpg b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-DISP.jpg new file mode 100644 index 0000000..6469fcd Binary files /dev/null and b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-DISP.jpg differ diff --git a/Viagg-io/Assets/Models/textures/zwiebel-scheibe-DISP.jpg.meta b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-DISP.jpg.meta new file mode 100644 index 0000000..63feb82 --- /dev/null +++ b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-DISP.jpg.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 62ce778d655532b45876660f0ed892aa +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/Models/textures/zwiebel-scheibe-NRM.png b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-NRM.png new file mode 100644 index 0000000..a43fdfc Binary files /dev/null and b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-NRM.png differ diff --git a/Viagg-io/Assets/Models/textures/zwiebel-scheibe-NRM.png.meta b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-NRM.png.meta new file mode 100644 index 0000000..37c8741 --- /dev/null +++ b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-NRM.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: e3d2439187ac5414d9376865da854cbd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/Models/textures/zwiebel-scheibe-SPEC.jpg b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-SPEC.jpg new file mode 100644 index 0000000..c4bbe7f Binary files /dev/null and b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-SPEC.jpg differ diff --git a/Viagg-io/Assets/Models/textures/zwiebel-scheibe-SPEC.jpg.meta b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-SPEC.jpg.meta new file mode 100644 index 0000000..a410c07 --- /dev/null +++ b/Viagg-io/Assets/Models/textures/zwiebel-scheibe-SPEC.jpg.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 588367c3b2c68e140ba00cf67664efb9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/Models/zwiebel.fbx b/Viagg-io/Assets/Models/zwiebel.fbx new file mode 100644 index 0000000..3a579dd Binary files /dev/null and b/Viagg-io/Assets/Models/zwiebel.fbx differ diff --git a/Viagg-io/Assets/Models/zwiebel.fbx.meta b/Viagg-io/Assets/Models/zwiebel.fbx.meta new file mode 100644 index 0000000..81038a0 --- /dev/null +++ b/Viagg-io/Assets/Models/zwiebel.fbx.meta @@ -0,0 +1,109 @@ +fileFormatVersion: 2 +guid: 322de01edb9291b40a11a1f107e103f3 +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 0 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 0 + importLights: 0 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 0 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 1 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/Prefabs/SLICER.prefab b/Viagg-io/Assets/Prefabs/SLICER.prefab new file mode 100644 index 0000000..7704f21 --- /dev/null +++ b/Viagg-io/Assets/Prefabs/SLICER.prefab @@ -0,0 +1,187 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1653137244195470799 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4797053843176458419} + - component: {fileID: 7847246246979866612} + m_Layer: 0 + m_Name: EndSlicePoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4797053843176458419 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1653137244195470799} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.986, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6595717377508706284} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7847246246979866612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1653137244195470799} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 673f498ebe78c194bb2839733c76162d, type: 3} + m_Name: + m_EditorClassIdentifier: + velocityAverageFrames: 5 + angularVelocityAverageFrames: 11 + estimateOnAwake: 1 +--- !u!1 &8707846834899939724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6595717377508706284} + - component: {fileID: 7367947057494957466} + - component: {fileID: 6006041040245795681} + - component: {fileID: 5892123566144746309} + m_Layer: 0 + m_Name: SLICER + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6595717377508706284 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8707846834899939724} + serializedVersion: 2 + m_LocalRotation: {x: -0.4300735, y: -0.67607594, z: 0.5766167, w: -0.15959759} + m_LocalPosition: {x: 0.4287, y: 1.455, z: -0.1371} + m_LocalScale: {x: 0.0038861688, y: 0.6478304, z: 0.05000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1187245186378064293} + - {fileID: 4797053843176458419} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 66.484, y: 224.603, z: -264.982} +--- !u!33 &7367947057494957466 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8707846834899939724} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6006041040245795681 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8707846834899939724} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &5892123566144746309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8707846834899939724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e1a9ccd4390731943a96583ba3f9c2ae, type: 3} + m_Name: + m_EditorClassIdentifier: + startSlicePoint: {fileID: 1187245186378064293} + endSlicePoint: {fileID: 4797053843176458419} + velocityEstimator: {fileID: 7847246246979866612} + sliceableLayer: + serializedVersion: 2 + m_Bits: 0 + crossSectionMaterial: {fileID: 2100000, guid: d836bc61ec5c2a84da0f49adf376387b, type: 2} + cutForce: 0.1 + explosionRadius: 0.1 +--- !u!1 &8858832164636870518 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1187245186378064293} + m_Layer: 0 + m_Name: StartSlicePoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1187245186378064293 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8858832164636870518} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: -0.61, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6595717377508706284} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Viagg-io/Assets/Prefabs/SLICER.prefab.meta b/Viagg-io/Assets/Prefabs/SLICER.prefab.meta new file mode 100644 index 0000000..27de838 --- /dev/null +++ b/Viagg-io/Assets/Prefabs/SLICER.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0543f302c06d484409214869cfff2926 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/Prefabs/_INTERACTABLES/GO.INTERACTABLES.Zwiebel01.prefab b/Viagg-io/Assets/Prefabs/_INTERACTABLES/GO.INTERACTABLES.Zwiebel01.prefab index 9e8bc7b..9a7102f 100644 --- a/Viagg-io/Assets/Prefabs/_INTERACTABLES/GO.INTERACTABLES.Zwiebel01.prefab +++ b/Viagg-io/Assets/Prefabs/_INTERACTABLES/GO.INTERACTABLES.Zwiebel01.prefab @@ -305,7 +305,7 @@ MonoBehaviour: m_EditorClassIdentifier: handlers: - {fileID: 2946996761546732454} - roomId: INTERACTABLES + roomId: uniqueId: --- !u!114 &2946996761546732454 MonoBehaviour: @@ -356,7 +356,7 @@ GameObject: - component: {fileID: 5639322406150571411} - component: {fileID: 3327915248895267331} m_Layer: 0 - m_Name: StudioEventEmitter.INTERACTABLES.ZwiebelSchneiden + m_Name: StudioEventEmitter.GO.FMODAudio m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -422,7 +422,7 @@ MonoBehaviour: m_EditorClassIdentifier: handlers: - {fileID: 3327915248895267331} - roomId: INTERACTABLES + roomId: GO uniqueId: --- !u!114 &3327915248895267331 MonoBehaviour: @@ -439,7 +439,7 @@ MonoBehaviour: showHelpText: 0 fadeInTime: 1.5 fadeOutTime: 1.5 - studioEventEmitter: {fileID: 0} + studioEventEmitter: {fileID: 1055821320529178695} objName: FMODAudio --- !u!1 &7488236864262452632 GameObject: @@ -454,7 +454,7 @@ GameObject: - component: {fileID: 2302638293541951205} - component: {fileID: 6062656772719201672} m_Layer: 0 - m_Name: Collider.INTERACTABLES.ZwiebelTrigger + m_Name: Collider.GO.ZwiebelTrigger m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -510,7 +510,7 @@ MonoBehaviour: m_EditorClassIdentifier: handlers: - {fileID: 6062656772719201672} - roomId: INTERACTABLES + roomId: GO uniqueId: --- !u!114 &6062656772719201672 MonoBehaviour: diff --git a/Viagg-io/Assets/Prefabs/_INTERACTABLES/kuechen-messer-interactable.prefab b/Viagg-io/Assets/Prefabs/_INTERACTABLES/kuechen-messer-interactable.prefab index c836a47..98c8366 100644 --- a/Viagg-io/Assets/Prefabs/_INTERACTABLES/kuechen-messer-interactable.prefab +++ b/Viagg-io/Assets/Prefabs/_INTERACTABLES/kuechen-messer-interactable.prefab @@ -16,6 +16,7 @@ GameObject: - component: {fileID: 1374902286040942640} - component: {fileID: 5737243587521899355} - component: {fileID: 9120077753276778447} + - component: {fileID: 8999830825315463649} m_Layer: 0 m_Name: kuechen-messer-interactable m_TagString: Messer @@ -35,7 +36,8 @@ Transform: m_LocalPosition: {x: -7.1685014, y: 0.9762856, z: -15.908104} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 7855412107151690486} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 90, y: 8.92, z: 0} --- !u!33 &6049220393283913801 @@ -96,7 +98,7 @@ Rigidbody: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6551068394713259692} serializedVersion: 4 - m_Mass: 0.2 + m_Mass: 0.1 m_Drag: 0 m_AngularDrag: 0.05 m_CenterOfMass: {x: 0, y: 0, z: 0} @@ -329,3 +331,142 @@ MonoBehaviour: Data3: 1297989280 Data4: 1516590243 Path: "event:/Grotto.K\xFCche/Grotto.K\xFCche.Messer_greifen" +--- !u!65 &8999830825315463649 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6551068394713259692} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 0.23141281, y: 0.028339146, z: 0.008675949} + m_Center: {x: 0.07521524, y: 0.0000009626407, z: 0.00000012930768} +--- !u!1001 &3930716356505455898 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 3790325749217278681} + m_Modifications: + - target: {fileID: 1187245186378064293, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalPosition.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1187245186378064293, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalPosition.y + value: 0.213 + objectReference: {fileID: 0} + - target: {fileID: 5892123566144746309, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: velocityEstimator + value: + objectReference: {fileID: 8250021927708824052} + - target: {fileID: 5892123566144746309, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: sliceableLayer.m_Bits + value: 64 + objectReference: {fileID: 0} + - target: {fileID: 6006041040245795681, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalScale.x + value: 0.0038861684 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalScale.y + value: 0.18765052 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalScale.z + value: 0.05 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalRotation.w + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalRotation.x + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalRotation.y + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -90 + objectReference: {fileID: 0} + - target: {fileID: 8707846834899939724, guid: 0543f302c06d484409214869cfff2926, type: 3} + propertyPath: m_Name + value: SLICER + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 7847246246979866612, guid: 0543f302c06d484409214869cfff2926, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 8707846834899939724, guid: 0543f302c06d484409214869cfff2926, type: 3} + insertIndex: -1 + addedObject: {fileID: 8250021927708824052} + m_SourcePrefab: {fileID: 100100000, guid: 0543f302c06d484409214869cfff2926, type: 3} +--- !u!1 &5644357493190245526 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8707846834899939724, guid: 0543f302c06d484409214869cfff2926, type: 3} + m_PrefabInstance: {fileID: 3930716356505455898} + m_PrefabAsset: {fileID: 0} +--- !u!114 &8250021927708824052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5644357493190245526} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 673f498ebe78c194bb2839733c76162d, type: 3} + m_Name: + m_EditorClassIdentifier: + velocityAverageFrames: 5 + angularVelocityAverageFrames: 11 + estimateOnAwake: 1 +--- !u!4 &7855412107151690486 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 6595717377508706284, guid: 0543f302c06d484409214869cfff2926, type: 3} + m_PrefabInstance: {fileID: 3930716356505455898} + m_PrefabAsset: {fileID: 0} diff --git a/Viagg-io/Assets/Resources/BuildDateTime.txt b/Viagg-io/Assets/Resources/BuildDateTime.txt index 99a0fa7..94e88e7 100644 --- a/Viagg-io/Assets/Resources/BuildDateTime.txt +++ b/Viagg-io/Assets/Resources/BuildDateTime.txt @@ -1 +1 @@ -2025-02-06T06:28:40.9426791Z \ No newline at end of file +2025-02-06T13:16:11.9857731Z \ No newline at end of file diff --git a/Viagg-io/Assets/Scenes/Test-Scene-Nick2.unity b/Viagg-io/Assets/Scenes/Test-Scene-Nick2.unity index 301b4de..cb5c9cb 100644 --- a/Viagg-io/Assets/Scenes/Test-Scene-Nick2.unity +++ b/Viagg-io/Assets/Scenes/Test-Scene-Nick2.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.12731749, g: 0.13414757, b: 0.1210787, a: 1} + m_IndirectSpecularColor: {r: 0.18028566, g: 0.2257167, b: 0.30692416, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -97,8 +97,8 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: d60226ed2450a3348bf6d1e4fe1edc30, type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: 25f9f7c45d6aa4897b0106f91b971072, type: 2} + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 20d4bdab94f1540498f09fdbb6fc7fc8, type: 2} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 @@ -123,6 +123,52 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &2164471 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2164472} + m_Layer: 0 + m_Name: Lightbake-Test + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2164472 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2164471} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12.97, y: 0.63, z: 24.64} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1966258464} + - {fileID: 1074417946} + - {fileID: 1901965399} + - {fileID: 1535390999} + - {fileID: 7486634} + - {fileID: 1046510320} + - {fileID: 1260819616} + - {fileID: 176111772} + - {fileID: 210580135} + - {fileID: 35761099} + - {fileID: 1551772503} + - {fileID: 153560546} + - {fileID: 1285686526} + - {fileID: 1715158857} + - {fileID: 1129052319} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &7486630 GameObject: m_ObjectHideFlags: 0 @@ -221,12 +267,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7486630} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 16.219002, y: -0.313, z: 24.877} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.2490015, y: -0.94299996, z: 0.23700142} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &35761095 GameObject: @@ -327,11 +373,11 @@ Transform: m_GameObject: {fileID: 35761095} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0.707107, z: -0, w: 0.7071066} - m_LocalPosition: {x: 11.964, y: -1.3037483, z: 25.511} + m_LocalPosition: {x: -1.0060005, y: -1.9337482, z: 0.8710003} m_LocalScale: {x: 0.09750447, y: 4.3930454, z: 2.3700073} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} --- !u!1 &153560542 GameObject: @@ -432,12 +478,74 @@ Transform: m_GameObject: {fileID: 153560542} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0.707107, z: -0, w: 0.7071066} - m_LocalPosition: {x: 16.449001, y: -1.3037483, z: 25.511} + m_LocalPosition: {x: 3.479001, y: -1.9337482, z: 0.8710003} m_LocalScale: {x: 0.09750447, y: 4.3930454, z: 2.3700073} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} +--- !u!1001 &172723480 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1306819312} + m_Modifications: + - target: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_LocalPosition.z + value: 0.42055768 + objectReference: {fileID: 0} + - target: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7542107555348508566, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + propertyPath: m_Name + value: metalltisch-medium + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} +--- !u!4 &172723481 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7197071544028640556, guid: a3671381973f3d6469698e86b14fb4e6, type: 3} + m_PrefabInstance: {fileID: 172723480} + m_PrefabAsset: {fileID: 0} --- !u!1 &176111768 GameObject: m_ObjectHideFlags: 0 @@ -536,12 +644,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 176111768} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 17.53, y: -1.3037483, z: 24.452} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.5600004, y: -1.9337482, z: -0.18799973} m_LocalScale: {x: 0.09750447, y: 4.3930454, z: 2.3700073} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &210580131 GameObject: @@ -641,13 +749,102 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 210580131} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 10.837, y: -1.3037483, z: 24.452} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -2.1330004, y: -1.9337482, z: -0.18799973} m_LocalScale: {x: 0.09750447, y: 4.3930454, z: 2.3700073} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &525486063 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1411211491892426069, guid: e110616730f54534ebfe11f886ddd125, type: 3} + m_PrefabInstance: {fileID: 1209334677} + m_PrefabAsset: {fileID: 0} +--- !u!4 &525486064 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + m_PrefabInstance: {fileID: 1209334677} + m_PrefabAsset: {fileID: 0} +--- !u!114 &525486065 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 525486063} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da7b7bcbb7784731bdc815f98ddc707, type: 3} + m_Name: + m_EditorClassIdentifier: + soundRef: + Guid: + Data1: 1003824257 + Data2: 1215408897 + Data3: -1659934317 + Data4: 1868026503 + Path: "event:/Grotto.K\xFCche/Grotto.K\xFCche.Pilze_fallenlassen" + minVelocity: 0.1 + specialTags: [] + specialSounds: [] +--- !u!1001 &683135965 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2636888980393329576, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2636888980393329576, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2636888980393329576, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2636888980393329576, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2636888980393329576, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2636888980393329576, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2636888980393329576, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2636888980393329576, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2636888980393329576, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2636888980393329576, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8460820077378228755, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} + propertyPath: m_Name + value: _HANDMENU + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 90dfe96f41d164a3081b56f73f4214e4, type: 3} --- !u!1 &1046510316 GameObject: m_ObjectHideFlags: 0 @@ -746,12 +943,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1046510316} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 13.045, y: -1.3037483, z: 24.452} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.07499981, y: -1.9337482, z: -0.18799973} m_LocalScale: {x: 0.09750447, y: 4.3930454, z: 2.3700073} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1074417942 GameObject: @@ -852,32 +1049,160 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1074417942} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 14.02, y: -3.3259299, z: 25.47} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.0500002, y: -3.9559298, z: 0.8299999} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1109976516 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1306819312} + m_Modifications: + - target: {fileID: 1411211491892426069, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_Name + value: GO.INTERACTABLES.Zwiebel01 + objectReference: {fileID: 0} + - target: {fileID: 1411211491892426069, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 2174748784882261985, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 2788786100456756080, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 3197269418977793585, guid: 322de01edb9291b40a11a1f107e103f3, type: 3} + - target: {fileID: 4224025085123992641, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: soundRef.Path + value: "event:/Grotto.K\xFCche/Grotto.K\xFCche.Zwiebeln_greifen" + objectReference: {fileID: 0} + - target: {fileID: 4224025085123992641, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: soundRef.Guid.Data1 + value: 727379719 + objectReference: {fileID: 0} + - target: {fileID: 4224025085123992641, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: soundRef.Guid.Data2 + value: 1176548952 + objectReference: {fileID: 0} + - target: {fileID: 4224025085123992641, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: soundRef.Guid.Data3 + value: -1434721901 + objectReference: {fileID: 0} + - target: {fileID: 4224025085123992641, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: soundRef.Guid.Data4 + value: -2058478987 + objectReference: {fileID: 0} + - target: {fileID: 7488236864262452632, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalPosition.x + value: -0.0354 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalPosition.y + value: 1.0117 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalPosition.z + value: 0.27655768 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8053333 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalRotation.x + value: -0.0058271894 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalRotation.y + value: 0.5600512 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalRotation.z + value: 0.19428557 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -13.121 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 67.505 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 18.338 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 1411211491892426069, guid: e110616730f54534ebfe11f886ddd125, type: 3} + insertIndex: -1 + addedObject: {fileID: 1109976519} + m_SourcePrefab: {fileID: 100100000, guid: e110616730f54534ebfe11f886ddd125, type: 3} +--- !u!4 &1109976517 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + m_PrefabInstance: {fileID: 1109976516} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1109976518 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1411211491892426069, guid: e110616730f54534ebfe11f886ddd125, type: 3} + m_PrefabInstance: {fileID: 1109976516} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1109976519 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1109976518} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da7b7bcbb7784731bdc815f98ddc707, type: 3} + m_Name: + m_EditorClassIdentifier: + soundRef: + Guid: + Data1: 1003824257 + Data2: 1215408897 + Data3: -1659934317 + Data4: 1868026503 + Path: "event:/Grotto.K\xFCche/Grotto.K\xFCche.Pilze_fallenlassen" + minVelocity: 0.1 + specialTags: [] + specialSounds: [] --- !u!1001 &1129052318 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: serializedVersion: 3 - m_TransformParent: {fileID: 0} + m_TransformParent: {fileID: 2164472} m_Modifications: - target: {fileID: 7033016062537324500, guid: 0b1757d535e0fed4f885ff9623f341c5, type: 3} propertyPath: m_LocalPosition.x - value: 12.97 + value: 0 objectReference: {fileID: 0} - target: {fileID: 7033016062537324500, guid: 0b1757d535e0fed4f885ff9623f341c5, type: 3} propertyPath: m_LocalPosition.y - value: 0.63 + value: 0 objectReference: {fileID: 0} - target: {fileID: 7033016062537324500, guid: 0b1757d535e0fed4f885ff9623f341c5, type: 3} propertyPath: m_LocalPosition.z - value: 24.64 + value: 0 objectReference: {fileID: 0} - target: {fileID: 7033016062537324500, guid: 0b1757d535e0fed4f885ff9623f341c5, type: 3} propertyPath: m_LocalRotation.w @@ -916,6 +1241,235 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0b1757d535e0fed4f885ff9623f341c5, type: 3} +--- !u!4 &1129052319 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7033016062537324500, guid: 0b1757d535e0fed4f885ff9623f341c5, type: 3} + m_PrefabInstance: {fileID: 1129052318} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1205626824 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1205626827} + - component: {fileID: 1205626825} + - component: {fileID: 1205626826} + m_Layer: 10 + m_Name: Main Camera no-post-processing + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &1205626825 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1205626824} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.01 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1024 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!114 &1205626826 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1205626824} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 1 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + quality: 3 + frameInfluence: 0.1 + jitterScale: 1 + mipBias: 0 + varianceClampScale: 0.9 + contrastAdaptiveSharpening: 0 +--- !u!4 &1205626827 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1205626824} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1283953199} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1209334677 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1306819312} + m_Modifications: + - target: {fileID: 1411211491892426069, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_Name + value: GO.INTERACTABLES.Zwiebel01 (1) + objectReference: {fileID: 0} + - target: {fileID: 1411211491892426069, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 2174748784882261985, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 2788786100456756080, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 3197269418977793585, guid: 322de01edb9291b40a11a1f107e103f3, type: 3} + - target: {fileID: 4224025085123992641, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: soundRef.Path + value: "event:/Grotto.K\xFCche/Grotto.K\xFCche.Zwiebeln_greifen" + objectReference: {fileID: 0} + - target: {fileID: 4224025085123992641, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: soundRef.Guid.Data1 + value: 727379719 + objectReference: {fileID: 0} + - target: {fileID: 4224025085123992641, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: soundRef.Guid.Data2 + value: 1176548952 + objectReference: {fileID: 0} + - target: {fileID: 4224025085123992641, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: soundRef.Guid.Data3 + value: -1434721901 + objectReference: {fileID: 0} + - target: {fileID: 4224025085123992641, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: soundRef.Guid.Data4 + value: -2058478987 + objectReference: {fileID: 0} + - target: {fileID: 7488236864262452632, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalPosition.x + value: -0.0942 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalPosition.y + value: 1.0096 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalPosition.z + value: 0.3802 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8989948 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalRotation.x + value: -0.11591384 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalRotation.y + value: -0.37400606 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalRotation.z + value: -0.19619349 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -20.804 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -42.121 + objectReference: {fileID: 0} + - target: {fileID: 9066956891784087354, guid: e110616730f54534ebfe11f886ddd125, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -16.535 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 1411211491892426069, guid: e110616730f54534ebfe11f886ddd125, type: 3} + insertIndex: -1 + addedObject: {fileID: 525486065} + m_SourcePrefab: {fileID: 100100000, guid: e110616730f54534ebfe11f886ddd125, type: 3} --- !u!1 &1232024848 GameObject: m_ObjectHideFlags: 0 @@ -926,7 +1480,6 @@ GameObject: m_Component: - component: {fileID: 1232024851} - component: {fileID: 1232024850} - - component: {fileID: 1232024849} - component: {fileID: 1232024852} m_Layer: 0 m_Name: Main Camera @@ -934,15 +1487,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1232024849 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1232024848} - m_Enabled: 1 + m_IsActive: 0 --- !u!20 &1232024850 Camera: m_ObjectHideFlags: 0 @@ -1151,13 +1696,90 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1260819612} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 15.28, y: -1.3037483, z: 24.452} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.3099995, y: -1.9337482, z: -0.18799973} m_LocalScale: {x: 0.09750447, y: 4.3930454, z: 2.3700073} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1283953198 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 865075385244835223, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_Name + value: XR Interaction Hands Setup + objectReference: {fileID: 0} + - target: {fileID: 4115462782746444515, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_Cameras.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4115462782746444515, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_RenderPostProcessing + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4115462782746444515, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_Cameras.Array.data[0] + value: + objectReference: {fileID: 1205626825} + - target: {fileID: 5773256366622995465, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5773256366622995465, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5773256366622995465, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5773256366622995465, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5773256366622995465, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5773256366622995465, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5773256366622995465, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5773256366622995465, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5773256366622995465, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5773256366622995465, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 7990873191231833676, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + insertIndex: -1 + addedObject: {fileID: 1205626827} + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} +--- !u!4 &1283953199 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7990873191231833676, guid: 5eccbf4be2c00e94689ee8062e4e7276, type: 3} + m_PrefabInstance: {fileID: 1283953198} + m_PrefabAsset: {fileID: 0} --- !u!1 &1285686522 GameObject: m_ObjectHideFlags: 0 @@ -1257,12 +1879,49 @@ Transform: m_GameObject: {fileID: 1285686522} serializedVersion: 2 m_LocalRotation: {x: -0.5000005, y: -0.49999985, z: 0.5000002, w: 0.49999952} - m_LocalPosition: {x: 14.3127, y: 0.6988, z: 24.494} + m_LocalPosition: {x: 1.3427, y: 0.06880003, z: -0.14599991} m_LocalScale: {x: 0.09750447, y: 2.3700073, z: 6.779406} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: -90, z: 90} +--- !u!1 &1306819311 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1306819312} + m_Layer: 0 + m_Name: Zwiebelhacken-Test + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1306819312 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306819311} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1375175053} + - {fileID: 172723481} + - {fileID: 1109976517} + - {fileID: 525486064} + - {fileID: 730653249333030648} + - {fileID: 1870777873} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1375175049 GameObject: m_ObjectHideFlags: 0 @@ -1276,7 +1935,7 @@ GameObject: - component: {fileID: 1375175051} - component: {fileID: 1375175050} m_Layer: 0 - m_Name: Plane (1) + m_Name: Floor m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1363,11 +2022,11 @@ Transform: m_GameObject: {fileID: 1375175049} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1.9965, y: -1.28, z: -2.39} - m_LocalScale: {x: 2.2716978, y: 1, z: 1.0668} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1306819312} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1535390995 GameObject: @@ -1467,12 +2126,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1535390995} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 13.969, y: -0.31299996, z: 24.877} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.9989996, y: -0.94299996, z: 0.23700142} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1551772499 GameObject: @@ -1573,13 +2232,13 @@ Transform: m_GameObject: {fileID: 1551772499} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0.707107, z: -0, w: 0.7071066} - m_LocalPosition: {x: 14.198999, y: -1.3037483, z: 25.511} + m_LocalPosition: {x: 1.2289991, y: -1.9337482, z: 0.8710003} m_LocalScale: {x: 0.09750447, y: 4.3930454, z: 2.3700073} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: -90, z: 0} ---- !u!1001 &1715158856 +--- !u!1001 &1604719693 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 @@ -1587,17 +2246,74 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 8590858290235895146, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_Name + value: flasche-wein-interactable + objectReference: {fileID: 0} + - target: {fileID: 8967525258236704720, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_LocalPosition.x + value: 0.0037181452 + objectReference: {fileID: 0} + - target: {fileID: 8967525258236704720, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_LocalPosition.y + value: 0.96776164 + objectReference: {fileID: 0} + - target: {fileID: 8967525258236704720, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_LocalPosition.z + value: 0.47179466 + objectReference: {fileID: 0} + - target: {fileID: 8967525258236704720, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_LocalRotation.w + value: 0.6883567 + objectReference: {fileID: 0} + - target: {fileID: 8967525258236704720, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_LocalRotation.x + value: -0.68835706 + objectReference: {fileID: 0} + - target: {fileID: 8967525258236704720, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_LocalRotation.y + value: 0.16175547 + objectReference: {fileID: 0} + - target: {fileID: 8967525258236704720, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_LocalRotation.z + value: 0.1617552 + objectReference: {fileID: 0} + - target: {fileID: 8967525258236704720, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -90 + objectReference: {fileID: 0} + - target: {fileID: 8967525258236704720, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8967525258236704720, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 386.448 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cf58afbc067025d43bd83f5cf06983b7, type: 3} +--- !u!1001 &1715158856 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 2164472} + m_Modifications: - target: {fileID: 2371603136669831299, guid: 58f0a7610f8723747b5f98756b19e9ae, type: 3} propertyPath: m_LocalPosition.x - value: 14.699654 + value: 1.7296534 objectReference: {fileID: 0} - target: {fileID: 2371603136669831299, guid: 58f0a7610f8723747b5f98756b19e9ae, type: 3} propertyPath: m_LocalPosition.y - value: -3.32593 + value: -3.9559302 objectReference: {fileID: 0} - target: {fileID: 2371603136669831299, guid: 58f0a7610f8723747b5f98756b19e9ae, type: 3} propertyPath: m_LocalPosition.z - value: 24.504822 + value: -0.13517761 objectReference: {fileID: 0} - target: {fileID: 2371603136669831299, guid: 58f0a7610f8723747b5f98756b19e9ae, type: 3} propertyPath: m_LocalRotation.w @@ -1636,6 +2352,115 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 58f0a7610f8723747b5f98756b19e9ae, type: 3} +--- !u!4 &1715158857 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2371603136669831299, guid: 58f0a7610f8723747b5f98756b19e9ae, type: 3} + m_PrefabInstance: {fileID: 1715158856} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1870777872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1306819312} + m_Modifications: + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Size.x + value: 0.23141281 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Size.y + value: 0.008675939 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Size.z + value: 0.028339151 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Center.x + value: 0.075215235 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Center.y + value: -0.000000005512079 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Center.z + value: -0.0054913913 + objectReference: {fileID: 0} + - target: {fileID: 2341214452150333653, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalPosition.x + value: 0.2103 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalPosition.y + value: 1.0069 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalPosition.z + value: 0.2832 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalRotation.w + value: 0.07057489 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalRotation.x + value: -0.6771546 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalRotation.y + value: -0.18915093 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalRotation.z + value: -0.7076035 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -21.301 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 89.301 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -189.657 + objectReference: {fileID: 0} + - target: {fileID: 5511369489501850220, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 5644357493190245526, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 6551068394713259692, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Name + value: kuechen-messer-interactable (1) + objectReference: {fileID: 0} + - target: {fileID: 6551068394713259692, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 8999830825315463649, guid: b8514376509742a48868e77b15272f8b, type: 3} + - {fileID: 8250021927708824052, guid: b8514376509742a48868e77b15272f8b, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: b8514376509742a48868e77b15272f8b, type: 3} +--- !u!4 &1870777873 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + m_PrefabInstance: {fileID: 1870777872} + m_PrefabAsset: {fileID: 0} --- !u!1 &1901965395 GameObject: m_ObjectHideFlags: 0 @@ -1734,12 +2559,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1901965395} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 11.734, y: -0.31299996, z: 24.877} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.2360001, y: -0.94299996, z: 0.23700142} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1966258462 GameObject: @@ -1758,7 +2583,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!108 &1966258463 Light: m_ObjectHideFlags: 0 @@ -1830,11 +2655,11 @@ Transform: m_GameObject: {fileID: 1966258462} serializedVersion: 2 m_LocalRotation: {x: 0.3312032, y: -0.56295097, z: 0.26250833, w: 0.7102676} - m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalPosition: {x: -12.97, y: 2.37, z: -24.64} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 2164472} m_LocalEulerAnglesHint: {x: 50, y: -76.8, z: 0} --- !u!114 &1966258465 MonoBehaviour: @@ -1859,24 +2684,129 @@ MonoBehaviour: m_LightCookieSize: {x: 1, y: 1} m_LightCookieOffset: {x: 0, y: 0} m_SoftShadowQuality: 0 +--- !u!4 &730653249333030648 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + m_PrefabInstance: {fileID: 6027283578800302077} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &6027283578800302077 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1306819312} + m_Modifications: + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Size.x + value: 0.23141281 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Size.y + value: 0.008675939 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Size.z + value: 0.028339151 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Center.x + value: 0.075215235 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Center.y + value: -0.000000005512079 + objectReference: {fileID: 0} + - target: {fileID: 1374902286040942640, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Center.z + value: -0.0054913913 + objectReference: {fileID: 0} + - target: {fileID: 2341214452150333653, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalPosition.x + value: 0.1089 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalPosition.y + value: 1.0225 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalPosition.z + value: 0.191 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalRotation.w + value: 0.37576407 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalRotation.x + value: -0.3757641 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalRotation.y + value: -0.59900045 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalRotation.z + value: -0.5990002 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -90 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3790325749217278681, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -115.798 + objectReference: {fileID: 0} + - target: {fileID: 5203741717155041290, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_UseGravity + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5511369489501850220, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 5644357493190245526, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 6551068394713259692, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Name + value: kuechen-messer-interactable + objectReference: {fileID: 0} + - target: {fileID: 6551068394713259692, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 7337783479261193851, guid: b8514376509742a48868e77b15272f8b, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: + - {fileID: 8999830825315463649, guid: b8514376509742a48868e77b15272f8b, type: 3} + - {fileID: 8250021927708824052, guid: b8514376509742a48868e77b15272f8b, type: 3} + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: b8514376509742a48868e77b15272f8b, type: 3} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 m_Roots: - {fileID: 1232024851} - - {fileID: 1966258464} - - {fileID: 1074417946} - - {fileID: 1901965399} - - {fileID: 1535390999} - - {fileID: 7486634} - - {fileID: 1046510320} - - {fileID: 1260819616} - - {fileID: 1375175053} - - {fileID: 176111772} - - {fileID: 210580135} - - {fileID: 35761099} - - {fileID: 1551772503} - - {fileID: 153560546} - - {fileID: 1285686526} - - {fileID: 1715158856} - - {fileID: 1129052318} + - {fileID: 2164472} + - {fileID: 1306819312} + - {fileID: 1283953198} + - {fileID: 683135965} + - {fileID: 1604719693} diff --git a/Viagg-io/Assets/Scenes/Test-Scene-Nick2/Test-Scene-Nick2-LightingSettings.lighting b/Viagg-io/Assets/Scenes/Test-Scene-Nick2/Test-Scene-Nick2-LightingSettings.lighting new file mode 100644 index 0000000..fa608aa --- /dev/null +++ b/Viagg-io/Assets/Scenes/Test-Scene-Nick2/Test-Scene-Nick2-LightingSettings.lighting @@ -0,0 +1,66 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Test-Scene-Nick2-LightingSettings + serializedVersion: 6 + m_GIWorkflowMode: 1 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 256 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 1 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_PVRTiledBaking: 0 + m_NumRaysToShootPerTexel: -1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Viagg-io/Assets/Scenes/Test-Scene-Nick2/Test-Scene-Nick2-LightingSettings.lighting.meta b/Viagg-io/Assets/Scenes/Test-Scene-Nick2/Test-Scene-Nick2-LightingSettings.lighting.meta new file mode 100644 index 0000000..e6b842f --- /dev/null +++ b/Viagg-io/Assets/Scenes/Test-Scene-Nick2/Test-Scene-Nick2-LightingSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 20d4bdab94f1540498f09fdbb6fc7fc8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/Assets/Scripts/SliceObjectsVR.cs b/Viagg-io/Assets/Scripts/SliceObjectsVR.cs new file mode 100644 index 0000000..0e2547c --- /dev/null +++ b/Viagg-io/Assets/Scripts/SliceObjectsVR.cs @@ -0,0 +1,84 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using EzySlice; +using UnityEngine.InputSystem; +using UnityEngine.XR.Interaction.Toolkit; + +public class SliceObjectsVR : MonoBehaviour +{ + public Transform startSlicePoint; + public Transform endSlicePoint; + public LayerMask sliceableLayer; + public Material crossSectionMaterial; + public float cutForce = 0.1f; + public float explosionRadius = 0.1f; + + private Vector3 lastSlicerPosition; // Letzte Position von SLICER + private Vector3 slicerVelocity; // Berechnete Geschwindigkeit von SLICER + + void Start() + { + lastSlicerPosition = transform.position; // Startposition speichern + } + + void FixedUpdate() + { + // Berechnung der Geschwindigkeit von SLICER + slicerVelocity = (transform.position - lastSlicerPosition) / Time.fixedDeltaTime; + lastSlicerPosition = transform.position; + + // Debugging: Prüfen, ob die Velocity sinnvoll ist + //Debug.Log($"SLICER Velocity: {slicerVelocity}, Magnitude: {slicerVelocity.magnitude}"); + + // Prüfen, ob ein schneidbares Objekt getroffen wird + bool hasHit = Physics.Linecast(startSlicePoint.position, endSlicePoint.position, out RaycastHit hit, sliceableLayer); + if (hasHit) + { + GameObject target = hit.transform.gameObject; + Slice(target); + } + } + + public void Slice(GameObject target) + { + //Debug.Log("Slice Function active: " + target.name); + + // Normalenvektor für die Schnittebene berechnen + Vector3 planeNormal = Vector3.Cross(endSlicePoint.position - startSlicePoint.position, slicerVelocity); + planeNormal.Normalize(); + + //Debug.Log($"Direction: {planeNormal}, Magnitude: {planeNormal.magnitude}"); + //Debug.Log($"Velocity: {slicerVelocity}, Magnitude: {slicerVelocity.magnitude}"); + + // Prüfen, ob das Objekt geschnitten werden kann + SlicedHull hull = target.Slice(endSlicePoint.position, planeNormal); + + if (hull != null) + { + //Debug.Log("Hull isn't empty"); + + GameObject upperHull = hull.CreateUpperHull(target, crossSectionMaterial); + SetupSlicedComponent(upperHull); + + GameObject lowerHull = hull.CreateLowerHull(target, crossSectionMaterial); + SetupSlicedComponent(lowerHull); + + Destroy(target); + } + } + + public void SetupSlicedComponent(GameObject slicedObject) + { + //Debug.Log("New object created"); + Rigidbody rb = slicedObject.AddComponent(); //add Rigidbody + MeshCollider collider = slicedObject.AddComponent(); //add Meshcolider + collider.convex = true; //make Collider convex + rb.AddExplosionForce(cutForce, slicedObject.transform.position, explosionRadius); //add force for realistic behaviour + slicedObject.layer = 6; // 6 = "sliceableLayer" + slicedObject.AddComponent(); //add grabbable Script + slicedObject.AddComponent(); //add BT-Controller + slicedObject.AddComponent(); //add grab sound + slicedObject.AddComponent(); //add collision sound + } +} diff --git a/Viagg-io/Assets/Scripts/SliceObjectsVR.cs.meta b/Viagg-io/Assets/Scripts/SliceObjectsVR.cs.meta new file mode 100644 index 0000000..ebffc83 --- /dev/null +++ b/Viagg-io/Assets/Scripts/SliceObjectsVR.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1a9ccd4390731943a96583ba3f9c2ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Viagg-io/ProjectSettings/DynamicsManager.asset b/Viagg-io/ProjectSettings/DynamicsManager.asset index dde9e04..9278a20 100644 --- a/Viagg-io/ProjectSettings/DynamicsManager.asset +++ b/Viagg-io/ProjectSettings/DynamicsManager.asset @@ -3,7 +3,7 @@ --- !u!55 &1 PhysicsManager: m_ObjectHideFlags: 0 - serializedVersion: 13 + serializedVersion: 14 m_Gravity: {x: 0, y: -9.81, z: 0} m_DefaultMaterial: {fileID: 0} m_BounceThreshold: 2 @@ -18,10 +18,11 @@ PhysicsManager: m_ClothInterCollisionDistance: 0 m_ClothInterCollisionStiffness: 0 m_ContactsGeneration: 1 - m_LayerCollisionMatrix: ffffffffffffffffdffffffffffffffffffffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - m_AutoSimulation: 1 + m_LayerCollisionMatrix: ffffffffffffffffdffffffffffffffffffffffffbffffff7fffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_SimulationMode: 0 m_AutoSyncTransforms: 1 m_ReuseCollisionCallbacks: 1 + m_InvokeCollisionCallbacks: 1 m_ClothInterCollisionSettingsToggle: 0 m_ClothGravity: {x: 0, y: -9.81, z: 0} m_ContactPairsMode: 0 diff --git a/Viagg-io/ProjectSettings/EditorBuildSettings.asset b/Viagg-io/ProjectSettings/EditorBuildSettings.asset index 9a313a8..a68c238 100644 --- a/Viagg-io/ProjectSettings/EditorBuildSettings.asset +++ b/Viagg-io/ProjectSettings/EditorBuildSettings.asset @@ -5,8 +5,12 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: - - enabled: 1 + - enabled: 0 path: Assets/Scenes/Test-Scene-Nick.unity guid: 3b4a6e5db0165e344b220fcfbfe68836 + - enabled: 1 + path: Assets/Scenes/Test-Scene-Nick2.unity + guid: 86afdeefd7cdf934d9c4db691f96a878 m_configObjects: + Unity.XR.Oculus.Settings: {fileID: 11400000, guid: bfa1182bd221b4ca89619141f66f1260, type: 2} com.unity.xr.openxr.settings4: {fileID: 11400000, guid: 0f4832b23b368b643bc8a91696fbb473, type: 2} diff --git a/Viagg-io/ProjectSettings/TagManager.asset b/Viagg-io/ProjectSettings/TagManager.asset index c3a6c73..126fb3f 100644 --- a/Viagg-io/ProjectSettings/TagManager.asset +++ b/Viagg-io/ProjectSettings/TagManager.asset @@ -25,8 +25,8 @@ TagManager: - - Water - UI - - - - + - Sliceable + - Slicer - - hands - no-post-processing