Дёрганный Underwater скрипт (РЕШЕНО)

Программирование на Юнити.

Дёрганный Underwater скрипт (РЕШЕНО)

Сообщение Ert Donuell 21 авг 2010, 02:00

Переделал под себя скрипт из Island Demo

Синтаксис:
Используется javascript
var HUDSkin : GUISkin;
var waterLevel : float;

var uAudio : AudioClip;
var aAudio : AudioClip;

var uDensity = 0;

var aColor = Color(1,1,1,1);
var aDensity = 0.0015;

var waterSurface : Renderer;
var underwaterSurface : Renderer;

private var below = false;
private var glow : GlowEffect;
private var blur : BlurEffect;
private var cc : ColorCorrectionEffect;
private var uColor : Color;

function Awake() {
        if(!waterLevel)
        {
                water = GameObject.Find("Water").transform.position.y;
                if(water) waterLevel = water;
        }
        aColor = RenderSettings.fogColor;
        aDensity = RenderSettings.fogDensity;
       
        glow = GetComponent(GlowEffect);
        blur = GetComponent(BlurEffect);
        cc = GetComponent(ColorCorrectionEffect);
        if( !glow || !blur || !cc)
        {
                Debug.LogError("No right Glow/Blur/ColorCorrection assigned to camera!");
                enabled = false;
        }
        if( !waterSurface || !underwaterSurface )
        {
                Debug.LogError("Assign water & underwater surfaces");
                enabled = false;
        }
        if( underwaterSurface != null )
                underwaterSurface.enabled = false; // initially underwater is disabled
}

function Update ()
{
    uColor=camera.backgroundColor;
}


function FixedUpdate ()
{
        if (waterLevel < transform.position.y && below)
        {
                audio.clip = aAudio;
                audio.Play();
                RenderSettings.fogDensity = aDensity;
                RenderSettings.fogColor = aColor;
               
                below = false;
               
                //glow.enabled = !below && glow.IsSupported();
                blur.enabled = below && blur.IsSupported();
                cc.enabled = below && blur.IsSupported();
                waterSurface.enabled = true;
                underwaterSurface.enabled = false;
        }
       
        if (waterLevel > transform.position.y && !below)
        {
                audio.clip = uAudio;
                audio.Play();
                RenderSettings.fogDensity = uDensity;
                RenderSettings.fogColor = uColor;
               
                below = true;
               
                //glow.enabled = !below && glow.IsSupported();
                blur.enabled = below && blur.IsSupported();
                cc.enabled = below && blur.IsSupported();
                waterSurface.enabled = false;
                underwaterSurface.enabled = true;
        }
}

function OnGUI () {
    GUI.skin = HUDSkin;
        water = GameObject.Find("Water").transform.position.y;
        if(water) waterLevel = water;
        sWaterLevel = waterLevel.ToString();
        sWaterLevel = "Water level position:                " + sWaterLevel;
        uWater = GameObject.Find("Water/uWater").transform.position.y;
        if(uWater) uWaterLevel = uWater;
        suWaterLevel = uWaterLevel.ToString();
        suWaterLevel = "Under water level position:    " + suWaterLevel;
    pos = gameObject.Find("testPlayer 1/Pelvis/Stomach/Breast/Head/Camera").transform.position.y;
        pos -= 6.5;
        sPos = pos.ToString();
        sPos = "Head Position:                           " + sPos;
        sTime = Time.realtimeSinceStartup.ToString();
        sTime = "Real Time Since Startup:        " + (Mathf.Floor(Time.realtimeSinceStartup / 3600)).ToString() + ":" + (Mathf.Floor(Time.realtimeSinceStartup / 60) - Mathf.Floor(Time.realtimeSinceStartup / 3600) * 60).ToString() + ":" + (Mathf.Floor(Time.realtimeSinceStartup) - Mathf.Floor(Time.realtimeSinceStartup / 60) * 60).ToString();
        GUI.Label (Rect (10, 10, 250, 20), sWaterLevel);
        GUI.Label (Rect (10, 20, 250, 20), suWaterLevel);
        GUI.Label (Rect (10, 30, 250, 20), sPos);
        GUI.Label (Rect (10, 40, 250, 20), sTime);
        GUI.Label (Rect (10, 50, 250, 20), "Glow enabled:                           " + glow.enabled.ToString());
        GUI.Label (Rect (10, 60, 250, 20), "Blur enabled:                             " + blur.enabled.ToString());
        GUI.Label (Rect (10, 100, 250, 20), Time.realtimeSinceStartup.ToString());
}

 


Теперь страдаю - эффект Blur возникает произвольно, мерцанием. При запуске игры всё норм, но затем начинаются лаги. Проблема именно в скрипте - без него всё норм пашет. BlurEffect.cs тоже не виноват.

Где лоханулся?? Изображение
Последний раз редактировалось Ert Donuell 27 авг 2010, 11:51, всего редактировалось 1 раз.
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Дёрганный Underwater скрипт

Сообщение Ert Donuell 27 авг 2010, 11:35

Нашёл интересную вещь. Изменил код UnderwaterEffects так:

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class UnderwaterEffects : MonoBehaviour {
        public GUISkin HUDSkin;
        public float waterLevel;

        public float uDensity = 0;

        public Color aColor = new Color(1,1,1,1);
        public float aDensity = 0.0015f;

        public Renderer waterSurface;
        public Renderer underwaterSurface;

        private bool below = false;
        private bool underwater = false;
        private BlurEffect blur;
        private ColorCorrectionEffect cc;

        void  Awake () {
                waterLevel = waterSurface.transform.position.y;
                aColor = RenderSettings.fogColor;
                aDensity = RenderSettings.fogDensity;
               
                blur = GetComponent<BlurEffect>();
                cc = GetComponent<ColorCorrectionEffect>();
                if( !blur || !cc)
                {
                        Debug.LogError("No right Blur/ColorCorrection assigned to camera!");
                        enabled = false;
                }
                if( !waterSurface || !underwaterSurface )
                {
                        Debug.LogError("Assign water & underwater surfaces");
                        enabled = false;
                }
                if( underwaterSurface != null )
                        underwaterSurface.enabled = false;
        }

        void  Update () {
                if ((underwater) && (waterLevel < transform.position.y))
                {
                        print("Overwater (Water: " + waterLevel +"; Camera: " + transform.position.y + ")");
                        underwater = false;
                }
               
                if ((!underwater) && (waterLevel > transform.position.y))
                {
                        print("Underwater (Water: " + waterLevel +"; Camera: " + transform.position.y + ")");
                        underwater = true;
                }
        }

}
 


Затем встал у берега и стал ждать. Камеру не шевелил. Вот что вывел дебаг:
Изображение

Выходит, камера не может точно определить своё положение о_0
Тем не менее, объект, к которому прикручена камера (testPlayer 1/Pelvis/Stomach/Breast/Head/Camera) и сама камера в инспекторе статичны по оси y. Помогите! :((
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Дёрганный Underwater скрипт

Сообщение Ert Donuell 27 авг 2010, 11:53

Побился головой.. Проследил за положением родительского объекта.. Дёргается. Остановился. Попробовал поотключать от него всякую лажу.. Всё запахало после того как выкинул Rigidbody :D

..и на кой я его туда нацепил?? :-?

Спасибо, Ert Donuell))
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Дёрганный Underwater скрипт (РЕШЕНО)

Сообщение Ert Donuell 28 авг 2010, 12:34

По ходу было бы достаточно поставить у Rigidbody галочку "Is Kinematic" :-B
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Дёрганный Underwater скрипт (РЕШЕНО)

Сообщение Левш@ 28 авг 2010, 20:13

Монолог! мне понравилось. :) А инфа интересная.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10