Ejemplo n.º 1
0
    // Use this for initialization
    void Start()
    {
        animator    = GetComponent <Animator>();
        rigid       = GetComponent <Rigidbody>();
        IsJumping   = false;
        isAttacking = false;
        isDefencing = false;

        MoveSpeed = 10;
        jumpCnt   = 2;

        playerInfo = FindObjectOfType <PlayerInfo>();
        sword.GetComponent <MeshCollider>();
        currentClipInfo = this.animator.GetCurrentAnimatorClipInfo(0);
    }
Ejemplo n.º 2
0
 // Update is called once per frame
 void Update()
 {
     if (clicked)
     {
         if (!firstTimeClick)
         {
             firstTimeClick = true;
             AudioManager.Instance.PlayButton(gameObject);
             AudioManager.Instance.PlayTowerDestruction(gameObject);
             buttonRend.material = greenButtonMat;
             buttonRend.gameObject.transform.localPosition = new Vector3(0, -0.039f, 0);
             StartCoroutine(waitfor3secondsbeforeColiderisoff(safetyPane.GetComponent <MeshCollider>()));
             gameObject.GetComponent <MeshCollider>().enabled = false;
         }
     }
 }
    void HandleInput(Event guiEvent)
    {
        if ((guiEvent.type == EventType.MouseDown || guiEvent.type == EventType.MouseDrag) && guiEvent.button == 0)
        {
            MeshFilter meshFilter = mouseOverMeshCollider.GetComponent <MeshFilter>();

            Mesh mesh = meshFilter.sharedMesh;

            string path = AssetDatabase.GetAssetPath(mesh);

            if (IsNotSaveableMesh(path))
            {
                mesh = CopyMesh(meshFilter);
            }

            Undo.RecordObject(mesh, "Change UVs");

            Vector2[] uv = new Vector2[mesh.uv.Length];

            mesh.uv.CopyTo(uv, 0);

            Vector3 quadCenter = Vector3.zero;

            for (int i = 0; i < mouseOverQuad.Length; i++)
            {
                quadCenter += mouseOverQuad[i];
            }

            quadCenter /= mouseOverQuad.Length;

            for (int i = 0; i < mouseOverQuad.Length; i++)
            {
                uv[mouseOverIndexes[i]] = GetUV(mouseOverQuad[i] - quadCenter);
            }

            mesh.uv = uv;

            if (!string.IsNullOrEmpty(path))
            {
                AssetDatabase.SaveAssets();
            }
        }

        shouldRepaint = true;
    }
Ejemplo n.º 4
0
    // Start is called before the first frame update
    void Start()
    {
        Cube = new GameObject("Steine");
        //Cube.transform.localScale = new Vector3(5, 2, 5);

        vertices = new List <Vector3>();
        faces    = new List <int>();
        normals  = new List <Vector3>();
        uvs      = new List <Vector2>();

        mesh = new Mesh();
        Cube.AddComponent <MeshFilter>();
        Cube.AddComponent <MeshRenderer>();
        Cube.GetComponent <MeshFilter>().mesh = mesh;

        ccube           = Cube.AddComponent <BoxCollider>();
        ccube.isTrigger = true;

        // Material:
        Renderer rendCube = Cube.GetComponent <Renderer>();

        rendCube.material = new Material(Shader.Find("Diffuse"));
        rendCube.material.SetTexture("_MainTex", steintextur);

        aCube = Cube.AddComponent <MeshCollider>();
        aCube.GetComponent <MeshFilter>().mesh = mesh;

        // Steine:
        createCubeOne();
        createCubeTwo();
        createCubeThree();
        createCubeFour();
        createCubeFive();
        createCubeSix();
        createCubeSeven();

        mesh.vertices  = vertices.ToArray();
        mesh.normals   = normals.ToArray();
        mesh.triangles = faces.ToArray();
        mesh.uv        = uvs.ToArray();

        // Verbinden mit Script:
        Cube.AddComponent <AM_charHolder>();
    }
Ejemplo n.º 5
0
        Material GetTriangleIndexMaterial(int triangleIndex, MeshCollider meshCollider)
        {
            // There are 3 indices stored per triangle
            int limit = triangleIndex * 3;
            int submesh;

            for (submesh = 0; submesh < meshCollider.sharedMesh.subMeshCount; submesh++)
            {
                int numIndices = meshCollider.sharedMesh.GetTriangles(submesh).Length;
                if (numIndices > limit)
                {
                    break;
                }

                limit -= numIndices;
            }

            return(meshCollider.GetComponent <MeshRenderer>().sharedMaterials[submesh]);
        }
Ejemplo n.º 6
0
 public void Triangulate(HexCell[] cells)
 {
     hexMesh.Clear();
     vertices.Clear();
     triangles.Clear();
     uvs.Clear();
     colors.Clear();
     for (int i = 0; i < cells.Length; i++)
     {
         Triangulate(cells [i]);
     }
     hexMesh.vertices  = vertices.ToArray();
     hexMesh.colors    = colors.ToArray();
     hexMesh.triangles = triangles.ToArray();
     hexMesh.uv        = uvs.ToArray();
     hexMesh.RecalculateNormals();
     meshCollider.GetComponent <MeshRenderer>().material.mainTexture = atlas;
     meshCollider.sharedMesh = hexMesh;
 }
        private Material GetNameOfHitMaterial()
        {
            if (Physics.Raycast(pos, Vector3.down, out hit))
            {
                MeshCollider collider = hit.collider as MeshCollider;
                Mesh         mesh;

                if (collider != null)
                {
                    mesh = collider.sharedMesh;

                    int limit = hit.triangleIndex * 3;
                    int submesh;

                    for (submesh = 0; submesh < mesh.subMeshCount; submesh++)
                    {
                        int numIndices = mesh.GetTriangles(submesh).Length;
                        if (numIndices > limit)
                        {
                            break;
                        }

                        limit -= numIndices;
                    }

                    return(collider.GetComponent <MeshRenderer>().sharedMaterials[submesh]);
                }
                else
                {
                    errorString = " Mesh Collider is requiered";
                    return(null);
                }
            }
            else
            {
                return(null);
            }
        }
        void OnGUI()
        {
            GUILayout.Label("Paint me baby", EditorStyles.boldLabel);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Size");
            brushSize = GUILayout.HorizontalSlider(brushSize, 0, MAX_BRUSH_SIZE);
            GUILayout.EndHorizontal();
            brushColour = EditorGUILayout.ColorField("Color", brushColour);
            brushType   = EditorGUILayout.Popup("Brush Type", brushType, new string[] { "Circle", "Square", "Rectangle", "Projected Rectangle" });

            canvas    = (MeshCollider)EditorGUILayout.ObjectField("Canvas", canvas, typeof(MeshCollider), true);
            projector = (Transform)EditorGUILayout.ObjectField("Projector", projector, typeof(Transform), true);

            Painting = GUILayout.Toggle(Painting, "Paint", "Button");

            if (GUILayout.Button("Save Texture"))
            {
                Texture2D paintedTexture = GetTextureForRenderer(canvas.GetComponent <MeshRenderer>());
                byte[]    pngData        = paintedTexture.EncodeToPNG();
                string    path           = AssetDatabase.GetAssetPath(paintedTexture);
                System.IO.File.WriteAllBytes(path, pngData);
            }
        }
Ejemplo n.º 9
0
        public static GameObject Bake(Collider theCollider)
        {
            GameObject fakeObject = null;
            string     DEFAULT_FAKEOBJECT_NAME = theCollider.gameObject.name;

            if (theCollider is BoxCollider)
            {
                #region In case col is a box
                BoxCollider baseCollider = theCollider as BoxCollider;
                fakeObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
                GameObject.DestroyImmediate(fakeObject.GetComponent <Collider>());
                fakeObject.name = DEFAULT_FAKEOBJECT_NAME;
                fakeObject.transform.rotation      = theCollider.gameObject.transform.rotation;
                fakeObject.transform.parent        = theCollider.gameObject.transform;
                fakeObject.transform.localPosition = baseCollider.center;
                fakeObject.transform.parent        = null;
                fakeObject.transform.localScale    = theCollider.gameObject.transform.lossyScale;
                Vector3 tempScale = fakeObject.transform.localScale;
                tempScale.x *= baseCollider.size.x;
                tempScale.y *= baseCollider.size.y;
                tempScale.z *= baseCollider.size.z;
                fakeObject.transform.localScale = tempScale;
                #endregion
            }
            else if (theCollider is CapsuleCollider)
            {
                #region In case col is a capsule
                CapsuleCollider baseCollider = theCollider as CapsuleCollider;
                fakeObject = GameObject.CreatePrimitive(PrimitiveType.Capsule);
                GameObject.DestroyImmediate(fakeObject.GetComponent <Collider>());
                fakeObject.name = DEFAULT_FAKEOBJECT_NAME;
                fakeObject.transform.rotation      = theCollider.gameObject.transform.rotation;
                fakeObject.transform.parent        = theCollider.gameObject.transform;
                fakeObject.transform.localPosition = baseCollider.center;
                fakeObject.transform.parent        = null;
                fakeObject.transform.localScale    = theCollider.gameObject.transform.lossyScale;
                const float DEFAULT_CAPSULE_RADIUS = 0.5f;
                const float DEFAULT_CAPSULE_HEIGHT = 2.0f;
                Vector3     tempScale = fakeObject.transform.localScale;

                // max(x,z) code
                if (Mathf.Abs(tempScale.x) > Mathf.Abs(tempScale.z))
                {
                    tempScale.z = tempScale.x;
                }
                else
                {
                    tempScale.x = tempScale.z;
                }

                tempScale.x *= baseCollider.radius / DEFAULT_CAPSULE_RADIUS;
                tempScale.z *= baseCollider.radius / DEFAULT_CAPSULE_RADIUS;
                tempScale.y *= baseCollider.height / DEFAULT_CAPSULE_HEIGHT;
                fakeObject.transform.localScale = tempScale;
                #endregion
            }
            else if (theCollider is SphereCollider)
            {
                #region In case col is a sphere
                SphereCollider baseCollider = theCollider as SphereCollider;
                fakeObject = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                GameObject.DestroyImmediate(fakeObject.GetComponent <Collider>());
                fakeObject.name = DEFAULT_FAKEOBJECT_NAME;
                fakeObject.transform.rotation      = theCollider.gameObject.transform.rotation;
                fakeObject.transform.parent        = theCollider.gameObject.transform;
                fakeObject.transform.localPosition = baseCollider.center;
                fakeObject.transform.parent        = null;
                fakeObject.transform.localScale    = theCollider.gameObject.transform.lossyScale;
                const float DEFAULT_SPHERE_RADIUS = 0.5f;
                Vector3     tempScale             = fakeObject.transform.localScale;

                // max(x,y,z) code
                if (Mathf.Abs(tempScale.x) > Mathf.Abs(tempScale.y))
                {
                    tempScale.y = tempScale.x;
                }
                else
                {
                    tempScale.x = tempScale.y;
                }
                if (Mathf.Abs(tempScale.x) > Mathf.Abs(tempScale.z))
                {
                    tempScale.z = tempScale.y = tempScale.x;
                }
                else
                {
                    tempScale.x = tempScale.y = tempScale.z;
                }

                tempScale.x *= baseCollider.radius / DEFAULT_SPHERE_RADIUS;
                tempScale.y *= baseCollider.radius / DEFAULT_SPHERE_RADIUS;
                tempScale.z *= baseCollider.radius / DEFAULT_SPHERE_RADIUS;
                fakeObject.transform.localScale = tempScale;
                #endregion
            }
            else if (theCollider is MeshCollider)
            {
                #region In case col is a mesh
                MeshCollider baseCollider = theCollider as MeshCollider;
                // to generate the MeshCollider object, the original MUST HAVE a MeshRenderer
                if (baseCollider.GetComponent <MeshRenderer>() != null)
                {
                    int materialsCount = baseCollider.GetComponent <MeshRenderer>().sharedMaterials.Length;
                    fakeObject = new GameObject(DEFAULT_FAKEOBJECT_NAME);
                    fakeObject.transform.position = theCollider.gameObject.transform.position;
                    fakeObject.transform.rotation = theCollider.gameObject.transform.rotation;
                    fakeObject.AddComponent <MeshFilter>().sharedMesh = baseCollider.sharedMesh;
                    if (diffuseDefaultMaterial == null)
                    {
                        SetDefaultMaterialReference();
                    }
                    Material[] mats = new Material[materialsCount];
                    for (int i = 0; i < mats.Length; i++)
                    {
                        mats[i] = diffuseDefaultMaterial;
                    }
                    fakeObject.AddComponent <MeshRenderer>().materials = mats;
                    fakeObject.transform.localScale = theCollider.gameObject.transform.lossyScale;
                }
                #endregion
            }

            return(fakeObject);
        }
Ejemplo n.º 10
0
        public static GameObject Bake(Collider theCollider)
        {
            GameObject fakeObject = null;
            string     DEFAULT_FAKEOBJECT_NAME = theCollider.gameObject.name;

            if (theCollider is BoxCollider)
            {
                #region In case col is a box
                BoxCollider baseCollider = theCollider as BoxCollider;
                fakeObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
                GameObject.DestroyImmediate(fakeObject.GetComponent <Collider>());
                fakeObject.name = DEFAULT_FAKEOBJECT_NAME;
                fakeObject.transform.rotation      = theCollider.gameObject.transform.rotation;
                fakeObject.transform.parent        = theCollider.gameObject.transform;
                fakeObject.transform.localPosition = baseCollider.center;
                fakeObject.transform.parent        = null;
                fakeObject.transform.localScale    = theCollider.gameObject.transform.lossyScale;
                Vector3 tempScale = fakeObject.transform.localScale;
                tempScale.x *= baseCollider.size.x;
                tempScale.y *= baseCollider.size.y;
                tempScale.z *= baseCollider.size.z;
                fakeObject.transform.localScale = tempScale;
                #endregion
            }
            else if (theCollider is CapsuleCollider)
            {
                #region In case col is a capsule
                CapsuleCollider baseCollider = theCollider as CapsuleCollider;
                fakeObject = GameObject.CreatePrimitive(PrimitiveType.Capsule);
                GameObject.DestroyImmediate(fakeObject.GetComponent <Collider>());
                fakeObject.name = DEFAULT_FAKEOBJECT_NAME;
                fakeObject.transform.rotation      = theCollider.gameObject.transform.rotation;
                fakeObject.transform.parent        = theCollider.gameObject.transform;
                fakeObject.transform.localPosition = baseCollider.center;
                fakeObject.transform.parent        = null;
                fakeObject.transform.localScale    = theCollider.gameObject.transform.lossyScale;
                const float DEFAULT_CAPSULE_RADIUS = 0.5f;
                const float DEFAULT_CAPSULE_HEIGHT = 2.0f;
                Vector3     tempScale = fakeObject.transform.localScale;

                // max(x,z) code
                if (Mathf.Abs(tempScale.x) > Mathf.Abs(tempScale.z))
                {
                    tempScale.z = tempScale.x;
                }
                else
                {
                    tempScale.x = tempScale.z;
                }

                tempScale.x *= baseCollider.radius / DEFAULT_CAPSULE_RADIUS;
                tempScale.z *= baseCollider.radius / DEFAULT_CAPSULE_RADIUS;
                tempScale.y *= baseCollider.height / DEFAULT_CAPSULE_HEIGHT;
                fakeObject.transform.localScale = tempScale;
                #endregion
            }
            else if (theCollider is SphereCollider)
            {
                #region In case col is a sphere
                SphereCollider baseCollider = theCollider as SphereCollider;
                fakeObject = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                GameObject.DestroyImmediate(fakeObject.GetComponent <Collider>());
                fakeObject.name = DEFAULT_FAKEOBJECT_NAME;
                fakeObject.transform.rotation      = theCollider.gameObject.transform.rotation;
                fakeObject.transform.parent        = theCollider.gameObject.transform;
                fakeObject.transform.localPosition = baseCollider.center;
                fakeObject.transform.parent        = null;
                fakeObject.transform.localScale    = theCollider.gameObject.transform.lossyScale;
                const float DEFAULT_SPHERE_RADIUS = 0.5f;
                Vector3     tempScale             = fakeObject.transform.localScale;

                // max(x,y,z) code
                if (Mathf.Abs(tempScale.x) > Mathf.Abs(tempScale.y))
                {
                    tempScale.y = tempScale.x;
                }
                else
                {
                    tempScale.x = tempScale.y;
                }
                if (Mathf.Abs(tempScale.x) > Mathf.Abs(tempScale.z))
                {
                    tempScale.z = tempScale.y = tempScale.x;
                }
                else
                {
                    tempScale.x = tempScale.y = tempScale.z;
                }

                tempScale.x *= baseCollider.radius / DEFAULT_SPHERE_RADIUS;
                tempScale.y *= baseCollider.radius / DEFAULT_SPHERE_RADIUS;
                tempScale.z *= baseCollider.radius / DEFAULT_SPHERE_RADIUS;
                fakeObject.transform.localScale = tempScale;
                #endregion
            }
            else if (theCollider is MeshCollider)
            {
                #region In case col is a mesh
                MeshCollider baseCollider = theCollider as MeshCollider;
                // to generate the MeshCollider object, the original MUST HAVE a MeshRenderer
                if (baseCollider.GetComponent <MeshRenderer>() != null)
                {
                    int materialsCount = baseCollider.GetComponent <MeshRenderer>().sharedMaterials.Length;
                    fakeObject = new GameObject(DEFAULT_FAKEOBJECT_NAME);
                    fakeObject.transform.position = theCollider.gameObject.transform.position;
                    fakeObject.transform.rotation = theCollider.gameObject.transform.rotation;
                    fakeObject.AddComponent <MeshFilter>().sharedMesh = baseCollider.sharedMesh;
                    if (diffuseDefaultMaterial == null)
                    {
                        SetDefaultMaterialReference();
                    }
                    Material[] mats = new Material[materialsCount];
                    for (int i = 0; i < mats.Length; i++)
                    {
                        mats[i] = diffuseDefaultMaterial;
                    }
                    fakeObject.AddComponent <MeshRenderer>().materials = mats;
                    fakeObject.transform.localScale = theCollider.gameObject.transform.lossyScale;
                }
                #endregion
            }

            if (fakeObject != null)
            {
                var mr = fakeObject.GetComponent <MeshRenderer>();
                if (mr != null)
                {
                    mr.receiveShadows            = false;
                    mr.shadowCastingMode         = UnityEngine.Rendering.ShadowCastingMode.Off;
                    mr.allowOcclusionWhenDynamic = false;
                    mr.lightProbeUsage           = UnityEngine.Rendering.LightProbeUsage.Off;
                    mr.lightmapIndex             = -1;
                    mr.realtimeLightmapIndex     = -1;
                    // mr.rendererPriority = int.MaxValue;
                    mr.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion;

                    UnityEditor.SerializedObject so = new UnityEditor.SerializedObject(mr);
                    so.FindProperty("m_ScaleInLightmap").floatValue = 0;
                    so.ApplyModifiedProperties();


                    //if (UnityEditor.GameObjectUtility.AreStaticEditorFlagsSet(mr.gameObject, UnityEditor.StaticEditorFlags.LightmapStatic))
                    //{
                    //    Debug.Log("Static Lightmap!");
                    //}
                }
            }
            return(fakeObject);
        }
Ejemplo n.º 11
0
        public override void SafeAwake()
        {
            base.SafeAwake();
#if DEBUG
            Debug.Log("SafeAwake");
#endif


            #region 获取组件

            MF          = GetComponentsInChildren <MeshFilter>().ToList().Find(match => match.name == "Vis");
            MR          = GetComponentsInChildren <MeshRenderer>().ToList().Find(match => match.name == "Vis");
            MC          = GetComponentsInChildren <MeshCollider>().ToList().Find(match => match.name == "MeshCollider");
            SC          = GetComponentsInChildren <SphereCollider>().ToList().Find(match => match.name == "SphereCollider");
            MR.material = new Material(Shader.Find("Diffuse"));
            MC_MR       = MC.GetComponent <MeshRenderer>();
            CJ          = GetComponent <ConfigurableJoint>();
            RB          = GetComponent <Rigidbody>();


            #endregion

            #region 初始化组件

            //功能页组件
            PageMenu = AddMenu("Page", 0, EnumToStringList.Convert <PageMenuList>());
            PageMenu.ValueChanged += (int value) => { DisplayInMapper(); };

            //基础功能组件
            //硬度 尺寸决定质量 质量组件
            HardnessMenu = AddMenu("Hardness", Hardness, new List <string>()
            {
                "无碳钢", "低碳钢", "中碳钢", "高碳钢"
            });
            HardnessMenu.ValueChanged  += (int value) => { Hardness = value; ChangedHardness(); };
            MassFormSizeToggle          = AddToggle("尺寸决定质量", "MassFormSize", MassFormSize);
            MassFormSizeToggle.Toggled += (bool value) => { MassFormSize = value; };
            MassSlider = AddSlider("质量", "Mass", Mass, 0.2f, 2f);
            MassSlider.ValueChanged += (float value) => { Mass = value; };
            DragSlider = AddSlider("阻力", "Drag", Drag, 0f, 2f);
            DragSlider.ValueChanged += (float value) => { Drag = value; };

            //碰撞设置
            ColliderMenu = AddMenu("Collider", 0, MeshBlockMod.NRF.MeshNames);
            ColliderMenu.ValueChanged          += ChangedCollider;
            DisplayColliderToggle               = AddToggle("碰撞可视", "DisplayCollider", false);
            DynamicFrictionSlider               = AddSlider("滑动摩擦", "DynamicFriction", 0.5f, 0f, 1f);
            StaticFrictionSlider                = AddSlider("静态摩擦", "StaticFriction", 0.5f, 0f, 1f);
            BouncynessSlider                    = AddSlider("表面弹性", "Bouncyness", 0f, 0f, 1f);
            DynamicFrictionSlider.ValueChanged += (float value) => { SC.material.dynamicFriction = MC.material.dynamicFriction = value; };
            StaticFrictionSlider.ValueChanged  += (float value) => { SC.material.staticFriction = MC.material.staticFriction = value; };
            BouncynessSlider.ValueChanged      += (float value) => { SC.material.bounciness = MC.material.bounciness = value; };

            //自定模型组件
            //旋转、位置滑条;网格、贴图、碰撞菜单;碰撞可视相关组件;
            RotationXSlider = AddSlider("旋转X轴", "RotationX", RotationX, 0f, 360f);
            RotationYSlider = AddSlider("旋转Y轴", "RotationY", RotationY, 0f, 360f);
            RotationZSlider = AddSlider("旋转Z轴", "RotationZ", RotationZ, 0f, 360f);
            RotationXSlider.ValueChanged += (float value) => { RotationX = value; ChangedRotation(); };
            RotationYSlider.ValueChanged += (float value) => { RotationY = value; ChangedRotation(); };
            RotationZSlider.ValueChanged += (float value) => { RotationZ = value; ChangedRotation(); };

            PositionXSlider = AddSlider("移动X轴", "PositionX", PositionX = MR.transform.localPosition.x, -3f, 3f);
            PositionYSlider = AddSlider("移动Y轴", "PositionY", PositionY = MR.transform.localPosition.y, -3f, 3f);
            PositionZSlider = AddSlider("移动Z轴", "PositionZ", PositionZ = MR.transform.localPosition.z, -3f, 3f);
            PositionXSlider.ValueChanged += (float value) => { PositionX = value; ChangedPosition(); };
            PositionYSlider.ValueChanged += (float value) => { PositionY = value; ChangedPosition(); };
            PositionZSlider.ValueChanged += (float value) => { PositionZ = value; ChangedPosition(); };

            MeshMenu = AddMenu("Mesh", 0, MeshBlockMod.NRF.MeshNames);
            MeshMenu.ValueChanged    += (int value) => { MF.mesh = resources[MeshBlockMod.NRF.MeshFullNames[value]].mesh; };
            TextureMenu               = AddMenu("Texture", 0, MeshBlockMod.NRF.TextureNames);
            TextureMenu.ValueChanged += (int value) => { MR.material.mainTexture = resources[MeshBlockMod.NRF.TextureFullNames[value]].texture; };


            //渲染设置
            //着色菜单;RGBA滑条相关组件
            ShaderMenu = AddMenu("Shader", 0, new List <string>()
            {
                "漫反射", "透明"
            });
            ShaderMenu.ValueChanged += (int value) => { ChangedShader(); };
            RedSlider                 = AddSlider("红色通道", "Red", 1f, 0f, 1f);
            GreenSlider               = AddSlider("绿色通道", "Green", 1f, 0f, 1f);
            BlueSlider                = AddSlider("蓝色通道", "Blue", 1f, 0f, 1f);
            AlphaSlider               = AddSlider("Alpha通道", "Alpha", 1f, 0f, 1f);
            RedSlider.ValueChanged   += (float value) => { ChangedColor(); };
            GreenSlider.ValueChanged += (float value) => { ChangedColor(); };
            BlueSlider.ValueChanged  += (float value) => { ChangedColor(); };
            AlphaSlider.ValueChanged += (float value) => { ChangedColor(); };


            #endregion

            #region 相关组件赋初值

            ChangedHardness();
            DisplayInMapper();
            RefreshVisual();
            ChangedCollider();
            ChangedPoint();

            CJ.breakForce = CJ.breakTorque = 50000;

            #endregion

            if (GetComponent <DestroyJointIfNull>() == null)
            {
                gameObject.AddComponent <DestroyJointIfNull>();
            }
        }
Ejemplo n.º 12
0
 // Start is called before the first frame update
 void Start()
 {
     player.GetComponent <Rigidbody>();
     playerCollider.GetComponent <MeshCollider>();
 }
Ejemplo n.º 13
0
    void sculpt()
    {
        if (Cursor.lockState == CursorLockMode.None)
        {
            return;
        }
        if ((Input.GetButton("Fire1") || Input.GetButton("Fire2")) && (Sthread == null || !Sthread.IsAlive))
        {
            int multi = 1;
            if (Input.GetButton("Fire2"))
            {
                multi = -1;
            }
            RaycastHit hit;
            Ray        ray = new Ray(cam.transform.position, cam.transform.forward);

            if (Physics.Raycast(ray, out hit, 30f))
            {
                if (hit.transform.parent == transform)
                {
                    Vector3 pos       = transform.InverseTransformPoint(hit.point) - hit.normal * multi;
                    Vector3 playerPos = Player.localPosition;

                    MeshCollider collider = hit.collider as MeshCollider;
                    // Remember to handle case where collider is null because you hit a non-mesh primitive...

                    Mesh mesh  = collider.sharedMesh;
                    int  limit = hit.triangleIndex * 3;
                    int  mat   = 0;
                    if (multi == -1)
                    {
                        if (materials.selected == -1)
                        {
                            for (mat = 0; mat < mesh.subMeshCount; mat++)
                            {
                                int numIndices = mesh.GetTriangles(mat).Length;
                                if (numIndices > limit)
                                {
                                    break;
                                }

                                limit -= numIndices;
                            }
                            Material material = collider.GetComponent <MeshRenderer>().sharedMaterials[mat];
                            mat = materials.materialList.IndexOf(material);
                        }
                        else
                        {
                            mat = materials.selected;
                        }
                    }
                    float t = Time.deltaTime + plusStrength;

                    Sthread = new Thread(() => GTL(sculp.sculpt(ref voxels, multi, pos, playerPos, mat, t * sculptStrength)));

                    Sthread.Start();
                    plusStrength = 0;
                }
            }
        }
        else if (Sthread != null && Sthread.IsAlive)
        {
            plusStrength += Time.deltaTime;
        }
    }