ScreenshotMovie

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(Screenshot output directory string in each script changed to “ScreenshotMovieOutput” to include the script name character-for-character, and to include the contextual word “Output” over the redundant “Folder”)
(Changed output filename in each script to be in the form “shot 0005.png” instead of “0005 shot.png” because professional apps that recognize image sequences more commonly look for the sequence number at the end (Photoshop included).)
Line 40: Line 40:
  
 
function Update () {
 
function Update () {
     // name is "realFolder/0005 shot.png"
+
     // name is "realFolder/shot 0005.png"
     var name = String.Format("{0}/{1:D04} shot.png", realFolder, Time.frameCount );
+
     var name = String.Format("{0}/shot {1:D04}.png", realFolder, Time.frameCount );
  
 
     // Capture the screenshot
 
     // Capture the screenshot
Line 86: Line 86:
 
void Update()
 
void Update()
 
{
 
{
// name is "realFolder/0005 shot.png"
+
// name is "realFolder/shot 0005.png"
var name = string.Format("{0}/{1:D04} shot.png", realFolder, Time.frameCount);
+
var name = string.Format("{0}/shot {1:D04}.png", realFolder, Time.frameCount);
  
 
// Capture the screenshot
 
// Capture the screenshot
Line 130: Line 130:
 
def Update ():
 
def Update ():
 
if captureEnabled:
 
if captureEnabled:
# name is realFolder/0005 shot.png
+
# name is realFolder/shot 0005.png
name = string.Format("{0}/{1:D04} shot.png", realFolder, Time.frameCount)
+
name = string.Format("{0}/shot {1:D04}.png", realFolder, Time.frameCount)
 
 
 
# Capture the screenshot
 
# Capture the screenshot
 
Application.CaptureScreenshot(name)
 
Application.CaptureScreenshot(name)
 
</syntaxhighlight>
 
</syntaxhighlight>

Revision as of 00:58, 18 March 2014

Description

This script saves a sequence of images when you hit play. Framerate will run at a constant rate (And game time adjusted). When complete you can import the image sequence into quicktime pro to create a movie out of it.

Use

Create a new javascript file in your Unity Project. (It does not have to be in an "Editor" folder.)

Name it "ScreenshotMovie".

Attach it to the camera you wish to record from.

Adjust settings to your liking.

Hit play and it should dump out image files. They will be in your project's root folder, so they will not appear in the Unity Editor.

// The folder we place all screenshots inside.
// If the folder exists we will append numbers to create an empty folder.
var folder = "ScreenshotMovieOutput";
var frameRate = 25;
 
private var realFolder = "";
 
function Start () {
    // Set the playback framerate!
    // (real time doesn't influence time anymore)
    Time.captureFramerate = frameRate;
 
    // Find a folder that doesn't exist yet by appending numbers!
    realFolder = folder;
    count = 1;
    while (System.IO.Directory.Exists(realFolder)) {
        realFolder = folder + count;
        count++;
    }
    // Create the folder
    System.IO.Directory.CreateDirectory(realFolder);
}
 
function Update () {
    // name is "realFolder/shot 0005.png"
    var name = String.Format("{0}/shot {1:D04}.png", realFolder, Time.frameCount );
 
    // Capture the screenshot
    Application.CaptureScreenshot (name);
}



CSharp version.

using UnityEngine;
 
public class ScreenshotMovie : MonoBehaviour
{
	// The folder we place all screenshots inside.
	// If the folder exists we will append numbers to create an empty folder.
	public string folder = "ScreenshotMovieOutput";
	public int frameRate = 25;
 
	private string realFolder = "";
 
	void Start()
	{
		// Set the playback framerate!
		// (real time doesn't influence time anymore)
		Time.captureFramerate = frameRate;
 
		// Find a folder that doesn't exist yet by appending numbers!
		realFolder = folder;
		int count = 1;
		while (System.IO.Directory.Exists(realFolder))
		{
			realFolder = folder + count;
			count++;
		}
		// Create the folder
		System.IO.Directory.CreateDirectory(realFolder);
	}
 
	void Update()
	{
		// name is "realFolder/shot 0005.png"
		var name = string.Format("{0}/shot {1:D04}.png", realFolder, Time.frameCount);
 
		// Capture the screenshot
		Application.CaptureScreenshot(name);
	}
}



Boo version. I added a toggle that defaults to off so you don't need to add and remove it from a camera when it's not needed to capture.

import UnityEngine
 
class ScreenshotMovie (MonoBehaviour): 
 
	public folder as string = "ScreenshotMovieOutput"
	public frameRate as int = 25
	public captureEnabled as bool = false
 
	private realFolder as string
 
	def Start ():
		if captureEnabled:
			# Set the playback framerate
			# (real time doesn't influence time anymore)
			Time.captureFramerate = frameRate
 
			# Find a folder that doesn't exist yet by appending numbers
			realFolder = folder
			count as int = 1
			while System.IO.Directory.Exists(realFolder):
 
				realFolder = folder + count
				count += 1
 
			# Create the folder
			System.IO.Directory.CreateDirectory(realFolder)
 
	def Update ():
		if captureEnabled:
			# name is realFolder/shot 0005.png
			name = string.Format("{0}/shot {1:D04}.png", realFolder, Time.frameCount)
 
			# Capture the screenshot
			Application.CaptureScreenshot(name)
Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox