Вода и всё, связанное с ней
RealGamesWorld Дата: Чт, 15 Апр 2010, 12:08 | Сообщение # 1
Карто-строитель
Сообщений: 190
Награды:
2
Репутация:
70
Статус: Offline
Как ставить воду в юнит?
Сообщение Как ставить воду в юнит? Автор - RealGamesWorld Дата добавления - 15 Апр 2010 в 12:08
FunnyAlien Дата: Чт, 15 Апр 2010, 12:11 | Сообщение # 2
NYAN-NYAN?
Сообщений: 3643
Награды:
14
Репутация:
835
Статус: Offline
В юнит незнаю... В юнити она есть в папке, стандарт ассетс!
Согласно протоколу испытаний, начиная с этого момента, мы перестаем говорить правду. Три, два, один.
Сообщение В юнит незнаю... В юнити она есть в папке, стандарт ассетс! Автор - FunnyAlien Дата добавления - 15 Апр 2010 в 12:11
Скептик Дата: Чт, 15 Апр 2010, 12:33 | Сообщение # 3
Мыслитель
Сообщений: 5860
Награды:
48
Репутация:
1731
Статус: Offline
Берем воду и перетягиваем в сцену, как и любой другой ГО. В чём трабл? Можно к любой поверхности применить Water-шейдер, и поверхность станет водой.
Фанат игр Max Payne и Fahrenheit.
Сообщение Берем воду и перетягиваем в сцену, как и любой другой ГО. В чём трабл? Можно к любой поверхности применить Water-шейдер, и поверхность станет водой. Автор - Скептик Дата добавления - 15 Апр 2010 в 12:33
RealGamesWorld Дата: Вт, 20 Апр 2010, 17:20 | Сообщение # 4
Карто-строитель
Сообщений: 190
Награды:
2
Репутация:
70
Статус: Offline
нет, а можно как нить чтоб когда зайдешь в воду, игрок плыл?
Сообщение нет, а можно как нить чтоб когда зайдешь в воду, игрок плыл? Автор - RealGamesWorld Дата добавления - 20 Апр 2010 в 17:20
BLACK Дата: Вт, 20 Апр 2010, 17:31 | Сообщение # 5
Wishmaster
Сообщений: 635
Награды:
11
Репутация:
285
Статус: Offline
Quote (alec5sei )
нет, а можно как нить чтоб когда зайдешь в воду, игрок плыл?
Можно, посмотри как в островной демке это реализовано, прада там игрок не плывет, придется писать скрипт чтоб в воде отключалась гравитация или как то так
Сообщение Quote (alec5sei )
нет, а можно как нить чтоб когда зайдешь в воду, игрок плыл?
Можно, посмотри как в островной демке это реализовано, прада там игрок не плывет, придется писать скрипт чтоб в воде отключалась гравитация или как то так Автор - BLACK Дата добавления - 20 Апр 2010 в 17:31
Левша Дата: Вт, 20 Апр 2010, 17:45 | Сообщение # 6
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Если полностью симулировать воду, это сложно. Придеться писать навороченный код с применением действующих на ГГ противоположнонаправленных, скомпенсированных сил. Гравитации и выталкивания. То есть написать физическоматематическую модель воды. Можно и проще конечно замутить, просто коллайдить с верхней частью ГГ, но реалистики не будет.
X.cor.R (Prologue)
Сообщение Если полностью симулировать воду, это сложно. Придеться писать навороченный код с применением действующих на ГГ противоположнонаправленных, скомпенсированных сил. Гравитации и выталкивания. То есть написать физическоматематическую модель воды. Можно и проще конечно замутить, просто коллайдить с верхней частью ГГ, но реалистики не будет. Автор - Левша Дата добавления - 20 Апр 2010 в 17:45
Dekterev Дата: Вт, 20 Апр 2010, 18:11 | Сообщение # 7
Сообщений: 1753
Награды:
16
Репутация:
892
Статус: Offline
В островной демке вода очень похожа на воду в Far Cry 1, но в этой игре, ГГ начинает плыть если погружается в воду на 70...80% по высоте.
Quote (Левша )
писать навороченный код с применением действующих на ГГ противоположнонаправленных, скомпенсированных сил. Гравитации и выталкивания. То есть написать физическоматематическую модель воды.
Зачем сложная физика реальной воды в игре? Сомневаюсь что в том-же Far Cry слишком сложный скрипт... А может просто убирать гравитацию у ГГ при нахождении в воде, чтобы он просто повисал в воде будучи погруженным полностью в воду. Как в Far Cry сделано, идешь по берегу все более утопая в воде, и вдруг бац! и проваливаешься в толщу воды, то-есть начинаешь плыть. А чтобы проваливаться резко в воду, применить скрипт, в котором будет прописано небольшое перемещение ГГ вниз, для 100% погружения в воду. А в воде просто придавать силу двигающую ГГ с определенной и небольшой скоростью, в нужном направлении. Думаю что не сложнее чем скрипт для машины получится.
Поиск | Правила | Новые сообщения
Сообщение отредактировал Dekterev - Вт, 20 Апр 2010, 18:11
Сообщение В островной демке вода очень похожа на воду в Far Cry 1, но в этой игре, ГГ начинает плыть если погружается в воду на 70...80% по высоте.
Quote (Левша )
писать навороченный код с применением действующих на ГГ противоположнонаправленных, скомпенсированных сил. Гравитации и выталкивания. То есть написать физическоматематическую модель воды.
Зачем сложная физика реальной воды в игре? Сомневаюсь что в том-же Far Cry слишком сложный скрипт... А может просто убирать гравитацию у ГГ при нахождении в воде, чтобы он просто повисал в воде будучи погруженным полностью в воду. Как в Far Cry сделано, идешь по берегу все более утопая в воде, и вдруг бац! и проваливаешься в толщу воды, то-есть начинаешь плыть. А чтобы проваливаться резко в воду, применить скрипт, в котором будет прописано небольшое перемещение ГГ вниз, для 100% погружения в воду. А в воде просто придавать силу двигающую ГГ с определенной и небольшой скоростью, в нужном направлении. Думаю что не сложнее чем скрипт для машины получится.
Автор - Dekterev Дата добавления - 20 Апр 2010 в 18:11
Скептик Дата: Вт, 20 Апр 2010, 19:14 | Сообщение # 8
Мыслитель
Сообщений: 5860
Награды:
48
Репутация:
1731
Статус: Offline
Вообще стоит ждать версию 3.0, и надеяться, что в ней апгрейднут физику. а пока есть несколько различных решений по поводу воды: Проект с физикой всплывания ГО Страница с комментариями
Скрипт плавания:
Code
var density = 0.999; var airDens = 0.013; // In something like gram per cubic centimeter var flux : Vector3; var gravity = 9.81; var surfaceHeight = 0.0; var damper = 1.0; var thickness = 0.5; var normDrag = 0.0; var waterDrag = 0.99; function OnTriggerEnter (other : Collider) { other.gameObject.SendMessage("YouSwim", true, SendMessageOptions.DontRequireReceiver); other.gameObject.SendMessage("Water", transform, SendMessageOptions.DontRequireReceiver); other.gameObject.SendMessage("Density", thickness, SendMessageOptions.DontRequireReceiver); } function OnTriggerStay (other : Collider) { if (other.GetComponent(Rigidbody)) { var size = other.bounds.size; var volume : float = size.x*size.y*size.z; var dens = other.rigidbody.mass/volume; other.rigidbody.AddForce(transform.up * ((density-dens) * (surfaceHeight - other.transform.position.y) * damper / thickness - other.rigidbody.velocity.y/gravity) + flux/dens); other.rigidbody.drag = waterDrag + (surfaceHeight - other.transform.position.y) * (waterDrag/gravity) + (0 - other.rigidbody.velocity.y) * (waterDrag/damper); //other.rigidbody.AddTorque(Vector3.Slerp(other.rigidbody.angularVelocity, other.rigidbody.angularVelocity * -thickness, Time.deltaTime)); var colliders : Collider[] = Physics.OverlapSphere (other.transform.position, volume/(damper/dens*2)); for (var effect in colliders) { if (effect.rigidbody && effect != other && effect.rigidbody.drag != 0.0) { effect.rigidbody.AddForce(other.rigidbody.velocity * (damper/thickness) / effect.rigidbody.mass * Vector3.Normalize(other.rigidbody.velocity).magnitude * airDens); var angl = (other.rigidbody.angularVelocity+other.rigidbody.velocity)/2; effect.rigidbody.AddTorque(angl); } } } } function OnTriggerExit (obj : Collider) { other.gameObject.SendMessage("YouSwim", false, SendMessageOptions.DontRequireReceiver); obj.rigidbody.drag = normDrag; }
Скрипт изменения гравитации
Скрипт покачивания в воде:
Code
// density here is killograms per cubic meter. Unity's world units are meters and mass is commonly assumed to be killograms // Density of wood: 600 kg / cu.m // Density of water 1000 kg / cu meter // Density of iron 7000 kg / cu meter // densityOfBody = b.mass / curBodiesVolume[i]; var divider = 1.0; var airborneDrag = -1.0; //If left at -1 will use the Rigidbody Drag var fluidDrag = 0.0; private var fluidDensity = 1000.0; private var displacement = 0.0; private var myRenderer : Renderer; private var myRB : Rigidbody; private var myColliders : Array; private var timer = 0.0; function Start(){ var renderers = transform.root.gameObject.GetComponentsInChildren(Renderer); var rendMax = Vector3(0,0,0); for (var ren : Renderer in renderers){ if(ren.bounds.size.sqrMagnitude>rendMax.sqrMagnitude){ rendMax = ren.bounds.size; myRenderer=ren; } } if(myRB==null) myRB = GetComponent(Rigidbody); if(myColliders==null) myColliders = GetComponentsInChildren(Collider); for(var col : Collider in myColliders){ displacement += col.bounds.size.x*col.bounds.size.y*col.bounds.size.z; } displacement = displacement/divider; if(airborneDrag<0)airborneDrag = myRB.drag; } function OnTriggerEnter(c : Collider){ if(c.tag=="fluid") myRB.drag=fluidDrag; } function OnTriggerStay(c : Collider){ if(myRenderer==null)return; var timetemp = Time.realtimeSinceStartup; if(c.tag=="fluid"){ var surfaceYPos = c.transform.position.y; var bottom : Vector3 = transform.position; for(var col : Collider in myColliders){ if(col==null) continue; var temp = col.ClosestPointOnBounds(transform.position-Vector3(0,100,0)); if(temp.y<bottom.y) bottom = temp; } var bottomToSurface : float = (surfaceYPos-bottom.y); var bottomToCenter : float = (bottom - myRenderer.bounds.center).magnitude; var pctSubmerged : float = Mathf.Clamp01(bottomToSurface/(bottomToCenter*2)); var force : Vector3 = displacement*fluidDensity*pctSubmerged*-1*Physics.gravity; bottom = Vector3.Lerp(bottom,transform.position,0.75); myRB.AddForceAtPosition(force,bottom); } timer += Time.realtimeSinceStartup-timetemp; } function OnTriggerExit(c : Collider){ if(c.tag=="fluid") myRB.drag=airborneDrag; }
Замедленое падение в воде
Фанат игр Max Payne и Fahrenheit.
Сообщение Вообще стоит ждать версию 3.0, и надеяться, что в ней апгрейднут физику. а пока есть несколько различных решений по поводу воды: Проект с физикой всплывания ГО Страница с комментариями
Скрипт плавания:
Code
var density = 0.999; var airDens = 0.013; // In something like gram per cubic centimeter var flux : Vector3; var gravity = 9.81; var surfaceHeight = 0.0; var damper = 1.0; var thickness = 0.5; var normDrag = 0.0; var waterDrag = 0.99; function OnTriggerEnter (other : Collider) { other.gameObject.SendMessage("YouSwim", true, SendMessageOptions.DontRequireReceiver); other.gameObject.SendMessage("Water", transform, SendMessageOptions.DontRequireReceiver); other.gameObject.SendMessage("Density", thickness, SendMessageOptions.DontRequireReceiver); } function OnTriggerStay (other : Collider) { if (other.GetComponent(Rigidbody)) { var size = other.bounds.size; var volume : float = size.x*size.y*size.z; var dens = other.rigidbody.mass/volume; other.rigidbody.AddForce(transform.up * ((density-dens) * (surfaceHeight - other.transform.position.y) * damper / thickness - other.rigidbody.velocity.y/gravity) + flux/dens); other.rigidbody.drag = waterDrag + (surfaceHeight - other.transform.position.y) * (waterDrag/gravity) + (0 - other.rigidbody.velocity.y) * (waterDrag/damper); //other.rigidbody.AddTorque(Vector3.Slerp(other.rigidbody.angularVelocity, other.rigidbody.angularVelocity * -thickness, Time.deltaTime)); var colliders : Collider[] = Physics.OverlapSphere (other.transform.position, volume/(damper/dens*2)); for (var effect in colliders) { if (effect.rigidbody && effect != other && effect.rigidbody.drag != 0.0) { effect.rigidbody.AddForce(other.rigidbody.velocity * (damper/thickness) / effect.rigidbody.mass * Vector3.Normalize(other.rigidbody.velocity).magnitude * airDens); var angl = (other.rigidbody.angularVelocity+other.rigidbody.velocity)/2; effect.rigidbody.AddTorque(angl); } } } } function OnTriggerExit (obj : Collider) { other.gameObject.SendMessage("YouSwim", false, SendMessageOptions.DontRequireReceiver); obj.rigidbody.drag = normDrag; }
Скрипт изменения гравитации
Скрипт покачивания в воде:
Code
// density here is killograms per cubic meter. Unity's world units are meters and mass is commonly assumed to be killograms // Density of wood: 600 kg / cu.m // Density of water 1000 kg / cu meter // Density of iron 7000 kg / cu meter // densityOfBody = b.mass / curBodiesVolume[i]; var divider = 1.0; var airborneDrag = -1.0; //If left at -1 will use the Rigidbody Drag var fluidDrag = 0.0; private var fluidDensity = 1000.0; private var displacement = 0.0; private var myRenderer : Renderer; private var myRB : Rigidbody; private var myColliders : Array; private var timer = 0.0; function Start(){ var renderers = transform.root.gameObject.GetComponentsInChildren(Renderer); var rendMax = Vector3(0,0,0); for (var ren : Renderer in renderers){ if(ren.bounds.size.sqrMagnitude>rendMax.sqrMagnitude){ rendMax = ren.bounds.size; myRenderer=ren; } } if(myRB==null) myRB = GetComponent(Rigidbody); if(myColliders==null) myColliders = GetComponentsInChildren(Collider); for(var col : Collider in myColliders){ displacement += col.bounds.size.x*col.bounds.size.y*col.bounds.size.z; } displacement = displacement/divider; if(airborneDrag<0)airborneDrag = myRB.drag; } function OnTriggerEnter(c : Collider){ if(c.tag=="fluid") myRB.drag=fluidDrag; } function OnTriggerStay(c : Collider){ if(myRenderer==null)return; var timetemp = Time.realtimeSinceStartup; if(c.tag=="fluid"){ var surfaceYPos = c.transform.position.y; var bottom : Vector3 = transform.position; for(var col : Collider in myColliders){ if(col==null) continue; var temp = col.ClosestPointOnBounds(transform.position-Vector3(0,100,0)); if(temp.y<bottom.y) bottom = temp; } var bottomToSurface : float = (surfaceYPos-bottom.y); var bottomToCenter : float = (bottom - myRenderer.bounds.center).magnitude; var pctSubmerged : float = Mathf.Clamp01(bottomToSurface/(bottomToCenter*2)); var force : Vector3 = displacement*fluidDensity*pctSubmerged*-1*Physics.gravity; bottom = Vector3.Lerp(bottom,transform.position,0.75); myRB.AddForceAtPosition(force,bottom); } timer += Time.realtimeSinceStartup-timetemp; } function OnTriggerExit(c : Collider){ if(c.tag=="fluid") myRB.drag=airborneDrag; }
Замедленое падение в воде
Автор - Скептик Дата добавления - 20 Апр 2010 в 19:14
RealGamesWorld Дата: Вт, 20 Апр 2010, 19:40 | Сообщение # 9
Карто-строитель
Сообщений: 190
Награды:
2
Репутация:
70
Статус: Offline
Так вот я и не пойму, где взять воду в стандарте, или где еще? у меня ни какой демки не было((
Сообщение Так вот я и не пойму, где взять воду в стандарте, или где еще? у меня ни какой демки не было(( Автор - RealGamesWorld Дата добавления - 20 Апр 2010 в 19:40
Dekterev Дата: Вт, 20 Апр 2010, 19:50 | Сообщение # 10
Сообщений: 1753
Награды:
16
Репутация:
892
Статус: Offline
Quote (alec5sei )
у меня ни какой демки не было((
Демка тропического острова на сайте Unity . Доступно только для пользователей
Поиск | Правила | Новые сообщения
Сообщение отредактировал Dekterev - Вт, 20 Апр 2010, 19:51
RealGamesWorld Дата: Ср, 21 Апр 2010, 12:24 | Сообщение # 11
Карто-строитель
Сообщений: 190
Награды:
2
Репутация:
70
Статус: Offline
Dekterev, а ты незнаешь где взять море из этой демки, когда за горы проходишь?
Сообщение Dekterev, а ты незнаешь где взять море из этой демки, когда за горы проходишь? Автор - RealGamesWorld Дата добавления - 21 Апр 2010 в 12:24
Денис Дата: Ср, 21 Апр 2010, 12:41 | Сообщение # 12
Сообщений: 5098
Награды:
23
Репутация:
910
Статус: Offline
alec5sei , так ты сделал воду или нет? Протестировал Стандарт Ассетс воду,все норм работает,вот скрин:
Сообщение alec5sei , так ты сделал воду или нет? Протестировал Стандарт Ассетс воду,все норм работает,вот скрин: Автор - Денис Дата добавления - 21 Апр 2010 в 12:41
Скептик Дата: Ср, 21 Апр 2010, 14:05 | Сообщение # 13
Мыслитель
Сообщений: 5860
Награды:
48
Репутация:
1731
Статус: Offline
В стандартных Ассетах есть папка Water, см. там.
Фанат игр Max Payne и Fahrenheit.
Сообщение В стандартных Ассетах есть папка Water, см. там. Автор - Скептик Дата добавления - 21 Апр 2010 в 14:05
Griff Дата: Пн, 28 Июн 2010, 15:59 | Сообщение # 14
Сообщений: 2
Награды:
0
Репутация:
0
Статус: Offline
Притягиваю воду (Daylight Simple Water) на сцену. А она не прозрачная. Синяя. Как сделать воду прозрачной?
Сообщение Притягиваю воду (Daylight Simple Water) на сцену. А она не прозрачная. Синяя. Как сделать воду прозрачной?
Автор - Griff Дата добавления - 28 Июн 2010 в 15:59
Левша Дата: Пн, 28 Июн 2010, 16:45 | Сообщение # 15
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Quote (Griff )
Как сделать воду прозрачной?
Шейдеры меняй. На нашем сайте лежит урок по созданию реальной воды.
X.cor.R (Prologue)
Сообщение Quote (Griff )
Как сделать воду прозрачной?
Шейдеры меняй. На нашем сайте лежит урок по созданию реальной воды.Автор - Левша Дата добавления - 28 Июн 2010 в 16:45