আমি কীভাবে কোনও গেম অবজেক্টের অধীনে ভূখণ্ড সমতল করব?


10

আমি একটি স্ক্রিপ্ট পেয়েছি যা একটি ভূখণ্ডের অবজেক্ট তৈরি করে এবং এটি টেক্সচার দিয়ে আঁকায়, তবে আমার একটি সমস্যা রয়েছে। যখন আমি গেম অবজেক্টগুলি স্থাপন করার চেষ্টা করি (যেমন সহজ জলের বস্তু যা unityক্য সরবরাহ করে), আমি গেমের অবজেক্ট স্থাপনের জন্য সঠিক উচ্চতা নির্ধারণের জন্য একটি রয়কাস্ট ব্যবহার করি, তবে এটি কেবল নিশ্চিত করে যে এটি সঠিকভাবে সেই নির্দিষ্ট জায়গায় স্থাপন করা হয়েছে।

গেম অবজেক্টের অধীনে ভূখণ্ডকে সমতল করার বিষয়ে আমি কীভাবে যাব যাতে এটি পাহাড়ের ক্ষেত্রে ভূখণ্ডে না যায় বা পাতলা বাতাসে ঝুলে না যায়?


3
গেম অবজেক্টের অধীনে ভূখণ্ডের ত্রিভুজ তৈরি করা সমস্ত শীর্ষবিন্দু সন্ধান করুন। এই সমস্ত উল্লম্বের y টি সমন্বয় করুন।
মাইকেলহাউস

উত্তর:


6

আমি আমার মন্তব্যে যেমন বলেছি, আপনি আপনার গেম অবজেক্টের নীচে ত্রিভুজগুলি তৈরি করে এমন সমস্ত শীর্ষকোষ খুঁজে পেতে এবং তাদের y মানকে একই মানতে সেট করতে চাইবেন।

আমি আরও বিস্তারিত পদক্ষেপ সহ আমার মন্তব্য প্রসারিত করব। আমি ityক্যের সাথে খুব বেশি পরিচিত নই, তাই কাজের জন্য ব্যবহারের সেরা সরঞ্জামগুলি আমি জানি না, তবে আমি বিশ্বাস করি যে আমি আপনাকে সঠিক পথে শুরু করতে পারি।

নিষ্ঠুর বল পদ্ধতি:

  1. আপনার গেমের অবজেক্ট থেকে সোজা নিচে রশ্মির গ্রিড কাস্ট করুন। গ্রিডটি ভূখণ্ডের পৃষ্ঠের কোনও ত্রিভুজ মিস করবে না তা নিশ্চিত করার জন্য যথেষ্ট শক্ত হওয়া উচিত।
  2. যে কোনও রশ্মি যা কিছু আঘাত করে তার জন্য আপনি এই অঞ্চলটি জাল টেরে নিম্নরূপে পেতে পারেন:

    RaycastHit hit;
    if (!Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), out hit))
        return;
    
    MeshCollider meshCollider = hit.collider as MeshCollider;
    if (meshCollider == null || meshCollider.sharedMesh == null)
        return;
    
    Mesh mesh = meshCollider.sharedMesh;
    Vector3[] vertices = mesh.vertices;
    int[] triangles = mesh.triangles;
    Vector3 p0 = vertices[triangles[hit.triangleIndex * 3 + 0]];
    Vector3 p1 = vertices[triangles[hit.triangleIndex * 3 + 1]];
    Vector3 p2 = vertices[triangles[hit.triangleIndex * 3 + 2]];
    
  3. p0, p1 এবং p2 হিট হয়েছে এমন ত্রিভুজটি তৈরি করে এমন তিনটি উল্লম্বের সমস্ত অবস্থান। আপনি একই yমান পেতে those প্রতিটি শীর্ষে অবস্থানের সমন্বয় করতে চান । আপনি হয় সমস্ত উল্লম্ব সংগ্রহ করতে পারেন, তারপরে সেগুলি একটি গড় মানতে সেট করুন yবা yআপনার গেমের অবজেক্ট স্থাপনের সময় আপনি যে প্রাথমিক পছন্দটি পেয়েছেন তা ব্যবহার করতে পারেন ।

নিখুঁতকরণ:

  • কেবলমাত্র একটি গ্রিড রশ্মি ছড়িয়ে দেওয়ার পরিবর্তে, আপনি গেমের অবজেক্ট থেকে কোনও সংঘর্ষককে ঝাপিয়ে পড়তে পারেন এবং গেম অবজেক্টের সংঘর্ষক এবং টেরেনের সংঘর্ষের জালের মধ্যে সংঘর্ষের যোগাযোগ পয়েন্টগুলি সংগ্রহ করতে পারেন। তারপরে সেই পরিচিতি পয়েন্টগুলির প্রত্যেকটির জন্য, আপনি যে শীর্ষে স্থানান্তর করতে চান তা পাওয়ার জন্য উপরের পদক্ষেপগুলি সম্পাদন করুন।

  • আপনার ভূখণ্ডটি এমনভাবে তৈরি করুন যাতে প্রতিটি শীর্ষবিন্দু xএবং zমানগুলি গ্রিডের সাথে একত্রিত হয় এবং কেবল তার মানেই পরিবর্তিত yহয়। এখন আপনি সহজেই আপনার গেমের অবজেক্টের সীমানা পেতে পারেন এবং bound সীমার মধ্যে উল্লম্বগুলির সমস্ত y মান পরিবর্তন করতে পারেন।

শেষটি অপ্টিমাইজেশন সত্যিই একটি বিকল্প পদ্ধতি যা সম্ভবত কার্যকর করা সহজ এবং মোটামুটি কার্যকর।


কি আমি ভূখণ্ড (বলতে পারেন থেকে docs.unity3d.com/Documentation/ScriptReference/Terrain.html ) বস্তু একটি TerrainCollider (হয়েছে docs.unity3d.com/Documentation/ScriptReference/... ) না MeshCollider ( docs.unity3d.com/Documentation / স্ক্রিপ্ট রেফারেন্স /… ), সুতরাং এটিতে একটি ভাগ করা মেশ সম্পত্তি নেই যা আপনি ২ য় ধাপে ব্যবহার করার চেষ্টা করছেন I আমি ধরে নিয়েছিলাম যে ভূখণ্ডের ডেটা সম্পত্তি সঞ্চয় করে এমন উচ্চতার মানচিত্রটি পরিবর্তন করতে আমার কিছু ধরণের যুক্তি প্রয়োজন need
রপিদা

আপনি এখানে যাচাই করতে পারেন: ফোরাম.িউটি3 ডটকম / থ্রেডস / Also এছাড়াও, মনে হয় টেরিটের অবজেক্টটিতে নিয়মিত জাল থাকে, সুতরাং দ্বিতীয়টিটি আপনার সেরা বাজি হতে পারে।
মাইকেলহাউস

1

এটি সাধারণত চায় যে অবজেক্টের নীচে স্থল সমতল হয় এবং এর আশেপাশের স্থলটি দ্রুত গতিতে হয়।

যদি জমিটি কোনও গ্রিড থেকে তৈরি হয় এবং বিল্ডিংটি অক্ষ-প্রান্তে থাকে তবে এটি আরও সহজ।

সাধারণ ক্ষেত্রে, আপনি বিভক্ত ত্রিভুজ ভবন অস্ত যায়, এবং তারপর সব ত্রিভুজ ভবন একই অস্ত যায় উপর ছেদচিহ্ন এর Y সেট Y , এবং তারপর একটি নির্দিষ্ট দূরত্ব হয় যার মধ্যে সব ছেদচিহ্ন জন্য মিডপয়েন্ট স্থানচ্যুতি মসৃণকরণ না তারা কোন ভবনের নিচে নয়।

আমি এই পদ্ধতিকে 3D ভূখণ্ডে রাস্তা স্থাপন করতে ব্যবহার করেছি।

মসৃণ পর্যাপ্ত জমি থাকার জন্য আপনি সাধারণত বিল্ডিংগুলির মধ্যে ন্যূনতম বিভাজন প্রয়োগ করতে চান। অথবা আপনি বসানোর আগে অস্থায়ীভাবে অ্যালগরিদমটি চালাতে পারেন এবং দেখতে পাচ্ছেন যে খাড়া হওয়ার কোনও প্রান্তটি অতিক্রম করেছে এবং যাতে ব্যবহারকারী বিল্ডিং স্থাপন করতে পারে সেখানে পুলিশিং করা যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.