Помогите по лучам в unity3d - Форум Игроделов
Пт, 17 Май 2024, 05:00 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Помогите по лучам в unity3d
Помогите по лучам в unity3d
folikmeo2001Дата: Вс, 28 Сен 2014, 16:38 | Сообщение # 1
Нет аватара
 
Сообщений: 28
Награды: 0
Репутация: 0
Статус: Offline
если склон сделать очень крутым и прижаться к нему у дна в плотную то луч не доходит до воды и камера не замутняется! Можите внести изменения в скрипт?
Код
using UnityEngine;
using System.Collections;

public class PlayerWater : MonoBehaviour {
   
  public GlobalFog gf;
  public float Distance = 100f;

  // Use this for initialization
  void Start () {
   
  }
   
  // Update is called once per frame
  void Update () {
    
   Ray ray = new Ray(transform.position, transform.up);
    
   RaycastHit hit;// Результат попадания луча
    
   if (Physics.Raycast (ray, out hit, Distance)) {
    if(hit.collider.name == "water") {
     gf.enabled=true;
     Global.stats = true;
      
    }
    if(hit.collider.name != "water") {
     gf.enabled=false;
     Global.stats = false;
    }
   }
   else {
    gf.enabled=false;  
    Global.stats = false;
   }
  }
}

public static class Global {
  public static bool stats;
}


Вот скрипт в котором включается эффект (шейдер). Если надо то вот)
Код
#pragma strict

@script ExecuteInEditMode
@script RequireComponent (Camera)
@script AddComponentMenu ("Standard Assets/Image Effects (Pro Only)/GlobalFog")

class GlobalFog extends PostEffectsBase {
   
  enum FogMode {
   AbsoluteYAndDistance = 0,
   AbsoluteY = 1,
   Distance = 2,
   RelativeYAndDistance = 3,
  }
   
  public var fogMode : FogMode = FogMode.AbsoluteYAndDistance;
   
  private var CAMERA_NEAR : float = 0.5f;
  private var CAMERA_FAR : float = 50.0f;
  private var CAMERA_FOV : float = 60.0f;  
  private var CAMERA_ASPECT_RATIO : float = 1.333333f;
   
  public var startDistance : float = 200.0f;
  public var globalDensity : float = 1.0f;
  public var heightScale : float = 100.0f;
  public var height : float = 0.0f;

  public var globalFogColor : Color = Color.grey;
   
  public var fogShader : Shader;
  private var fogMaterial : Material = null;  
   
  function CheckResources () : boolean {  
   CheckSupport (true);
   
   fogMaterial = CheckShaderAndCreateMaterial (fogShader, fogMaterial);
    
   if(!isSupported)
    ReportAutoDisable ();
   return isSupported;     
  }

  function OnRenderImage (source : RenderTexture, destination : RenderTexture) {  
   if(CheckResources()==false) {
    Graphics.Blit (source, destination);
    return;
   }
     
   CAMERA_NEAR = camera.nearClipPlane;
   CAMERA_FAR = camera.farClipPlane;
   CAMERA_FOV = camera.fieldOfView;
   CAMERA_ASPECT_RATIO = camera.aspect;
   
   var frustumCorners : Matrix4x4 = Matrix4x4.identity;   
   var vec : Vector4;
   var corner : Vector3;
   
   var fovWHalf : float = CAMERA_FOV * 0.5f;
    
   var toRight : Vector3 = camera.transform.right * CAMERA_NEAR * Mathf.Tan (fovWHalf * Mathf.Deg2Rad) * CAMERA_ASPECT_RATIO;
   var toTop : Vector3 = camera.transform.up * CAMERA_NEAR * Mathf.Tan (fovWHalf * Mathf.Deg2Rad);
   
   var topLeft : Vector3 = (camera.transform.forward * CAMERA_NEAR - toRight + toTop);
   var CAMERA_SCALE : float = topLeft.magnitude * CAMERA_FAR/CAMERA_NEAR;  
     
   topLeft.Normalize();
   topLeft *= CAMERA_SCALE;
   
   var topRight : Vector3 = (camera.transform.forward * CAMERA_NEAR + toRight + toTop);
   topRight.Normalize();
   topRight *= CAMERA_SCALE;
    
   var bottomRight : Vector3 = (camera.transform.forward * CAMERA_NEAR + toRight - toTop);
   bottomRight.Normalize();
   bottomRight *= CAMERA_SCALE;
    
   var bottomLeft : Vector3 = (camera.transform.forward * CAMERA_NEAR - toRight - toTop);
   bottomLeft.Normalize();
   bottomLeft *= CAMERA_SCALE;
      
   frustumCorners.SetRow (0, topLeft);  
   frustumCorners.SetRow (1, topRight);   
   frustumCorners.SetRow (2, bottomRight);
   frustumCorners.SetRow (3, bottomLeft);   
          
   fogMaterial.SetMatrix ("_FrustumCornersWS", frustumCorners);
   fogMaterial.SetVector ("_CameraWS", camera.transform.position);
   fogMaterial.SetVector ("_StartDistance", Vector4 (1.0f / startDistance, (CAMERA_SCALE-startDistance)));
   fogMaterial.SetVector ("_Y", Vector4 (height, 1.0f / heightScale));
    
   fogMaterial.SetFloat ("_GlobalDensity", globalDensity * 0.01f);
   fogMaterial.SetColor ("_FogColor", globalFogColor);
    
   CustomGraphicsBlit (source, destination, fogMaterial, fogMode);
  }
   
  static function CustomGraphicsBlit (source : RenderTexture, dest : RenderTexture, fxMaterial : Material, passNr : int) {
   RenderTexture.active = dest;
           
   fxMaterial.SetTexture ("_MainTex", source);          
                    
   GL.PushMatrix ();
   GL.LoadOrtho ();  
        
   fxMaterial.SetPass (passNr);  
    
      GL.Begin (GL.QUADS);
         
   GL.MultiTexCoord2 (0, 0.0f, 0.0f);  
   GL.Vertex3 (0.0f, 0.0f, 3.0f); // BL
    
   GL.MultiTexCoord2 (0, 1.0f, 0.0f);  
   GL.Vertex3 (1.0f, 0.0f, 2.0f); // BR
    
   GL.MultiTexCoord2 (0, 1.0f, 1.0f);  
   GL.Vertex3 (1.0f, 1.0f, 1.0f); // TR
    
   GL.MultiTexCoord2 (0, 0.0f, 1.0f);  
   GL.Vertex3 (0.0f, 1.0f, 0.0); // TL
    
   GL.End ();
      GL.PopMatrix ();
  }   
}



Добавлено (28 Сен 2014, 16:38)
---------------------------------------------
Ладно, не надо. Сделал

 
Сообщениеесли склон сделать очень крутым и прижаться к нему у дна в плотную то луч не доходит до воды и камера не замутняется! Можите внести изменения в скрипт?
Код
using UnityEngine;
using System.Collections;

public class PlayerWater : MonoBehaviour {
   
  public GlobalFog gf;
  public float Distance = 100f;

  // Use this for initialization
  void Start () {
   
  }
   
  // Update is called once per frame
  void Update () {
    
   Ray ray = new Ray(transform.position, transform.up);
    
   RaycastHit hit;// Результат попадания луча
    
   if (Physics.Raycast (ray, out hit, Distance)) {
    if(hit.collider.name == "water") {
     gf.enabled=true;
     Global.stats = true;
      
    }
    if(hit.collider.name != "water") {
     gf.enabled=false;
     Global.stats = false;
    }
   }
   else {
    gf.enabled=false;  
    Global.stats = false;
   }
  }
}

public static class Global {
  public static bool stats;
}


Вот скрипт в котором включается эффект (шейдер). Если надо то вот)
Код
#pragma strict

@script ExecuteInEditMode
@script RequireComponent (Camera)
@script AddComponentMenu ("Standard Assets/Image Effects (Pro Only)/GlobalFog")

class GlobalFog extends PostEffectsBase {
   
  enum FogMode {
   AbsoluteYAndDistance = 0,
   AbsoluteY = 1,
   Distance = 2,
   RelativeYAndDistance = 3,
  }
   
  public var fogMode : FogMode = FogMode.AbsoluteYAndDistance;
   
  private var CAMERA_NEAR : float = 0.5f;
  private var CAMERA_FAR : float = 50.0f;
  private var CAMERA_FOV : float = 60.0f;  
  private var CAMERA_ASPECT_RATIO : float = 1.333333f;
   
  public var startDistance : float = 200.0f;
  public var globalDensity : float = 1.0f;
  public var heightScale : float = 100.0f;
  public var height : float = 0.0f;

  public var globalFogColor : Color = Color.grey;
   
  public var fogShader : Shader;
  private var fogMaterial : Material = null;  
   
  function CheckResources () : boolean {  
   CheckSupport (true);
   
   fogMaterial = CheckShaderAndCreateMaterial (fogShader, fogMaterial);
    
   if(!isSupported)
    ReportAutoDisable ();
   return isSupported;     
  }

  function OnRenderImage (source : RenderTexture, destination : RenderTexture) {  
   if(CheckResources()==false) {
    Graphics.Blit (source, destination);
    return;
   }
     
   CAMERA_NEAR = camera.nearClipPlane;
   CAMERA_FAR = camera.farClipPlane;
   CAMERA_FOV = camera.fieldOfView;
   CAMERA_ASPECT_RATIO = camera.aspect;
   
   var frustumCorners : Matrix4x4 = Matrix4x4.identity;   
   var vec : Vector4;
   var corner : Vector3;
   
   var fovWHalf : float = CAMERA_FOV * 0.5f;
    
   var toRight : Vector3 = camera.transform.right * CAMERA_NEAR * Mathf.Tan (fovWHalf * Mathf.Deg2Rad) * CAMERA_ASPECT_RATIO;
   var toTop : Vector3 = camera.transform.up * CAMERA_NEAR * Mathf.Tan (fovWHalf * Mathf.Deg2Rad);
   
   var topLeft : Vector3 = (camera.transform.forward * CAMERA_NEAR - toRight + toTop);
   var CAMERA_SCALE : float = topLeft.magnitude * CAMERA_FAR/CAMERA_NEAR;  
     
   topLeft.Normalize();
   topLeft *= CAMERA_SCALE;
   
   var topRight : Vector3 = (camera.transform.forward * CAMERA_NEAR + toRight + toTop);
   topRight.Normalize();
   topRight *= CAMERA_SCALE;
    
   var bottomRight : Vector3 = (camera.transform.forward * CAMERA_NEAR + toRight - toTop);
   bottomRight.Normalize();
   bottomRight *= CAMERA_SCALE;
    
   var bottomLeft : Vector3 = (camera.transform.forward * CAMERA_NEAR - toRight - toTop);
   bottomLeft.Normalize();
   bottomLeft *= CAMERA_SCALE;
      
   frustumCorners.SetRow (0, topLeft);  
   frustumCorners.SetRow (1, topRight);   
   frustumCorners.SetRow (2, bottomRight);
   frustumCorners.SetRow (3, bottomLeft);   
          
   fogMaterial.SetMatrix ("_FrustumCornersWS", frustumCorners);
   fogMaterial.SetVector ("_CameraWS", camera.transform.position);
   fogMaterial.SetVector ("_StartDistance", Vector4 (1.0f / startDistance, (CAMERA_SCALE-startDistance)));
   fogMaterial.SetVector ("_Y", Vector4 (height, 1.0f / heightScale));
    
   fogMaterial.SetFloat ("_GlobalDensity", globalDensity * 0.01f);
   fogMaterial.SetColor ("_FogColor", globalFogColor);
    
   CustomGraphicsBlit (source, destination, fogMaterial, fogMode);
  }
   
  static function CustomGraphicsBlit (source : RenderTexture, dest : RenderTexture, fxMaterial : Material, passNr : int) {
   RenderTexture.active = dest;
           
   fxMaterial.SetTexture ("_MainTex", source);          
                    
   GL.PushMatrix ();
   GL.LoadOrtho ();  
        
   fxMaterial.SetPass (passNr);  
    
      GL.Begin (GL.QUADS);
         
   GL.MultiTexCoord2 (0, 0.0f, 0.0f);  
   GL.Vertex3 (0.0f, 0.0f, 3.0f); // BL
    
   GL.MultiTexCoord2 (0, 1.0f, 0.0f);  
   GL.Vertex3 (1.0f, 0.0f, 2.0f); // BR
    
   GL.MultiTexCoord2 (0, 1.0f, 1.0f);  
   GL.Vertex3 (1.0f, 1.0f, 1.0f); // TR
    
   GL.MultiTexCoord2 (0, 0.0f, 1.0f);  
   GL.Vertex3 (0.0f, 1.0f, 0.0); // TL
    
   GL.End ();
      GL.PopMatrix ();
  }   
}



Добавлено (28 Сен 2014, 16:38)
---------------------------------------------
Ладно, не надо. Сделал


Автор - folikmeo2001
Дата добавления - 28 Сен 2014 в 16:38
7MaZaHaKa7Дата: Сб, 25 Окт 2014, 10:09 | Сообщение # 2
 
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline
Создай в воде trigger и при входе объекта(player'a) в триггер включается компонент GlobalFog
smile
 
СообщениеСоздай в воде trigger и при входе объекта(player'a) в триггер включается компонент GlobalFog
smile

Автор - 7MaZaHaKa7
Дата добавления - 25 Окт 2014 в 10:09
Форум Игроделов » UNITY3D » СКРИПТИНГ » Помогите по лучам в unity3d
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024