質問編集履歴

3

問題の追加

2020/05/17 02:21

投稿

U_Bonche
U_Bonche

スコア19

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,15 @@
18
18
 
19
19
  ```
20
20
 
21
-
21
+ ↳解消。
22
+
23
+
24
+
25
+ ```
26
+
27
+ Assets\Editor\object2terrain.cs(1,1):error CS1056: Unexpected character"
28
+
29
+ ```
22
30
 
23
31
  ### 該当のソースコード
24
32
 

2

リンクの追加

2020/05/17 02:21

投稿

U_Bonche
U_Bonche

スコア19

test CHANGED
File without changes
test CHANGED
@@ -644,4 +644,24 @@
644
644
 
645
645
 
646
646
 
647
- Object2Terrain.csは以前はGitHubからダウンロードしていました。しかし、最近ダウンロードしようとしたらページが見つかりませんでした。
647
+ Object2Terrain.csは以前はGitHubからダウンロードしていました。しかし、最近ダウンロードしようとしたらページが見つかりませんでした。エラーばかり出たのでリンクを探したところ、[Object2Terrain.cs](https://www.mediafire.com/file/3oyvdjcjix2d3iu/Object2Terrain.cs/file)からダウンロードしました。しかし、
648
+
649
+
650
+
651
+ ```
652
+
653
+ using System.Collections
654
+
655
+ ```
656
+
657
+ を挿入しないと
658
+
659
+
660
+
661
+ ```
662
+
663
+ No MonoBehaviour
664
+
665
+ ```
666
+
667
+ のエラーメッセージが出ます。

1

前記のエラーの解消→新たなエラーの発生、内容の大幅追加

2020/05/17 02:15

投稿

U_Bonche
U_Bonche

スコア19

test CHANGED
File without changes
test CHANGED
@@ -334,7 +334,303 @@
334
334
 
335
335
  大文字小文字のミスがないか確認。⇒ミスがあった箇所は修正。ただ、まだミスがあるかもしれません。
336
336
 
337
-
337
+ -------------
338
+
339
+
340
+
341
+ ```
342
+
343
+ using System.Collections
344
+
345
+ ```
346
+
347
+ を追加しました。そしたら、『No MonoBehaviour』が消えましたが、error CS1056:『Unexpected character』が出ました。
348
+
349
+
350
+
351
+ 修正後のコードはこちらです。
352
+
353
+
354
+
355
+ ```
356
+
357
+ using UnityEngine;
358
+
359
+ using UnityEditor;
360
+
361
+ using System.Collections;
362
+
363
+
364
+
365
+ public class Object2Terrain : EditorWindow {
366
+
367
+
368
+
369
+ [MenuItem("Terrain/Object to Terrain", false, 2000)]
370
+
371
+ static void OpenWindow() => EditorWindow.GetWindow(typeof(Object2Terrain))(true);
372
+
373
+
374
+
375
+ private int resolution = 512;
376
+
377
+ private Vector3 addTerrain;
378
+
379
+ int bottomTopRadioSelected = 0;
380
+
381
+ static string[] bottomTopRadio = new string[] { "Bottom Up", "Top Down"};
382
+
383
+ private float shiftHeight = 0f;
384
+
385
+
386
+
387
+ void OnGUI () {
388
+
389
+
390
+
391
+ resolution = EditorGUILayout.IntField("Resolution", resolution);
392
+
393
+ addTerrain = EditorGUILayout.Vector3Field("Add terrain", addTerrain);
394
+
395
+ shiftHeight = EditorGUILayout.Slider("Shift height", shiftHeight, -1f, 1f);
396
+
397
+ bottomTopRadioSelected = GUILayout.SelectionGrid(bottomTopRadioSelected, bottomTopRadio, bottomTopRadio.Length, EditorStyles.radioButton);
398
+
399
+
400
+
401
+ if(GUILayout.Button("Create Terrain")){
402
+
403
+
404
+
405
+ if(Selection.activeGameObject == null){
406
+
407
+
408
+
409
+ EditorUtility.DisplayDialog("No object selected", "Please select an object.", "Ok");
410
+
411
+ return;
412
+
413
+ }
414
+
415
+
416
+
417
+ else{
418
+
419
+
420
+
421
+ CreateTerrain();
422
+
423
+ }
424
+
425
+ }
426
+
427
+ }
428
+
429
+
430
+
431
+ delegate void CleanUp();
432
+
433
+
434
+
435
+ void CreateTerrain(){
436
+
437
+
438
+
439
+ //fire up the progress bar
440
+
441
+ ShowProgressBar(1, 100);
442
+
443
+
444
+
445
+ TerrainData terrain = new TerrainData();
446
+
447
+ terrain.heightmapResolution = resolution;
448
+
449
+ GameObject terrainObject = Terrain.CreateTerrainGameObject(terrain);
450
+
451
+
452
+
453
+ Undo.RegisterCreatedObjectUndo(terrainObject, "Object to Terrain");
454
+
455
+
456
+
457
+ MeshCollider collider = Selection.activeGameObject.GetComponent<MeshCollider>();
458
+
459
+ CleanUp cleanUp = null;
460
+
461
+
462
+
463
+ //Add a collider to our source object if it does not exist.
464
+
465
+ //Otherwise raycasting doesn't work.
466
+
467
+ if(!collider){
468
+
469
+
470
+
471
+ collider = Selection.activeGameObject.AddComponent<MeshCollider>();
472
+
473
+ cleanUp = () => DestroyImmediate(collider);
474
+
475
+ }
476
+
477
+
478
+
479
+ Bounds bounds = collider.bounds;
480
+
481
+ float sizeFactor = collider.bounds.size.y / (collider.bounds.size.y + addTerrain.y);
482
+
483
+ terrain.size = collider.bounds.size + addTerrain;
484
+
485
+ bounds.size = new Vector3(terrain.size.x, collider.bounds.size.y, terrain.size.z);
486
+
487
+
488
+
489
+ // Do raycasting samples over the object to see what terrain heights should be
490
+
491
+ float[,] heights = new float[terrain.heightmapWidth, terrain.heightmapHeight];
492
+
493
+ Ray ray = new Ray(new Vector3(bounds.min.x, bounds.max.y + bounds.size.y, bounds.min.z), -Vector3.up);
494
+
495
+ RaycastHit hit = new RaycastHit();
496
+
497
+ float meshHeightInverse = 1 / bounds.size.y;
498
+
499
+ Vector3 rayOrigin = ray.origin;
500
+
501
+
502
+
503
+ int maxHeight = heights.GetLength(0);
504
+
505
+ int maxLength = heights.GetLength(1);
506
+
507
+
508
+
509
+ Vector2 stepXZ = new Vector2(bounds.size.x / maxLength, bounds.size.z / maxHeight);
510
+
511
+
512
+
513
+ for(int zCount = 0; zCount < maxHeight; zCount++){
514
+
515
+
516
+
517
+ ShowProgressBar(zCount, maxHeight);
518
+
519
+
520
+
521
+ for(int xCount = 0; xCount < maxLength; xCount++){
522
+
523
+
524
+
525
+ float height = 0.0f;
526
+
527
+
528
+
529
+ if(collider.Raycast(ray, out hit, bounds.size.y * 3)){
530
+
531
+
532
+
533
+ height = (hit.point.y - bounds.min.y) * meshHeightInverse;
534
+
535
+ height += shiftHeight;
536
+
537
+
538
+
539
+ //bottom up
540
+
541
+ if(bottomTopRadioSelected == 0){
542
+
543
+
544
+
545
+ height *= sizeFactor;
546
+
547
+ }
548
+
549
+
550
+
551
+ //clamp
552
+
553
+ if(height < 0){
554
+
555
+
556
+
557
+ height = 0;
558
+
559
+ }
560
+
561
+ }
562
+
563
+
564
+
565
+ heights[zCount, xCount] = height;
566
+
567
+ rayOrigin.x += stepXZ[0];
568
+
569
+ ray.origin = rayOrigin;
570
+
571
+ }
572
+
573
+
574
+
575
+ rayOrigin.z += stepXZ[1];
576
+
577
+ rayOrigin.x = bounds.min.x;
578
+
579
+ ray.origin = rayOrigin;
580
+
581
+ }
582
+
583
+
584
+
585
+ terrain.SetHeights(0, 0, heights);
586
+
587
+
588
+
589
+ EditorUtility.ClearProgressBar();
590
+
591
+
592
+
593
+ if(cleanUp != null){
594
+
595
+
596
+
597
+ cleanUp();
598
+
599
+ }
600
+
601
+ }
602
+
603
+
604
+
605
+ void ShowProgressBar(float progress, float maxProgress){
606
+
607
+
608
+
609
+ float p = progress / maxProgress;
610
+
611
+ EditorUtility.DisplayProgressBar("Creating Terrain...", Mathf.RoundToInt(p * 100f)+ " %", p);
612
+
613
+ }
614
+
615
+ }
616
+
617
+ ```
618
+
619
+ ---------------
620
+
621
+
622
+
623
+ あと、このようなマークが出てきまして、
624
+
625
+ ![Visual studio2017 Object2Terrain.cs 謎のマーク](eb8daba22333567e896da90410421c64.png)
626
+
627
+
628
+
629
+ 『フィールドのカプセル化(およびプロパティを使用します)』と出ます。あと、もう一つ出ていまして『フィールドのカプセル化(ただしフィールドを継続して使用します)』と出ます。
630
+
631
+ どちらを適用したらいいのか、またはどちらも適用しなくてもいいのか?教えていただけると嬉しいですしとても役に立ちます。
632
+
633
+ --------------
338
634
 
339
635
 
340
636