private void CreateMesh() { Vector3[] vertices = CreateVertices(); Vector2[] uvs = CreateUvs(); int[] triangles = CreateTriangles(); //triangles = new int[3] { 0, 1, 2 }; Mesh mesh = new Mesh(); mesh.vertices = vertices; mesh.uv = uvs; mesh.triangles = triangles; GameObject terrain = new GameObject("Terrain", typeof(MeshFilter), typeof(MeshRenderer)); terrain.transform.localScale = new Vector3(1, 1, 1); terrain.transform.position = new Vector3(0, 0, 1); terrain.GetComponent <MeshFilter>().mesh = mesh; terrain.GetComponent <MeshRenderer>().material = material; terrain.GetComponent <MeshRenderer>().sortingLayerName = "foreground"; ColliderCreator colliderCreator = terrain.AddComponent <ColliderCreator>(); }
public override void OnInspectorGUI() { DrawDefaultInspector(); ColliderCreator cc = target as ColliderCreator; if (GUILayout.Button("create collider")) { cc.Start(); } }
private void OnCollisionEnter2D(Collision2D collision) { ColliderCreator colliderCreator = collision.gameObject.GetComponent<ColliderCreator>(); Platform platform = collision.gameObject.GetComponent<Platform>(); Vector2 normal = collision.contacts[0].normal; bool isGameOver = false; if (colliderCreator != null && normal == Vector2.up) { isGameOver = true; } else if (platform) { leavesParticle.transform.position = platform.transform.position; leavesParticle.GetComponent<ParticleSystem>().Play(); platform.GetComponent<Animator>().SetTrigger("isCollidingApple"); if (normal != Vector2.up) { isGameOver = true; } } else if (!colliderCreator && !platform) { SpriteRenderer renderer = collision.gameObject.GetComponent<SpriteRenderer>(); Vector3 woodenPlankPos = collision.gameObject.transform.position; Vector3 particleInitPos = new Vector3(woodenPlankPos.x + renderer.bounds.extents.x, woodenPlankPos.y - renderer.bounds.extents.y, -1); GameObject particle = (GameObject) Instantiate(woodParticle, particleInitPos, Quaternion.identity); ParticleSystem particleSystem = particle.GetComponent<ParticleSystem>(); Destroy(collision.gameObject); Destroy(particle, particleSystem.startLifetime + particleSystem.duration); GameManager.points++; } if (isGameOver) { GameManager.GameOver(); } else { _direction = Vector3.Reflect(_direction, collision.contacts[0].normal); _direction.Normalize(); } }
// Use this for initialization void Start() { MeshCreator meshCreator = new MeshCreator(); ColliderCreator colliderCreator = new ColliderCreator(); for (int i = 0; i < 10; ++i) { Vector3 pos = new Vector3(i * 4.0f, 0.0f, 10.0f); Quaternion rot = Quaternion.AngleAxis(Random.value * 360, Vector3.up); Vector3 size = Vector3.one + Vector3.up * i * 0.2f; meshCreator.Add(prefab, pos, rot, size); colliderCreator.Add(prefab, pos, rot, size); } meshCreator.Generate(this.transform, 150, SortFunc); colliderCreator.Generate(this.transform); }
public override void OnInspectorGUI() { { EditorGUILayout.BeginHorizontal(); MyGUI.TextFieldWithTitle("碰撞区域名称", colliderName); if (MyGUI.Button("根据Renderer生成碰撞区域")) { foreach (var item in targets) { ColliderCreator itriggerDelegate = item as ColliderCreator; GameObject gameObject = itriggerDelegate.gameObject; Debug.Assert(gameObject != null); Bounds bounds = gameObject.GetRendererBounds(); bounds.center = new Vector3(bounds.center.x - gameObject.transform.position.x, bounds.center.y - gameObject.transform.position.y, bounds.center.z - gameObject.transform.position.z); // 创建交互区域 add by TangJian 2018/01/02 21:26:35 { float scale = 1f; GameObject interactObject = gameObject.GetChild(colliderName, true); interactObject.transform.localScale = new Vector3(1, 1, 1) * scale; interactObject.transform.localPosition = Vector3.zero; interactObject.transform.localEulerAngles = Vector3.zero; interactObject.layer = LayerMask.NameToLayer("Interaction"); BoxCollider boxCollider = interactObject.AddComponentUnique <BoxCollider>(); boxCollider.isTrigger = true; boxCollider.size = bounds.size; boxCollider.center = bounds.center; TriggerController triggerController = interactObject.AddComponentUnique <TriggerController>(); } } } if (MyGUI.Button("根据Collider生成碰撞区域")) { foreach (var item in targets) { ColliderCreator itriggerDelegate = item as ColliderCreator; GameObject gameObject = itriggerDelegate.gameObject; Debug.Assert(gameObject != null); Bounds bounds = gameObject.GetColliderBounds(); bounds.center = new Vector3(bounds.center.x - gameObject.transform.position.x, bounds.center.y - gameObject.transform.position.y, bounds.center.z - gameObject.transform.position.z); // 创建交互区域 add by TangJian 2018/01/02 21:26:35 { float scale = 1f; GameObject interactObject = gameObject.GetChild(colliderName, true); interactObject.transform.localScale = new Vector3(1, 1, 1) * scale; interactObject.transform.localPosition = Vector3.zero; interactObject.transform.localEulerAngles = Vector3.zero; interactObject.layer = LayerMask.NameToLayer("Interaction"); BoxCollider boxCollider = interactObject.AddComponentUnique <BoxCollider>(); boxCollider.isTrigger = true; boxCollider.size = bounds.size; boxCollider.center = bounds.center; TriggerController triggerController = interactObject.AddComponentUnique <TriggerController>(); } } } EditorGUILayout.EndHorizontal(); } DrawDefaultInspector(); }
} //Update public void CreateVehicle() { Vector3 temp_camera_pos = Camera.main.transform.position; Vector3 temp_point_pos; float temp_distance; for (var i = 0; i < vehicle_area.Count; i++) { if (Functions.HitArea(temp_camera_pos, vehicle_area[i]._position, vehicle_area[i].width + distance, vehicle_area[i].height + distance)) { int temp_procent = 1; if (create_car) {//game_sc.vehicle.Count<vehicle_max&& for (int j = 0; j < vehicle_area[i].point.Count; j++) { if (Random.Range(0, 100) < vehicle_area[i].procent / temp_procent) { temp_point_pos = vehicle_area[i].point[j]._position; temp_distance = Vector3.Distance(temp_point_pos, temp_camera_pos); if (temp_distance > distance_min_temp && temp_distance < distance) { ClassPointCar temp_near_point = new ClassPointCar(); Quaternion temp_rotation; if (!vehicle_area[i].point[j].stop) { temp_near_point = GetComponent <Patches>().point_car[vehicle_area[i].point[j].near_point[0]]; temp_rotation = Quaternion.LookRotation(temp_near_point._position - temp_point_pos); } else { temp_rotation = Quaternion.Euler(vehicle_area[i].point[j]._rotation); temp_near_point = vehicle_area[i].point[j]; } Transform temp_collider = Instantiate(_collider, temp_point_pos + new Vector3(0, 2, 0), temp_rotation) as Transform; int random_man = vehicle_area[i].man_procent[Random.Range(0, vehicle_area[i].man_procent.Count)]; ClassMan temp_man_type = info_sc.man[vehicle_area[i].man[random_man]]; ColliderCreator temp_script = temp_collider.GetComponent <ColliderCreator>(); temp_script.point = temp_near_point; temp_script.area = vehicle_area[i]; temp_script.man = temp_man_type; temp_script.info_sc = info_sc; temp_script.game_sc = game_sc; temp_script.creator_sc = this; vehicle.Add(temp_collider); } //HitAreaOut } //procent } //for } //vehicle_max //MAN if (create_man) {//man_count<man_max&& for (var j1 = 0; j1 < vehicle_area[i].point_man.Count; j1++) { ClassPointMan temp_point = vehicle_area[i].point_man[j1]; temp_procent = 1; if (Random.Range(0, 100) < vehicle_area[i].procent / temp_procent) { int random_man1 = vehicle_area[i].man_procent[Random.Range(0, vehicle_area[i].man_procent.Count)]; ClassMan temp_man_type1 = info_sc.man[vehicle_area[i].man[random_man1]]; temp_point_pos = temp_point._position; temp_distance = Vector3.Distance(temp_point_pos, temp_camera_pos); if (temp_distance > distance_min_temp && temp_distance < distance) { /* * var temp_man : Transform=Instantiate(info_sc.man_ob[temp_man_type1.man[Random.Range(0,temp_man_type1.man.Count)]]); * temp_man.position=temp_point_pos+Vector3(Random.Range(-temp_point.distance,temp_point.distance),0,Random.Range(-temp_point.distance,temp_point.distance)); * temp_man.GetComponent(sc_bot).GetThisPoint(temp_point,false);*/ Transform temp_create_man = Instantiate(create_man_ob); ManCreator temp_script1 = temp_create_man.GetComponent <ManCreator>(); temp_create_man.position = temp_point_pos + game_sc.Vector(Random.Range(-temp_point.distance, temp_point.distance), 0, Random.Range(-temp_point.distance, temp_point.distance)); //temp_script1.man=info_sc.man_ob[temp_man_type1.man[Random.Range(0,temp_man_type1.man.Count)]]; temp_script1.man = temp_man_type1; temp_script1.point = temp_point; temp_script1.info_sc = info_sc; temp_script1.game_sc = game_sc; temp_script1.game_ob = transform; temp_script1.creator_sc = this; man.Add(temp_create_man); } //distance } //procent } //for } //man_max } //HitArea } //for //Functions.HitAreaOut(temp_point_pos,temp_camera_pos,distance_min,distance_min)&&Functions.HitArea(temp_point_pos,temp_camera_pos,distance,distance) //if(distance_min_temp!=distance_min){distance_min_temp=distance_min;} Invoke("CreateVehicle", cteate_timer); }//CreateVehicle