• Advertisement
  • Popular Tags

  • Popular Now

  • Advertisement
  • Similar Content

    • By Runemark Studio
      Dark Fantasy Environment and Props





    • By bowcox
      Hi guys! 
      I have created a Pong game that has an AI that is almost beatable, changing the speed of the AI can make it ridiculously easy or hard depending on the way you go about it. 
       
      using System.Collections; using System.Collections.Generic; using UnityEngine; public class ComputerMovement : MonoBehaviour { private float speed; private float reAdjustSpeed = 1f; private Rigidbody2D computer2d; public static bool isTwoPlayer; GameObject theBall; Rigidbody2D rb2d; void Start() { computer2d = GetComponent<Rigidbody2D> (); } void FixedUpdate() { if (isTwoPlayer == true) { speed = 5f; if (Input.GetKey (KeyCode.W)) { computer2d.position += Vector2.up * speed * Time.deltaTime; } if (Input.GetKey (KeyCode.S)) { computer2d.position += Vector2.down * speed * Time.deltaTime; } } if (isTwoPlayer == false) { speed = 3f; if (theBall == null) { theBall = GameObject.FindGameObjectWithTag ("Ball"); } rb2d = theBall.GetComponent<Rigidbody2D> (); //Is the ball going left or right if (rb2d.velocity.x > 0) { if (rb2d.velocity.y > 0) { if (rb2d.position.y > computer2d.position.y) { MoveUp (); } if (rb2d.position.y < computer2d.position.y) { MoveDown (); } } if (rb2d.velocity.y < 0) { if (rb2d.position.y > computer2d.position.y) { MoveUp (); } if (rb2d.position.y < computer2d.position.y) { MoveDown (); } } } //Whilst it's not moving at the paddle, let it gain a slight reset by moving with the ball at a slower pace. if (rb2d.velocity.x < 0) { if (computer2d.position.y < 0) { computer2d.position += Vector2.up * reAdjustSpeed * Time.deltaTime; } if (computer2d.position.y > 0) { computer2d.position += Vector2.down * reAdjustSpeed * Time.deltaTime; } } } } void MoveDown() { if (Mathf.Abs(rb2d.velocity.y) > speed) { computer2d.position += Vector2.down * speed * Time.deltaTime; } else { computer2d.position += Vector2.down * speed * Time.deltaTime; } } void MoveUp() { if (Mathf.Abs (rb2d.velocity.y) > speed) { computer2d.position += Vector2.up * speed * Time.deltaTime; } else { computer2d.position += Vector2.up * speed * Time.deltaTime; } } }  
      I have looked up several posts across many different forums in order to create a much better AI. Most of the posts recommend that I use Raycasts to find out exactly where the ball might hit the paddle. I have looked up how to use them and I'm just completely lost, do raycasts consider collisions and go on infinitely or once they hit a wall, that's where it'll end up? Would anyone be able to help me understand raycasts a little better? 
      If you have another solution that enables me to calculate exactly where the ball will end up on the opponents side, I am more than willing to hear it
      Thanks again if you read this!
    • By eldwin11929
      We're looking for a Unity (C#) Programmer for our 2D Project. We're looking for a new lead programmer to continue with an existing project.
       
      Project is an open-world RTS, and is very close to a prototyping (playable) phase. Our existing lead, unfortunately, has no more time for the project, and thus we are in search of a new one who is interested.
       
      Game is purely fantasy based, and we'll be able to give you much more detailed info about the project as we begin to work you into it.
       
      You'll be working with our junior developer, who has been here since the beginning.
       
      Primary skills needed are just being able to work within Unity. But skills within XML are also a plus.
       
      Our list of major goals we'd need you to do is minimal, yet still fairly extensive:
      -Edit our current Pathfinding system to account for a few extra features.
      -Setup our global map system. You’ll be working off an existing random node-map web generator and existing random map generation system and essentially linking the two together. This includes handling random spawns (which has already been semi-setup) unique to each node’s respective map.
      -Further implementation of an existing random spawning algorithm (used to spawn things like enemies randomly across the Map).
      -Making sure to Save and Record all respective aspects of what was mentioned above.
      -Handling our XML database- database is created, but we’ll need to be integrating it. This includes all various things from units to abilities and so forth. Will also need to handle implementing an object’s unique attributes we cannot take care of within XML.
      -Various Content Implementation (to be done once our XML has been integrated).
      -Various Saving and Recording of all respective aspects of the database info mentioned above.
      -Various Performance Enhancements.
      -Potential for various misc things, such as further UI work.
      -Setting up a Menu system.
       
      We have a considerable amount of things done already- however I must warn ahead of time we have quite a bit of unclean code, which may be fairly overwhelming for a new developer on the project.
       
      Let me know your rates per hour, and we'll see if we can work out a good deal between both of us. Royalties are also included.
       
      If interested, send an email to: eldwin11929@yahoo.com
       
      Thanks!
    • By jhocking
      My bestselling and highly recommended Unity book has been fully revised! Unity in Action, Second Edition teaches you to write and deploy games with the Unity game development platform. You'll master the Unity toolset from the ground up, adding the skills you need to go from application coder to game developer.

      Foreword by Jesse Schell, author of The Art of Game Design

      Don't take my word for it being good, look at the sky-high ratings on GoodReads.

      You can order the ebook directly from the publisher's site, or order the book on Amazon to get both the physical book and a coupon to download the ebook!
    • By ThunderTwonk
      Hello everyone, I am working on a game idea and since I am still in the process of learning C# and the features available in unity I was hoping some of you might be able to offer me a little insight on things in general for getting started.
      I guess the basic components of what I'm wanting to create would be a Multi-levels management/city builder/rpg.
      The goal is to provide a framework for players to interact with, build in and affect the world both from a 3rd person action RPG as well as a zoomed out 4x style view (This would be something unlocked through gameplay)
       
      As for my questions go I was wondering if anyone had resources that could help me learn.  I've been on youtube as well as enrolled in an online course for basic unity and C# and will continue those but if anyone has any words of advice, a place that has good information and tutorials etc.
       
      Thanks for your time.
  • Advertisement
  • Advertisement
Sign in to follow this  

Unity better programming languages to support multiple Threads

This topic is 4295 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Well, dual core processors are now going to be the standard for low end pcs thanks to the new price wars from Intel and AMD. And it's a shame that only one core will really be used most of the time since 99% of the programs out there are still single threaded. I think the reason for this is quite obvious, we just don't have a good programming language to support easy development of Threads. With the state of current languages it is easy enough to create a Thread, and run it. But, we really need something even easier if we want more Threaded programs. I think there is a good opportunity for Java or C# to introduce new syntax for each language and it's JIT compiler to automattically make the program multi-threaded if it detects a core not being utilized. lets say you had 3 methods, and all 3 methods could be executed at the same time, but all 3 needed to be done before the fourth method executed. - with new language syntax this could be achieved like this: public void someMethodToRunTasks() { executeTask1() can run asynchrously executeTask2() can run asynchrously executeTask3() can run asynchrously executeTask4() depends on executeTask1, executeTask2, executeTask3 } then the respective JIT compiler could then take those dependencies and automattically create the best possible threaded program without the programmer doing anything except specifying the dependencies. Of course i don't think it's this simple (there would still be additional rules and behavior to be defined) but I think this is definitely doable, and would encourage development of multithreaded apps.

Share this post


Link to post
Share on other sites
Advertisement
Have you checked http://en.wikipedia.org/wiki/Concurrent_programming and http://en.wikipedia.org/wiki/Software_transactional_memory?

A lot of your ideas are already realized in software, just not in plain C# or Java.

OpenMP makes it easy to add multithreading in C/C++/Fortran for trivially parallelizeable stuff like your example.

It would look somewhat like that (not tested, but I think it's right that way):
void someMethodToRunTasks()
{
#pragma OMP parallel sections
{
#pramga OMP section
executeTask1();
#pragma OMP section
executeTask2();
#pragma OMP section
executeTask3();
}
executeTask4();
}


[Edited by - Trap on July 22, 2006 11:09:27 AM]

Share this post


Link to post
Share on other sites
I believe Mutexes and Semaphores are busted in the .NET Framework 2.0 (Or at least lacking a full implementation). Thus, I don't recommend C#.

Share this post


Link to post
Share on other sites
There are 3 basic forms of concurrency seen in languages.

  1. Declarative concurrency. The simplest form, and the easiest to work with. You spawn off a purely functional function, let it do its work in parallel, and when you need the value it returns and try to use it, the system waits for the thread to terminate and yield its result.

  2. Message passing concurrency. Threads communicate via messages. Not quite as simple and as easy to reason about as option 1, but very powerful and relatively straightforward.

  3. Shared state concurrency. This is the model languages like C++ and C# are mostly stuck with. The combination of mutable variables with concurrency is very hard to reason about for a range of reasons. No need to be the default. When it is used, software transactional memory is a good technique for getting around having to use low level locks.

Oz and Alice feature all models. Erlang is built around message passing concurrency. The problem of handling concurrency has actually been adequately solved for some time, although no mainstream languages provide good support. Sutter's Concur project aims to bring support for message passing concurrency to C++, and Microsoft Research have been experimenting on adding features from join calculus to C#.

Share this post


Link to post
Share on other sites
Quote:
Original post by Thevenin
I believe Mutexes and Semaphores are busted in the .NET Framework 2.0 (Or at least lacking a full implementation). Thus, I don't recommend C#.


Could you be a bit more specific? What exactly is busted, and how is it busted? Are we talking about bugs or just missing features? If there's a problem with concurrency in .NET, I'd rather know it *before* I run into a situation where I have to debug it... [grin]

Share this post


Link to post
Share on other sites
Quote:
Original post by Spoonbender
Quote:
Original post by Thevenin
I believe Mutexes and Semaphores are busted in the .NET Framework 2.0 (Or at least lacking a full implementation). Thus, I don't recommend C#.


Could you be a bit more specific? What exactly is busted, and how is it busted? Are we talking about bugs or just missing features? If there's a problem with concurrency in .NET, I'd rather know it *before* I run into a situation where I have to debug it... [grin]
I, too, would like to know what the hell you're talking about. Sounds like one of those "somebody somewhere mentioned it at some point, therefore it's fact" type things.

Oh, and I think everybody should read the wikipedia article on Software Transactional Memory.

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
the only thing close to Thevenin's post that i'm aware of is the extremely suboptimal performance of readerwriterlock in the .net framework 2.0 .. nothing known to me otherwise concerning thread synchronization and the .net framework.

i suppose c#-wise it would be of great interest to grab the concurrency coordination runtime, CCR. currently it is only available via the robotics framework by microsoft into which the CCR has been integrated as its functionality is key to the robotics framework.

cheers,
simon

Share this post


Link to post
Share on other sites
Quote:
# Declarative concurrency. The simplest form, and the easiest to work with. You spawn off a purely functional function, let it do its work in parallel, and when you need the value it returns and try to use it, the system waits for the thread to terminate and yield its result.

# Message passing concurrency. Threads communicate via messages. Not quite as simple and as easy to reason about as option 1, but very powerful and relatively straightforward.

# Shared state concurrency. This is the model languages like C++ and C# are mostly stuck with. The combination of mutable variables with concurrency is very hard to reason about for a range of reasons. No need to be the default. When it is used, software transactional memory is a good technique for getting around having to use low level locks.


It is actually fairly simple to implement #1 using #3. In C++, I would create a proxy class. Upon creation the proxy would spawn another process to calculate the value. The other process would lock the proxy, calculate it, and unlock it. The original process would block on the lock when it tried to access the proxy. You do need a tad more book keeping to avoid a race condition. It would look something like this, in psuedo C++.


class proxy
{
T value;
Event is_ready; //Event is some concurency primitive that once triggered,
//remains always triggered. IIRC, the 'events' in the
//windows API don't have this behavior

//You might even be able to use a bool (reads are atomic operations)
//but then you would need a busy loop. :(
public:
proxy()
{
spawn_process(calculate_value,this);
}

T get_value()
{
wait for is_ready;
return value;
}
};

void calculate_value(proxy* p)
{
p->value = the_calculated_value;
trigger p->is_ready;
}

int main()
{
proxy p;
p.get_value();
}

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement