Notes on Research Paper: Automatic Game Progression Design through Analysis of Solution Features by Butler et al.

November 19, 2019

Thesis Research

Notes on Resources

TITLE:

Automatic Game Progression Design through Analysis of Solution Features

AUTHORS:

E. Butler, E. Andersen, A. M. Smith, S. Gulwani, and Z. Popović

IEEE Citation – Zotero

[1]E. Butler, E. Andersen, A. M. Smith, S. Gulwani, and Z. Popović, “Automatic Game Progression Design through Analysis of Solution Features,” 2015, pp. 2407–2416.
ABSTRACT
– use intelligent tutoring systems and progression strategies to help with mastery of base concepts 
as well as combinations of these concepts
– System input: model of what the player needs to do to complete each level
– Expressed as either:
– Imperative procedure for producing solutions
– Representation of features common to all solutions
– System output: progression of levels that can be adjusted by changing high level parameters
INTRODUCTION
– Level Progression: “how game introduces new concepts and grows in complexity as the player progresses”
– link between level progressions and player engagement
– “Game designer Daniel Cook claims that many players derive fun from “the act of mastering 
knowledge, skills and tools,” and designs games by considering the sequence of skills that the 
player masters throughout the game [11].”
– *** Why we want to have system produce similar but varied versions of the same type 
of experience
– “Intelligent tutoring systems (ITS) [29, 22] have advanced the
teaching potential of computers through techniques that track
the knowledge of students and select the most appropriate
practice problems [8, 12].”
– “We aim to enable a different method
of game design that shifts away from manual design of levels
and level progressions, towards modeling the solution space
and tweaking high-level parameters that control pacing and
ordering of concepts”
– *** Possible major goal of my research
– “Andersen et al. [1] proposed a theory to automatically
estimate the difficulty of procedural problems by analyzing
features of how these problems are solved”
– Procedural Problems: those that can be solved by following a well-known solution procedure
– i.e. Integer division using long division
– Procedural Paths: code paths a solver would follow when executing procedure for a particular 
problem
– Use this as a measure of difficulty
– “This is mainly because Andersen’s
framework does not account for pacing. In contrast,
our system allows a designer to control the rate of increase
in complexity, the length of time spent reinforcing concepts
before introducing new ones, and the frequency and order
in which unrelated concepts are combined together to construct
composite problems”
– *** Another goal/direction for my research
RELATED WORK
– Intelligent Tutoring Systems have “several models for capturing student knowledge and selecting 
problems”
– *** Possible future work research
– “Generated levels are not useful in isolation; they must be sequenced
into some design-relevant order, called a progression”
APPLICATION
– Game called Refraction
– split lasers into number fractions that need to satisfy certain values at end
SYSTEM OVERVIEW
– Level: “any completeable chunk of content”
– Level Progression: “sequence of levels that create an entire game”
– Solution Features: “properties of the solution to a level”
– “need to be able to extract features from the levels that can
be used to create an intelligent ordering” for progression
EXTRACTING SOLUTION FEATURES
– Example of following procedural traces and n-grams within the exercise of doing hand subtraction
– Certain steps have a letter output that is recorded to see if a certain type of step 
was used and how often (i.e. Was borrowing necessary for subtraction?)
– n-grams: n-length substrings of the trace
– Example: Trace = ABABCABAB
– 1-grams: {A, B, C}
– 2-grams: {AB, BA, BC, CA}
– 3-grams: {ABA, BAB, ABC, BCA, CAB}
– 1-grams are fundamental concepts
– Compare complexity by comparing n-grams
– They used these general concepts to build their own similar, but not identical, system
– their game didn’t fit this model perfectly well, so they broke their game down into 
graph objects that they thought were more representative
– they had fundamental graph objects (similar to 1-grams), that could then build into 
more complex graph objects by combining these defined fundamental graph objects
AUTOMATICALLY GENERATING LEVELS
– “We applied the level generation process described by Smith et
al. [30] to generate a large and diverse database of puzzles”
– *** Look into this for our system?
CREATING A PROGRESSION
– n-grams = graphlets (their specific type of n-gram)
– “To summarize, given two levels L1 and L2, L1 is considered conceptually simpler if, for
some positive integer n, the set of n-grams of L1 is a strict subset of the set of n-grams of L2″
– if a level contains the steps required for another level, it is more complex (has the same and 
more basically)
– Because of several issues, their approach was create a rather large library of generated levels 
to choose from, and choose a select few that represent an effective progression
– model tracks whether player has completed a problem containing each component
– also track n-grams of those components (up to very small n as values get exponentially huge)
– hard to know what to do on failure
– General Framework:
– set of problems
– domain of concepts
– player model
– These three things are what are used to generate sequence of problems for the player
– Choosing the Next Problem
– given current model state and set of problems, what is appropriate next problem?
– dynamic cost model
– cost of problem, p, is weighted sum of the n-grams in the trace of p
– weight has 2 components:
– one based on what model knows about player
– one designer-specified weight
– Player Model Cost:
“First, at each point in the progression, for a given n-gram
x, the player model assigns a cost k(x). This cost should
be high for unencountered n-grams and low for ones already
mastered, which will ensure more complex problems have a
higher cost than simpler ones with respect to the player’s history”
– Designer Added Cost:
“as expert designers, we know
(possibly from data gathered during user tests) that particular
concepts are more challenging than others or should otherwise
appear later in the progression”
– “Thus, given a library of problems P, choosing the next problem
pnext consists of finding the problem with the closest cost
to some target value T”
– “In order for this sequencing policy to be effective, it requires
a large library of levels from which to choose. The levels
should be diverse, covering the space of all interesting solution
features. Furthermore, in order to enable effective control
of pacing, this space should be dense enough that the progression
can advance without large conceptual jumps”
– *** Supports need for my thesis work

HFFWS Thesis Project – Theory for General Generation System Architecture

November 6, 2019

HFFWS Puzzle Generation System

General System Architecture

General Notes

Pulley Varieties

I wanted to start with sketching out the general structure of a single puzzle type to help me get a better idea of what a useful general structure might look like for the overall puzzle generating system I want to make.

  • Hook on an end to latch onto other objects
  • Object to move can be used as a platform
  • Open heavy door
  • Focus on rotation of wheel
  • Build a pulley
  • (Rope puzzle) Move two rope conjoined objects somewhere to accomplish a goal

Breakdown of what I can currently alter/generate in rope/pulley tool

  • Objects (at ends of rope)
  • Objects (for wheels)
  • Length (of rope)
  • Position (of rope)
  • Position(s) (of wheel(s))

I then quickly sketched out what I could change with the current controllable parameters to match the various puzzle variations (I only did the first three for now just to work it into testing quicker).

Hook on end

  • Objects at ends
    • Hook
    • Grabbing Mass (i.e. small sphere)
  • Outside objects
    • Objects that need pulled by hook

Objects attached can be used as platforms

  • Objects at ends
    • Platform type objects
  • Outside objects
    • Mass objects to influence pulley movement

Open heavy door

  • Objects at ends
    • Heavy Door
  • Outside objects
    • Mass objects to influence pulley movement

Architecture Design (1st Pass)

The overall flow of information is:
GenerationManager -> ScenarioManager -> “Create” type classes

GenerationManager

Passes down highest level information to ScenarioManager. This will include puzzle type, variation type within that puzzle type, and any other high level information such as overall positioning or how many scenarios in total to generate.

ScenarioManager

Will take that information and use it to determine which “Create” type classes will need to be used (or have the option of being used), how many times to use each, and what other information needs to be passed on to them (the “Create” type classes) to properly build out the desired scenario.

“Create” type Class

Use the information passed down to them from the ScenarioManager to create objects that satisfy the needs of the desired scenario. Within these bounds, in then adds variation to what it creates to vary its creations while still meeting the requirements given by the ScenarioManager

All the “Create” type classes will need an interface or inheritance of some kind to make them all similar types of objects to make grouping them and using them a bit easier.

Thesis Current Resources and Citations

October 31, 2019

Academic Resources

Current Citations

I just wanted to have a list of all my current sources I have compiled that may be useful for my thesis here. This list will be modified over time as I dtermine which topics I will not get to in my thesis, and which topics need more support, but this is a pretty good foundation for now.

  1. [1]J. L. Anderson and M. Barnett, “Learning Physics with Digital Game Simulations in Middle School Science,” Journal of Science Education and Technology, vol. 22, no. 6, pp. 914–926, Dec. 2013.
  2. [2]M.-V. Aponte, G. Levieux, and S. Natkin, “Measuring the level of difficulty in single player video games,” Entertainment Computing, vol. 2, no. 4, pp. 205–213, Jan. 2011.
  3. [3]S. Arnab et al., “Mapping learning and game mechanics for serious games analysis: Mapping learning and game mechanics,” British Journal of Educational Technology, vol. 46, no. 2, pp. 391–411, Mar. 2015.
  4. [4]E. Butler, E. Andersen, A. M. Smith, S. Gulwani, and Z. Popović, “Automatic Game Progression Design through Analysis of Solution Features,” 2015, pp. 2407–2416.
  5. [5]M. J. Callaghan, K. McCusker, J. L. Losada, J. Harkin, and S. Wilson, “Using Game-Based Learning in Virtual Worlds to Teach Electronic and Electrical Engineering,” IEEE Transactions on Industrial Informatics, vol. 9, no. 1, pp. 575–584, Feb. 2013.
  6. [6]M. Callaghan, M. Savin-Baden, N. McShane, and A. G. Eguiluz, “Mapping Learning and Game Mechanics for Serious Games Analysis in Engineering Education,” IEEE Transactions on Emerging Topics in Computing, vol. 5, no. 1, pp. 77–83, Jan. 2017.
  7. [7]D. B. Clark, B. C. Nelson, H.-Y. Chang, M. Martinez-Garza, K. Slack, and C. M. D’Angelo, “Exploring Newtonian mechanics in a conceptually-integrated digital game: Comparison of learning and affective outcomes for students in Taiwan and the United States,” Computers & Education, vol. 57, no. 3, pp. 2178–2195, Nov. 2011.
  8. [8]M. M. Cruz-Cunha, Ed., Handbook of Research on Serious Games as Educational, Business and Research Tools. IGI Global, 2012.
  9. [9]A. A. Deshpande and S. H. Huang, “Simulation games in engineering education: A state-of-the-art review,” Computer Applications in Engineering Education, vol. 19, no. 3, pp. 399–410, Sep. 2011.
  10. [10]M. D. Dickey, “Game design narrative for learning: Appropriating adventure game design narrative devices and techniques for the design of interactive learning environments,” Educational Technology Research and Development, vol. 54, no. 3, pp. 245–263, 2006.
  11. [11]J. Dormans and S. Bakkes, “Generating Missions and Spaces for Adaptable Play Experiences,” IEEE Transactions on Computational Intelligence and AI in Games, vol. 3, no. 3, pp. 216–228, Sep. 2011.
  12. [12]M. Ebner and A. Holzinger, “Successful implementation of user-centered game based learning in higher education: An example from civil engineering,” Computers & Education, vol. 49, no. 3, pp. 873–890, Nov. 2007.
  13. [13]M. Eraut, “Non-formal learning and tacit knowledge in professional work,” British Journal of Educational Psychology, vol. 70, no. 1, pp. 113–136, Mar. 2000.
  14. [14]D. Farrell and D. Moffat, “Cognitive Walkthrough for Learning Through Game Mechanics,” in European Conference on Games Based Learning, 2013, p. 163.
  15. [15]H. Fernandez, K. Mikami, and K. Kondo, “Adaptable game experience through procedural content generation and brain computer interface,” 2016, pp. 1–2.
  16. [16]A. Foster, “Games and motivation to learn science: Personal identity, applicability, relevance and meaningfulness,” Journal of Interactive Learning Research, vol. 19, no. 4, p. 597, 2008.
  17. [17]C. Franzwa, Y. Tang, A. Johnson, and T. Bielefeldt, “Balancing Fun and Learning in a Serious Game Design:,” International Journal of Game-Based Learning, vol. 4, no. 4, pp. 37–57, Oct. 2014.
  18. [18]J. Fraser, M. Katchabaw, and R. E. Mercer, “A methodological approach to identifying and quantifying video game difficulty factors,” Entertainment Computing, vol. 5, no. 4, pp. 441–449, Dec. 2014.
  19. [19]J. P. Gee, “What video games have to teach us about learning and literacy,” Computers in Entertainment, vol. 1, no. 1, p. 20, Oct. 2003.
  20. [20]J. P. Gee, “Good video games and good learning,” in Phi Kappa Phi Forum, 2005, vol. 85, p. 33.
  21. [21]B. Gregorcic and M. Bodin, “Algodoo: A Tool for Encouraging Creativity in Physics Teaching and Learning,” The Physics Teacher, vol. 55, no. 1, pp. 25–28, Jan. 2017.
  22. [22]R. H. Mulder, “Exploring feedback incidents, their characteristics and the informal learning activities that emanate from them,” European Journal of Training and Development, vol. 37, no. 1, pp. 49–71, Jan. 2013.
  23. [23]T. Hainey, T. M. Connolly, E. A. Boyle, A. Wilson, and A. Razak, “A systematic literature review of games-based learning empirical evidence in primary education,” Computers & Education, vol. 102, pp. 202–223, Nov. 2016.
  24. [24]P. Hämäläinen, X. Ma, J. Takatalo, and J. Togelius, “Predictive Physics Simulation in Game Mechanics,” 2017, pp. 497–505.
  25. [25]M. Hendrikx, S. Meijer, J. Van Der Velden, and A. Iosup, “Procedural content generation for games: A survey,” ACM Transactions on Multimedia Computing, Communications, and Applications, vol. 9, no. 1, pp. 1–22, Feb. 2013.
  26. [26]R. Hunicke, M. LeBlanc, and R. Zubek, “MDA: A Formal Approach to Game Design and Game Research,” p. 5.
  27. [27]I. Iacovides, P. McAndrew, E. Scanlon, and J. Aczel, “The gaming involvement and informal learning framework,” Simulation & Gaming, vol. 45, no. 4–5, pp. 611–626, 2014.
  28. [28]P. Lameras, S. Arnab, I. Dunwell, C. Stewart, S. Clarke, and P. Petridis, “Essential features of serious games design in higher education: Linking learning attributes to game mechanics: Essential features of serious games design,” British Journal of Educational Technology, vol. 48, no. 4, pp. 972–994, Jun. 2017.
  29. [29]H. B. Lisboa, “3D VIRTUAL ENVIRONMENTS FOR MANUFACTURING AUTOMATION,” vol. 6, p. 9, 2014.
  30. [30]R. Lopes, T. Tutenel, and R. Bidarra, “Using gameplay semantics to procedurally generate player-matching game worlds,” 2012, pp. 1–8.
  31. [31]S. D. Mohanty and S. Cantu, “Teaching introductory undergraduate physics using commercial video games,” Physics Education, vol. 46, no. 5, p. 570, 2011.
  32. [32]S. Moser, J. Zumbach, and I. Deibl, “The effect of metacognitive training and prompting on learning success in simulation-based physics learning,” Science Education, vol. 101, no. 6, pp. 944–967, Nov. 2017.
  33. [33]C. Peach, D. Rohrick, D. Kilb, J. Orcutt, E. Simms, and J. Driscoll, “DEEP learning: Promoting informal STEM learning through ocean research videogames,” in Oceans-San Diego, 2013, 2013, pp. 1–4.
  34. [34]J.-N. Proulx, M. Romero, and S. Arnab, “Learning Mechanics and Game Mechanics Under the Perspective of Self-Determination Theory to Foster Motivation in Digital Game Based Learning,” Simulation & Gaming, vol. 48, no. 1, pp. 81–97, Feb. 2017.
  35. [35]M. Qian and K. R. Clark, “Game-based Learning and 21st century skills: A review of recent research,” Computers in Human Behavior, vol. 63, pp. 50–58, Oct. 2016.
  36. [36]S. Sampayo-Vargas, C. J. Cope, Z. He, and G. J. Byrne, “The effectiveness of adaptive difficulty adjustments on students’ motivation and learning in an educational computer game,” Computers & Education, vol. 69, pp. 452–462, Nov. 2013.
  37. [37]M. Shaker, M. H. Sarhan, O. A. Naameh, N. Shaker, and J. Togelius, “Automatic generation and analysis of physics-based puzzle games,” 2013, pp. 1–8.
  38. [38]N. Shaker, M. Nicolau, G. N. Yannakakis, J. Togelius, and M. O’Neill, “Evolving levels for Super Mario Bros using grammatical evolution,” 2012, pp. 304–311.
  39. [39]G. Smith, “Understanding procedural content generation: a design-centric analysis of the role of PCG in games,” 2014, pp. 917–926.
  40. [40]V. Wendel, M. Gutjahr, S. Göbel, and R. Steinmetz, “Designing collaborative multiplayer serious games: Escape from Wilson Island—A multiplayer 3D serious game for collaborative learning in teams,” Education and Information Technologies, vol. 18, no. 2, pp. 287–308, Jun. 2013.
  41. [41]K. A. Wilson et al., “Relationships Between Game Attributes and Learning Outcomes: Review and Research Proposals,” Simulation & Gaming, vol. 40, no. 2, pp. 217–266, Apr. 2009.
  42. [42]J.-C. Woo, “Digital Game-Based Learning Supports Student Motivation, Cognitive Success, and Performance Outcomes.,” Journal of Educational Technology & Society, vol. 17, no. 3, 2014.
  43. [43]G. N. Yannakakis and J. Togelius, “Experience-Driven Procedural Content Generation,” IEEE Transactions on Affective Computing, vol. 2, no. 3, pp. 147–161, Jul. 2011.

Thesis Project – Concepts for System to Control Script Timings

October 24, 2019

Working with the HFFWS

System for Properly Timing Running of Scripts

Discovering the Timing Issues with the HFFWS Tools

While working with the Rope script in the Human API, I was again encountering timing issues when trying to accomplish tasks through script. I was having trouble instantiating and connecting rigid bodies to the ends of the rope in script. I ran several tests to confirm the timing issues I was having again.

Test #1
  • 2 Rigid Body objects exist in scene
  • Script has 2 gameObject references for those objects
  • Script sets startBody and endBody references to those objects at Start

This did not work. The references could be seen as being properly assigned in the Rope script in the editor, but that connection was being made too late and having no affect on the objects.

Test #2
  • 2 Rigid Body objects exist in scene
  • Script has 2 gameObject references for those objects
  • Script sets startBody and endBody references to those objects at Awake

This did have the intended result of connecting the rigid body objects to the rope.

Test #3
  • All done in Awake
  • 2 Rigid Body objects instantiated into scene
  • Script sets startBody and endBody references to those objects at Awake

This did work once, although I had some issues repeating it afterward. The objects were prefabs which were instantiated in Awake. GameObject references were created for these, and used for the values of the Rope script startBody and endBody, all done in Awake as well.

Test #4
  • Start or Awake is irrelevant here
  • Object with Rope script starts deactivated
  • 2 Rigid Body objects instantiated into scene
  • Script sets startBody and endBody references to those objects
  • Rope object is then activated

This is the best solution that works, as it can be done in Awake or Start. This leads to a much more controllable environment which is ideal for our system. This will be the foundation for the main systematic approach.

System for Controlling Awake Calls for HFFWS Objects

Deactivating/Activating Objects or Enabling/Disabling Scripts

The combinations of all of these tests, most notably Test #4, showed that some important connections are made during the Awake phase of many HFFWS objects. It is important to note that Test #4 specifically indicates that a lot of the important functionality may be happening in the Awake method of the scripts of the individual objects themselves (which is important to differentiate from some system wide class that is making connections in Awake). This important differntiation leads to this option of simply deactivating objects with HFFWS scripts (or possibly disabling the scripts specifically) to force their Awake methods not to run before my systems are ready for them. I can run my scripts, and then activate the HFFWS objects so their Awake methods run at that point instead.

This concept seems the most promising for safely and consistently controlling the timing of my script elements versus those of the HFFWS objects (since I do not have access to their core scripts). As this is a common issue I have run into with many objects, it makes sense to make a small script to attach to any prefabs I will be instantiating which can just hold references to gameObjects and/or scripts that I will need to have deactivated or disabled initially, and then activate or enable after everything is properly set.

Script Execution Order

This was actually the first idea to get around these timing issues, but it seems less safe so it will most likely only be used as a last resort. The HFFWS package already has a lot of various scripts ordered in the script execution order of Unity, so there is already a precedent set by them for when a lot of things should run relative to each other.

To test that this worked in the first place, I ran a test with everything being set in Awake not working but moving it to the first script in the script execution order actually made it work. This was a similar test with connecting rigid bodies to a Rope script object.

This is not an ideal process to use however as it can easily lead to weird behavior that is very hard to debug and will not scale well in general. Because of these factors, I will mostly be looking to expand upon the other system concept.

HFFWS Working with the Rope Script

October 23, 2019

Human Fall Flat Workshop

Rope Script

Identifying Key Components

The main components of controllilng the rope script when it comes to placing it and connecting it with objects, are the handles and the start/end bodies. The handles are transform positions that dictate key points on the rope. Two is the standard, as they determine a beginning and the end for the rope, but more can be used to direct the rope in multiple directions. The start and end bodies are rigid body references which determine objects that will be physically connected to the ends of the rope.

The discovery with how the handles work opens the possibility for more rope configurations other than flat ropes which fall over other objects. Being able to guide a rope around in interesting patterns could potentially allow for setups that are more similar to actual pulley setups, where a rope needs to go around a wheel object at least once.

The first prefab I worked with that used the Rope script had rigid body objects with Fixed Joints on them that seemed necessary at first. While working with another rope using prefab (the hook), I found that it did not use these Fixed Joints. This showed that these are actually not manditory for connecting rigid bodies to the rope. It is just the rigid body reference on the Rope script itself for the startBody and endBody. Further investigation may show what purpose the Fixed Joints served.

Thesis Puzzle Generation – Pulley Information and Variations

October 17, 2019

Thesis Puzzle Generation

Pulley Variants

Pulley Wikipedia Page

Info #1 – Link

By: Wikipedia


Pulley

General

The wikipedia definition of a pulley is:
“a wheel on an axle or shaft that is designed to support movement and change of direction of a taut cable or belt, or transfer of power between the shaft and cable or belt”
The pulleys we will be generating are generally simpler setups. They mostly consist of a rope with a physics object (rigid body) on each end. This is because of how the system is used to create the pulleys. Ropes cannot be intertwined between objects accurately, so they are just generated above their setup locations and allowed to fall into position. As a final note, the pulley can also be tied into demonstrating the wheel and axle simple machine as well.

Varieties

Hook on an end to latch onto other objects

This focuses on the pulley’s inherent nature of changing the direction of force. The hooks allow the player to attach one end to various objects to move them into place. It could also be as simple as lifting other objects.

Object to move can be used as a platform
Focus on rotation of wheel

This would use the weight/friction of rope to rotate/spin the wheel that it is on while rope is moved. I am not sure how well the HFFWS system works with this.

Build a Compound Pulley

Since system does not allow for setup of complex block and tackle style pulleys, setup the environment for the player to build their own. This gets around the inability of the system itself by letting the player set it up. This would require building the environment in such a way (such as veritcal moving platforms or stairs around) to let the player move the rope through a series of wheels to build this pulley.

Lift Heavy Object

One end attached of the rope is fixed to a very heavy or massive object. The other end is where work is done to try to lift the heavy object. Examples of this could be a large door or simply a heavy platform. The system focuses on maximizing the overall force output. This will mostly be done by focusing on the free end of the rope, but applying an aiding upward force to the heavy mass may also be factored in.

Thesis Puzzle Generation – Seesaw Information and Variations

October 16, 2019

Thesis Puzzle Generation

Seesaw Variants

Lever Wikipedia Page

Info #1 – Link

By: Wikipedia


Seesaw

General

It’s basically a lever, which has the following definition from wikipedia:
Lever: “a simple machine consisting of a beam or rigid rod pivoted at a fixed hinge, or fulcrum A lever is a rigid body capable of rotating on a point on itself”

There are 3 classes of levers:
Class 1:

  • Fulcrum in the middle
  • Effort is applied on one side of the fulcrum and the resistance (or load) on the other side
  • Examples: seesaw, crowbar or a pair of scissors
  • Mechanical Advantage may be greater than, less than, or equal to 1

Class 2:

  • Resistance (or load) in the middle
  • Effort is applied on one side of the resistance and the fulcrum is located on the other side
  • Examples: a wheelbarrow, a nutcracker, a bottle opener or the brake pedal of a car
  • Load arm is smaller than the effort arm
  • Mechanical Advantage > 1
  • Called: force multiplier lever

Class 3:

  • Effort in the middle
  • Resistance (or load) is on one side of the effort and the fulcrum is located on the other side
  • Examples: a pair of tweezers, a hammer, or the jaw
  • Effort arm is smaller than the load arm.
  • Mechanical Advantage < 1
  • Called: speed multiplier lever

I will first be focusing on alterations of lever class 1 (which seesaw generally falls under) but it is good to keep the other classes in mind as options for later development. The variation of levers (and in turn, seesaws) can be broken down into varying a few factors, which then lead to a few direct varied physics outcomes. I separate them below:

Varied positions of: effort, fulcrum, resistance/load
Lead to varied: force, velocity, final positions

Varieties

The following are just a few takes on overall variations of seesaw and lever setups to provide varied experiences with the same general simple machine.

  • Maximize force to move heavy object
  • Move object at varying velocities
  • Jam seesaw
Maximize force to move heavy object

This follows the same general lever setup each time, with the fulcrum near one end, the effort is applied at this end closest to the fulcrum, and the load is found away at the other end of the lever. The load and fulcrum have little flexibility in this setup, but the effort can be applied in a couple different ways. This can be moving a heavy mass over to it, or dropping a mass onto it from a height.

Move object at varying velocities

There is a velocity of the lever points dependent on the difference in mass at the ends of the lever, which can be used to create a few different effects. A very high velocity can lead to creating a projectile of sorts. Understanding the difference in weights and how they pertain to the overall velocity of the system could be used for timing challenges. Finally, understanding that getting similar forces on each end of the seesaw will provide a slow and steady motion could be used for challenges where the most time possible is needed from the movement of the lever (maybe the seesaw carrying something all the way up resets the seesaw by destroying the object).

Jam seesaw

This approach is just using the seesaw to lift one end, then placing an object in the gap so that further alterations to the seesaw do not allow it to return back down fully to its resting position. This will most likely be used to create ramps of some kind.

HFFWS Fixing and Debugging the Pulley Generator

October 14, 2019

Pulley System Generator

Fixing

Notes:

– Deselecting “Fix Start” and “Fix End” on the Rope component allows for the creation of a simple rope that appears to operate normally, but it is not connected to anything
– “Fix Start” and “Fix End” appear necessary to connect the rope to physics objects

TESTING

Issue 1:

Instantiated Rope is a completely broken mess of physics masses jumping around.

Test 1:

Changing objects at ends to TestBox and TestSphere just to simplify the physics objects involved to see if that makes diagnosing the problems easier

Results:

This did result in a more stable rope. It was still not in the correct location, but the rope was no longer just a jumbled bumbling mess of masses.

Issue 2:

Rope is instantiated in a strange position away from most other objects.

– This appears to be because of the ropeStart and ropeEnd positions. The rope is still following their positions, and they are far away.
– The ropeStart and ropeEnd positions however do have the same Y and Z values, suggesting that they are following the logic to some degree, but not as intended.

Test 1:

Change instantiation process so that pulley end objects are instantiated as children of the overall pulley prefab.

– The idea is that this will help with relative positioning
– I am not sure if I can use this method with a prefab that has not been instantiated yet (seems strange using the transform of an object that does not exist yet)

Results:

– This did properly situate the rope end physics objects at the ends of the rope, however the rope was still spawning in a location that was unintended, below everything else.
– The rope also does not appear to actually be bound by the end objects either.

Test 2:

Debug.Log all the positions to see if the positions occurring at run time are matching those in the script.

Results:

– The script dictates that the start physics object is positioned at (-9.5, 0, 0) – (1.0, 0, 0), so (-10.5, 0, 0) relative to its starting position, and the end physics object is the reversse (+9.5 and +1.0). This indicates that there should be 21 units between them. This did happen, but the values are very different looking.
– The start instantiated at position: (-2.5. -14, 35.5)
– The end instantiated at position: (18.5, -14, 35.5)
– This indicates that the parent position they are referencing is: (8.0, -14, 35.5)
– Both RopeStart and RopeEnd child objects’ positions matchup with the weird physics object positions as well, so it’s before them.

SOLVED:

Turns out the overall prefab had the exact transform position (8.0, -14, 35.5) so those values were getting passed into everything as the starting parent transform value

Issue 3:

Rope is not actually connected to the physics objects at the ends.

– This is accomplished by setting the connectedBody reference of the RopeStart and RopeEnd objects to the rigid body components of the start physics object and end phsyics object respectively.
– This is happening as seen in the references at run time, which makes me expect that this connection is still somehow ‘ being made before the instantiation of the full pulley setup.

Test 1:

Run everything in Awake instead of Start

– I thought running everything sooner may help set the connection up earlier.

Results:

– There were no noticeable differences.

NEXT STEPS

Figure out how to actually connect the objects to the ends of the rope.

HFFWS Rope Pulley System Issues and Strange Audio Instantiation

October 9, 2019

HFFWS Thesis Project

Creating Pulley System

Creating Pulley in HFFWS

Working with the Rope Script

The Rope script is the central focus for the pulley system, but the Fixed Joint that goes with the rigid body of the ropeStart and ropeEnd also play a crucial role which makes getting everything to work together nicely a bit of a challenge. I want the setup to be able to take in a prefab for each end of the pulley and instantiate those objects in the proper position, and then become connectedBody for each of these Fixed Joints. Similar to other issues I have had before with instantiating objects, there seems to be a critical timing factor needed on top of the fact that the objects just physically behave very weirdly when created.

I think currently there is some collision issue that is occurring because the rope ends up spawning very far away from where it is intended to spawn and also waves around violently. Meanwhile, the objects that are supposed to be at the rope ends are spawning in the correct position. The demolition ball just falls to the ground while the hinged platform moves back and forth some.

The connectedBody reference on the Fixed Joints is something that needs to be done on initialization to work properly, so I have been trying to instantiate the rope end objects first, then setting the prefab’s Fixed Joint connectedBody’s to these objects’ rigidbody’s, and then instantiating that prefab, but this is clearly leading to some significant errors. I will have to try some other approaches where I change the order of events to see if I can get more desireable results, or just understand where the errors are occurring more accurately.

Weird Audio Issue

Weird Siege(Clone) Issue There was a Siege(Clone) object being instantiated at game start. This had lots of audio files. I tracked this to the Level gameObject which has a SoundManager component. This had a Stored State of Siege which I removed. This stopped Siege from instantiating anymore. I am not sure how this got set in the first place (may happen when loading other scenes or checking the prefab scenes). The SoundLibrary component also has a Siege reference in its path: Path = 6Siege. However this does not appear to be doing anything currently.

How to Spawn Objects anywhere in Unity3D from Unity3D College

October 7, 2019

Spawn Objects in Unity

Basics and Addressables

How to Spawn Objects anywhere in Unity3D (and a bit of addressables)

Youtube – Link

By: Unity3d College


I wanted to note this as a possible useful source since my thesis work will involve spawning a lot of objects, and in varied and rather precise positions. With how important of a focus it will be, I figure more sources on the generals of spawning objects would be good to know to give me as many tools to use as possible.