Monday, March 11, 2019

Unity capture animation to sprites (with transparency)

  1. Create a new Scene
  2. In game tab, set the resolution to be the same as your captured sprites should be
  3. Drag your prefab or gameobject for animation into your scene and position it as you like
  4. Save below code as FrameDump.cs
  5. Drag the FrameDump.cs to camera object
  6. Set the "frame count" to number of frames to capture. For, example, if you have created an animation with Samples 60 and it runs for 1 minute, set this to 60. Open your animation on your animation tab in Unity to see this
  7. Run your new Scene in editor by clicking Play
  8. You can stop after the "frame count" counts down to 0
  9. The files are saved to c:\temp\cap


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

public class FrameDump: MonoBehaviour {
 string folder = "C:\\temp\\cap";
 [SerializeField]
 int frameCount = 60;
 int MAXFRAMES = 0;

 // Initialization
 void Start() {
  // delete folder (and anything inside it) if it exists
  if (System.IO.Directory.Exists(folder)) {
   System.IO.Directory.Delete(folder, true);
  }
  // create the folder for dumps
  System.IO.Directory.CreateDirectory(folder);
  MAXFRAMES = frameCount;

 }

 private void OnPostRender() {
  if (frameCount <= 0)
   return;
  string filename = string.Format("{0:000000}", (MAXFRAMES - frameCount));
  Debug.Log("File: " + filename);
  //Create a new texture with the width and height of the screen
  Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.ARGB32, false);
  //Read the pixels in the Rect starting at 0,0 and ending at the screen's width and height
  texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, false);
  texture.Apply();
  File.WriteAllBytes(folder + "\\" + filename + ".png", texture.EncodeToPNG());
  Destroy(texture);
  frameCount--;
 }
}


Saturday, January 12, 2019

Consuming from specific Offset, in a Topic, with Confluent Kafka .Net client


From the example in the home page help here https://github.com/confluentinc/confluent-kafka-dotnet#basic-consumer-example 

Change below
c.Subscribe("my-topic");

and update it as below (assuming topic is "my-topic" and offset is 123456)

c.Assign(new TopicPartitionOffset(new TopicPartition("my-topic", new Partition()), new Offset(123456)));


Monday, January 7, 2019

Confluent-kafka-dotnet Consumer (client) - sasl configuration example

To use SSL Auth via SASL for Confluent's .NET Client for Apache Kafka,
update the example in the home page help here https://github.com/confluentinc/confluent-kafka-dotnet#basic-consumer-example with below config


var config = new ConsumerConfig

{
    BootstrapServers = brokerList,
    GroupId = groupId,
    EnableAutoCommit = false,
    StatisticsIntervalMs = 5000,
    SessionTimeoutMs = 6000,
    AutoOffsetReset = AutoOffsetResetType.Earliest,
    SecurityProtocol = SecurityProtocolType.Sasl_Ssl,
    SaslMechanism = SaslMechanismType.ScramSha512,
    SaslUsername = "mykafkausername",
    SaslPassword = "mykafkapassword",
    SslCaLocation = "MyKafkaCA.pem" //PEM file location (you may have to copy this to the .bin location
};


Note: 1.0 beta3 has the below changes
AutoOffsetReset = AutoOffsetReset.Earliest,
SecurityProtocol = SecurityProtocol.SaslSsl,
SaslMechanism = SaslMechanism.ScramSha512,

Windows - check to see if a remote server port is open

We can use portqry tool for this. Windows server editions should already come with this tool.

if not already in windows, you can download a command line or UI version from below
https://support.microsoft.com/en-us/help/310099/description-of-the-portqry-exe-command-line-utility

Usage is as below.
For example, to check if servername has port 80 open, do below

portqry -n servername -e 80

Friday, January 4, 2019

Unity - How to take a screenshot in game with script (at a specific resolution)

Attach below script to any object in your game. Click Play in editor and at the desired point, press "z" in keyboard to take your screenshot as a png file (if game is built, use Ctrl-Z). The screenshot will be stored (ie; the save location) in your Unity project's root folder


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TakeScreenShot : MonoBehaviour {

 // Update is called once per frame
 void Update () {
#if UNITY_EDITOR
        if (Input.GetKey(KeyCode.Z))
#else
     if((Input.GetKey(KeyCode.RightControl) 
      || Input.GetKey(KeyCode.LeftControl)) 
        && Input.GetKeyDown(KeyCode.Z))
#endif
        {
            Debug.Log("Taking screenshot");
            ScreenCapture.CaptureScreenshot("ScreenShot-" + 
             UnityEngine.SceneManagement.SceneManager.GetActiveScene().name + 
             ".png");
            Debug.Log("Done");
        }           
    }
}


Tip: If you want a specific resolution of screenshot, make sure to set this in the player (ie; in Game tab)
In the below example, we are setting resolution to 2400 x 1200. When you use above script, the saved screenshot will have the same resolution.

See example below. Use + symbol to add custom resolutions

Saturday, October 20, 2018

Unity Shadows are too Dark or Light


In Unity Inspector, select your Light, and under Shadow Settings, use the Strength slider to change shadow to make it darker or lighter as you like


Friday, October 19, 2018

Oculus Developer: Android APK is signed with Signature Scheme V2, which is not yet supported.

If you are here getting an error uploading an APK to Oculus Store with a build with Unity, see down below

Go to the APK Folder and resign with V1 as below

"C:\Program Files\Java\jdk1.8.0_191\bin\jarsigner" -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore MyApp.keystore "My App Name.apk" "key alias name" -storepass mypassword -keypass mypassword2

If in Unity and you are getting error "Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates", try the change outlined below

Unity: Change build from Gradle to Internal. The apk will be generated using V1 signing, and no need to do the workaround above

Turn on Windows 11 Fast Boot

If windows starting is slow, to enable windows 11 fast startup/boot,  Press Windows + R, type powercfg.cpl, and hit Enter.  This will direct...