2016-09-23 3 views
0

私はUnity3D 5を使用してTrain Simulatorを作っています。カーブしたトラックで電車のワゴンをスムーズに曲げ、まっすぐなトラックで普通に戻したいのですが、どうすればいいですか?Unity3D 5でエルミートスプラインコントローラを使用して列車ワゴンを曲げるには?

私はここで

はコードで、Hermite Spline Controller C#のバージョンを使用しています。

using UnityEngine; 
using System.Collections; 

public class BendTrain : MonoBehaviour { 

    public Transform trainwagon2; 
    public Transform trainwagon3; 
    public Transform waypoint2; 
    public Transform waypoint3; 
    public static bool t2 = false; 
    public static bool t3 = false; 

    void OnTriggerEnter (Collider col1) 
    { 

       if (col1.tag == "b2") { 
        t2=true; 
       } 


       if (col1.tag == "b3") { 
        t3=true; 
       } 
    } 

    void Update() 
    { 
     if (t2) 
     trainwagon2.transform.rotation = Quaternion.RotateTowards(trainwagon2.transform.rotation, waypoint2.rotation, 2); 

     if (t3) 
     trainwagon3.transform.rotation = Quaternion.RotateTowards(trainwagon2.transform.rotation, waypoint2.rotation, 2); 

    } 
} 

答えて

0

この私が自分でこれを行ったが、ここでこれを行う方法の基本的な考え方ではありませんが、かなりトリッキーです:湾曲した経路の始点と終点を使用して

  1. 計算距離。
  2. curve shaderを使用して列車オブジェクトをそれに応じて曲げます。
  3. オブジェクトがカーブパスにあるときにこのシェーダを適用するスクリプトを作成する必要があります。後で削除します。ここ

試料(試験せず)で開始するためのコードである:

Shader "Custom/Curved" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _QOffset ("Offset", Vector) = (0,0,0,0) _Brightness ("Brightness", Float) = 0.0 _Dist ("Distance", Float) = 100.0 } 

SubShader { 
    Tags { "Queue" = "Transparent"} 
    Pass 
    { 

     Blend SrcAlpha OneMinusSrcAlpha 
     CGPROGRAM 
     #pragma vertex vert 
     #pragma fragment frag 
     #include "UnityCG.cginc" 


     sampler2D _MainTex; 
     float4 _QOffset; 
     float _Dist; 
     float _Brightness; 

     struct v2f { 
      float4 pos : SV_POSITION; 
      float4 uv : TEXCOORD0; 
      float3 viewDir : TEXCOORD1; 
      fixed4 color : COLOR; 
     }; 
     v2f vert (appdata_full v) 
     { 
      v2f o; 
      float4 vPos = mul (UNITY_MATRIX_MV, v.vertex); 
      float zOff = vPos.z/_Dist; 
      vPos += _QOffset*zOff*zOff; 
      o.pos = mul (UNITY_MATRIX_P, vPos); 
      o.uv = v.texcoord; 
      return o; 
     } 
     half4 frag (v2f i) : COLOR0 
     { 
       half4 col = tex2D(_MainTex, i.uv.xy); 
       col *= UNITY_LIGHTMODEL_AMBIENT*_Brightness; 
      return col; 
     } 
     ENDCG 
    } 
} 

FallBack "Diffuse" 

参照:

https://alastaira.wordpress.com/2013/10/25/animal-crossing-curved-world-shader/

http://forum.unity3d.com/threads/problem-with-bending-terrain-shader.229605/

https://alastaira.wordpress.com/2013/10/25/animal-crossing-curved-world-shader/

http://answers.unity3d.com/questions/288835/how-to-make-plane-look-curved.html

これはあなたにヒントを与えることを望みます。

関連する問題