// 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); }
// 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; }
// 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>(); }
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]); }
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); } }
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); }
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); }
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>(); } }
// Start is called before the first frame update void Start() { player.GetComponent <Rigidbody>(); playerCollider.GetComponent <MeshCollider>(); }
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; } }