2016-09-23 11 views
0

Я делаю тренажер для поезда с использованием Unity3D 5, и я хочу плавно сгибать вагон поезда на искривленной дорожке и вернуться к нормальной траектории, как мне это сделать?Как сгибать вагон поезда с помощью контроллера сплава Hermite в 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

Надеюсь, это даст вам подсказку.

 Смежные вопросы

  • Нет связанных вопросов^_^