Playing sound within a certain radius unity - unity3d

I am looking for some way of making it so that the player can only hear the sounds as they get close to an object. In other words, a sound that only plays within a certain radius, or proximity sound, if this makes any sense.
If anyone knows of a way to do this in unity, any advice would be helpful!
Thanks,
Callum

You can use Unity's built-in 3D audio features to achieve that effect. Simply, if you attach an AudioSource to your desired object (the source of sound), and put the 3d audio sample you'd like to use in it as an AudioClip, you can edit its min/max distance and rolloff values accordingly to set the hearing radius. Note that, in that case you might want to attach your AudioListener to the player object instead, as the distance calculation will be done between the source and the listener.
Alternatively, you could write a small script to cast a sphere to find if the transform of the audio source is inside and change the volume etc. accordingly. Of course, you need to add colliders to your game objects in that case. See: http://docs.unity3d.com/ScriptReference/Physics.SphereCast.html

Related

Unity Mesh Deformation with Collisions

How to access the 2D mesh of a sprite by code then change the shape of the sprite?
I want to make a game similar to Agario
I just was wondering how to achieve this jelly form when touching objects either by collisions or triggers ?
I would like to see more answers.
Scaling won't get you the kind of deformations you want. Coding deformations the way agar.io does it from scratch is quite difficult. I can see multiple ways of doing this, so I'm going to list them from most recommended to least recommended:
Start with a flat 3D mesh and render your sprite on it as a texture so you basically get a billboard. Then use collision events to get the contact points and use math to figure out how to move the mesh's vertices in response to the contact. You can see someone achieving that effect here and you can see a full blown tutorial for a sphere here, a highly recommended read. Your idea with getting the line from the center of the circle via the contact position and decreasing its length is sound, though the implementation is a bit more complex than that if you want it to behave like agar.io.
Get Anima2D, a free asset that can among other things convert sprites to meshes. Then again use collision events to get the contact points and distort the mesh.
Use Anima2D or a different asset with equivalent capabilities and figure out how to use 2D bones in order to get something like agar.io's effect. You could also try 3D bones on a plane/billboard mesh.
Send the collision data to a vertex shader that is programmed to deform the thing it's rendering.
you can contact gameobjects with Trigger function. That function is working automatically with GameObject's tag names. Here is how you can get Triger function
And also you can change size of GameObjects when they touch each other
More info about scaling
you can code almost anything you want and here is about Mesh of sprite

Identifying boundaries and objects in real time (tango)

Is there a possibility with a google tango camera to create a situation, that my player goes on the table and if he comes out of the table he falls? Has anyone ever done anything similar and has references or ideas on how to do it?
in order to implement the functionality that you described, you will need to find different planes from the real world and translate their position into Unity scene. There is a class in Tango SDK, called TangoPointCloud which contains several methods for recognizing planes and translate their position into unity scene points. By knowing the positions of the table and the floor, you might be able to implement the feature you want. In my case, TangoPointCloud helped me find the walls from a room and their position relative to unity scene units.

What would be the best way to do pathfinding on a random object that rotates

I want to do pathfinding on a rotating "planet", similar like the enemies do in mario galaxy, except the planets are rotating. What would be the best way to do it? The planets come in different forms, and it is necessary that I place the waypoint with code. That is because I need to do it with code for my assignment and also I want to make an object pool of waypoints that get placed on the planet the player is currently on.
So is A* the best way to go? I was thinking about the technique I should use and I thought of placing every waypoint on a vertex of the model. But some models can get pretty high in vertices, so isn't that really heavy if I have that many waypoint and then use them for path finding?
Or is there a better way of doing it? I was thinking can't you do it based on the uv's of the planet? The only thing is that the uv's have cuts so how can I tell the enemy to also check the cuts of the uv's for a shorter path?
Best way to animate planets will be to download leanTween or some similar asset and make animation by curve path + rotation.

unity3d player gameobject "hear" sounds

I have a question that is a little... complex
basically I want a gameObject (an enemy) "listen" to the sound of the player (footsteps, door opening, gunfire etc)
I could do this just fine by using:
>Collider[] hitColliders;
>hitColliders = Physics.OverlapSphere(transform.position, 10f,enemyLayer);
>
>for(int i=0;i<hitcolliders.Length;i++){}// Call Enemy Hear Player Function
However, the problem starts here:
I want the "sound" to be blocked by walls. At first, I thought I could use Physics.Linecast to do this. However, this means the sound could be blocked by a mere piece of pole, because Physics.Linecast only shoots a single, straight line.
What I want is player C could not hear anyone at all, but player A and B could still hear each other.
I hope you guys understand my question.
You could place the objects you want to block the soundwave on a specific layer. And just make the raycast ignore all other layers.
Leave all this Physic and other graphical stuff behind.
Create a separate logic for this behavior.
Create a big chess board (where x,y will be x,y position in you game) and add only sound-generators, sound-listeners and sound-obstacles.
Update this chess board each frame and create sounds, fly sounds, block sounds and listen to sounds and act appropriate as the real life actors.
This way you can add parameters to each obstacle, sound-generator and sound-listener so that all be configurable.

how to deform image?

Hi Friends
I Want to make a simple gaming Application in which the user hit the car and car breaks from that point means the image get little deformed when the user hit the car image. I know everything could be possible with using of lots of images and get change when user hit that car image but i don't want to use so many images.
is there any solution for this , how can i deform the image ..sorry for my English but , here i paste a link of the game that is on flash and this is what i exactly want..
http://www.playgecogames.com/file.php?f=657&a=popup
please respond soon
thanks
You don't say if this is in 2D or 3D, or what techniques you're going to use.
If you're implementing the game using OpenGL, it's fairly straightforward. The object can be made up of a regular mesh, with the image as a texture mapped to the mesh. When the user hits the object, you just deform the mesh.
A simple method would be to take a vector in the direction of the hit, displace the nearest vertex by an amount proportional to the force of the strike, and then fan out in to deform the rest of the mesh in decreasing amounts. By deforming the mesh, the image texture will be rendered with all the dents or deformations you like.
If you want to to this without OpenGL and just straight images, you could use image resampling to simulate the effect. You have your original pristine image which is 'filtered' to make up the resulting image. At first there are no deformations so you copy the original image verbatim. Each time the user hits the object, you can add a deformation using a filter or transform within a local region of interest. This function would resample the source image in a distorted manner, causing it to look like the object is damaged.
If you look up some good books on game development, you'll find a great range of approaches to object collisions, deformations and so on.
If you know a bit about image processing technics here is the documentation for accessing the pixels of the image :
Apple Reference
You also have libraries for this such as this one :
simple-iphone-image-processing
But for what you want to do this might not be the easiest way. What I would suggest is that you divide the car into several images depending on what areas can be impacted. Then you just change the image corresponding to the damaged zone each time the car is hit.
I think you should use the cocos2d effects http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide%3aeffects + multiple images. Because there are many parts which drops after the player kick the car. Like when user kick the side mirror you should change the car image with without side mirror car image.
The person that has made that flash game used around 4 images to display the car. If you want the game to be in 2d, the easiest way is to draw the car, cut it into about 4 pieces (: left side + right side (duplicate of the left side) hood and roof).
If you want to "really" deform the car you'll have to use a 3d engine like openGLES.
Id really suggest doing it in 2d :)
I suggest having a look at the cocos2d game engine. You can modify images with effects, which are applied using a virtual grid. Have a look at the effects page in their programming guide.