🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1601閲覧

Unityを使用しているゲーム(Cities: Skylines)のオブジェクト(のプレハブ?)に、パーティクルとのColliderを追加したが、反映されない。

Kamine

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2020/12/31 11:00

#概要
こんにちは。Unity関連の質問と思いましたので、こちらに書かせていただきます。
私は、現在Unityを使用しているゲーム(Cities: Skylines)において、パーティクルを使用して雪を降らせ、積雪を可能にするmod制作を行っております。
多くの方のご協力もあって、雪を降らせることはできました。
しかし、次のステップにあたる、ゲーム内の建物に積雪させることができずに、悩んでいます。
具体的には、雪のパーティクルと、ゲーム内の建物にそれぞれColliderを追加したのですが、ゲーム内の建物のColliderだけが反映されません。
雪のパーティクルのColliderにつきましては、ゲーム内でCubeを作成したところ、問題なく動作したため、問題はゲーム内の建物につけようとしたColliderだと思います。
なお、調べたところ、ゲーム内のオブジェクト原本? は弄ることができなかったため、Instantiate関数で複製したものにColliderをつけようとしています。(その後、位置や回転を調整し、Materialで透明にして、表向きは原本だけ見えるようにするつもりです)

#詳細

Unityのバージョンは5.6.6f2です。
ソースコードは以下の通りです。

C#

1using System; 2using System.Collections; 3using System.Collections.Generic; 4using ICities; 5using UnityEngine; 6using ColossalFramework; 7using ColossalFramework.IO; 8using ColossalFramework.Plugins; 9 10namespace UnlimitedAccumulateSnow 11{ 12 13 public class UASInfo : IUserMod 14 { 15 16 public string Name 17 { 18 get { return "UnlimitedAccumulateSnow"; } 19 } 20 21 public string Description 22 { 23 get { return "UnlimitedAccumulateSnow"; } 24 25 } 26 } 27 28 public class UASLoad : ILoadingExtension 29 { 30 public void OnCreated(ILoading loading) 31 { 32 33 } 34 35 public void OnLevelLoaded(LoadMode mode) 36 { 37 38 GameObject config = new GameObject(); 39 40 config.AddComponent<UASUpdate>(); 41 } 42 43 public void OnLevelUnloading() 44 { 45 46 } 47 48 public void OnReleased() 49 { 50 51 } 52 53 54 55 56 57 } 58 59 public class UASUpdate : MonoBehaviour 60 { 61 Material snowMaterial; 62 63 ParticleSystem snowParticle; 64 65 GameObject snow; 66 67 void Start() 68 { 69 GameObject originBuildings = BuildingManager.instance.m_buildings.m_buffer[13432].Info.gameObject; 70 Instantiate(originBuildings, new Vector3(-331.5078f, 500f, -592.5841f), Quaternion.identity); 71 72 originBuildings.AddComponent<MeshCollider>(); 73 MeshCollider buildingsCollider = originBuildings.GetComponent<MeshCollider>(); 74 buildingsCollider.enabled = true; 75 buildingsCollider.isTrigger = false; 76 77 78 79 80 81 82 GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); 83 cube.transform.position = new Vector3(0, 200f, 0); 84 cube.transform.localScale = new Vector3(100f, 1f, 100f); 85 cube.AddComponent<BoxCollider>(); 86 BoxCollider cubeCollider = cube.GetComponent<BoxCollider>(); 87 cubeCollider.enabled = true; 88 cubeCollider.isTrigger = false; 89 90 91 92 transform.position = new Vector3(-331.5078f, 1000f, -592.5841f); 93 94 95 snow = GameObject.CreatePrimitive(PrimitiveType.Sphere); 96 Mesh snowMesh = snow.GetComponent<MeshFilter>().sharedMesh; 97 98 99 100 Destroy(snow); 101 102 103 Shader snowShader = Shader.Find("Legacy Shaders/Diffuse"); 104 snowMaterial = snowShader == null ? null : new Material(snowShader); 105 106 snowParticle = gameObject.AddComponent<ParticleSystem>(); 107 snowParticle.Stop(); 108 ParticleSystem.MainModule mainModule = snowParticle.main; 109 ParticleSystem.ShapeModule snowShapeModule = snowParticle.shape; 110 ParticleSystem.EmissionModule snowDensity = snowParticle.emission; 111 ParticleSystem.CollisionModule snowCollision = snowParticle.collision; 112 ParticleSystemRenderer rendererModule = GetComponent<ParticleSystemRenderer>(); 113 114 snowCollision.enabled = true; 115 snowCollision.type = ParticleSystemCollisionType.World; 116 snowCollision.sendCollisionMessages = false; 117 snowCollision.quality = ParticleSystemCollisionQuality.High; 118 snowCollision.enableDynamicColliders = true; 119 120 121 ParticleSystem.MinMaxCurve snowBounce = snowCollision.bounce; 122 snowBounce.constant = 0; 123 snowCollision.bounce = snowBounce; 124 125 ParticleSystem.MinMaxCurve snowDampen = snowCollision.dampen; 126 snowDampen.constant = 1; 127 snowCollision.dampen = snowDampen; 128 129 130 131 snowDensity.rateOverTime = 100000; 132 133 snowShapeModule.radius = 1000.0f; 134 135 mainModule.startSpeed = 0.1f; 136 mainModule.startSize = 10.0f; 137 mainModule.maxParticles = 1000; 138 mainModule.gravityModifier = 0.5f; 139 mainModule.startLifetime = 300.0f; 140 141 142 snowMaterial.color = Color.white; 143 rendererModule.mesh = snowMesh; 144 rendererModule.renderMode = ParticleSystemRenderMode.Mesh; 145 rendererModule.sharedMaterial = snowMaterial; 146 } 147 148 void Update() 149 { 150 151 152 if (Input.GetMouseButtonDown(1)) 153 { 154 155 snowParticle.Play(); 156 157 158 } 159 } 160 161 void OnDestroy() 162 { 163 Destroy(snowMaterial); 164 } 165 } 166 167}

なお、UASUpdateクラス以外はCities: Skylines独自のスクリプトですので、今回はおそらく無関係だと思います。
また、BuildingManager.instance.m_buildings.m_buffer[13432].Info.gameObject;の部分が、ゲーム内の建物を】呼び出している部分です。

C#

1GameObject originBuildings = BuildingManager.instance.m_buildings.m_buffer[13432].Info.gameObject; 2 Instantiate(originBuildings, new Vector3(-331.5078f, 500f, -592.5841f), Quaternion.identity); 3 4 originBuildings.AddComponent<MeshCollider>(); 5 MeshCollider buildingsCollider = originBuildings.GetComponent<MeshCollider>(); 6 buildingsCollider.enabled = true; 7 buildingsCollider.isTrigger = false;

以上の部分で、Colliderを設定しようとしました。座標が細かいのは、無視していただければ幸いです。
スクリプトの一部を切り取ってしまうと、問題が発生するのではと思ったので、全文載せさせていただいております。
つたない質問ですが、ご回答宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

originBuildingsのInstantiate関数の前に別のGameObjectを定義することで解決しました。

投稿2020/12/31 12:23

Kamine

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問