Unity games on Wii

I think old Unity versions supports exporting to 3DS/WIIU/WII and if I'm not mistaken, Wii uses C and you can use C with Unity. Back in 2015 was learning Unity because of that.

But to be honest, libraries for DevKit-Pro is quite complete, so, in my opinion, DevKit-Pro with any C IDE would be easier to use than Unity.
 
  • Like
Reactions: cheloruiz79
I think old Unity versions supports exporting to 3DS/WIIU/WII and if I'm not mistaken, Wii uses C and you can use C with Unity. Back in 2015 was learning Unity because of that.

But to be honest, libraries for DevKit-Pro is quite complete, so, in my opinion, DevKit-Pro with any C IDE would be easier to use than Unity.
Yes, but what about games that were made in Unity before hand (like Sonic Utopia.) How would you port something like that to the Wii if possible?
 
Yes, but what about games that were made in Unity before hand (like Sonic Utopia.) How would you port something like that to the Wii if possible?
You'd need the source code and literally translate everything to something the Wii can understand?
elmo-shrug.gif


Mind you, I never said I had experience with it, just knew it was possible back then.
 
You could port unity games to a Wii. As long as you don't make scenes too complex with Realtime lighting and keep things simple. Unity games work by taking raw source code (that was packed into a file for later use) and recompiles it in real-time. This is the main reason Unity games are easy to decompile. For what you have here, you'll need a c# interpreter to compile CIL code (AKA: Machine code not specified to a library or cpu), specifically you need to have a c# interpreter for the Wii. I don't think anyone has made a c# interpreter for the Wii, so Unity games on the Wii are still only a theory.
 
  • Like
Reactions: Tarmfot
Btw, today is the day. Yes, you can make small games for Wii without the SDK nor the Addon for Unity! The wii has the same architecture as the old macs (power pc). You can use Unity 2.6 to compile for macos ppc, take the game data folder and place it im the data folder of a current existing game like Jumpstart Pet Rescue and boot it on your console/dolphin!


image.png
 
  • Like
Reactions: Disorarara
Btw, today is the day. Yes, you can make small games for Wii without the SDK nor the Addon for Unity! The wii has the same architecture as the old macs (power pc). You can use Unity 2.6 to compile for macos ppc, take the game data folder and place it im the data folder of a current existing game like Jumpstart Pet Rescue and boot it on your console/dolphin!


View attachment 530119
Is it really just drag and drop and let the pc do everything for you or are you talking from the perspective of a developer like put the files inside and write the code around them and some stuff?
 
  • Like
Reactions: NitroShell
Is it really just drag and drop and let the pc do everything for you or are you talking from the perspective of a developer like put the files inside and write the code around them and some stuff?

I'm still exploring the limitations as developer. However for the main thing, yes, it's drag and drop! The important part is compiling for Mac PPC from Unity 2.6.0 (the official version + personal license is okay, no need to crack anything). You need to take all the stuff your game uses from the macos build:

  • Assembly-Csharp.dll
  • Assembly-CSharp-FirstPass.dll (if required)
  • mainData
  • SharedAssets0.assets (1, 2...all the ones you use)
  • UnityEngine.dll
  • unity default resources
  • Boo.Lang.dll
  • mscorlib.dll
  • UnityDomainLoad.exe

And place them in DecryptedRomPath/DATA/files/unity/Data (you can delete all the stuff that was there before).
You use WiimmTools to compile the ISO back, and launch the game. Your game with your code will run!

Limitations I discovered:

  • You can't use asset bundles (for now) as they are compiled to .wii and .ures by the SDK. We could make something to manually create them but otherwise, you won't be able to load them.
  • Normals seem completely off. It might be something with how the wii renders stuff.
  • When trying animations imported from an FBX, the model just disappears. No idea why (yet).
  • You can only use Wii Inputs if you use the original game's wii_cs, which is included by default in the SDK. With DNSpy or ILSpy you can get it.
  • Audio is not working for me. Probably bc the wii only recognizes DSP or PCM and Unity 2.5 only wav (that can be converted).
 

Attachments

Last edited by Manurocker95,
I'm still exploring the limitations as developer. However for the main thing, yes, it's drag and drop! The important part is compiling for Mac PPC from Unity 2.6.0 (the official version + personal license is okay, no need to crack anything). You need to take all the stuff your game uses from the macos build:

  • Assembly-Csharp.dll
  • Assembly-CSharp-FirstPass.dll (if required)
  • mainData
  • SharedAssets0.assets (1, 2...all the ones you use)
  • UnityEngine.dll
  • unity default resources
  • Boo.Lang.dll
  • mscorlib.dll
  • UnityDomainLoad.exe

And place them in DecryptedRomPath/DATA/files/unity/Data (you can delete all the stuff that was there before).
You use WiimmTools to compile the ISO back, and launch the game. Your game with your code will run!

Limitations I discovered:

  • You can't use asset bundles (for now) as they are compiled to .wii and .ures by the SDK. We could make something to manually create them but otherwise, you won't be able to load them.
  • Normals seem completely off. It might be something with how the wii renders stuff.
  • When trying animations imported from an FBX, the model just disappears. No idea why (yet).
  • You can only use Wii Inputs if you use the original game's wii_cs, which is included by default in the SDK. With DNSpy or ILSpy you can get it.
  • Audio is not working for me. Probably bc the wii only recognizes DSP or PCM and Unity 2.5 only wav (that can be converted).
You were writing it's just possible for small games. Have you found the limitations where it doesn't work anymore? Like how big can the game be... I guess I will have to play around with that to test things out. Thanks for the information
 
You were writing it's just possible for small games. Have you found the limitations where it doesn't work anymore? Like how big can the game be... I guess I will have to play around with that to test things out. Thanks for the information

Tbh, I just tested to load some images as UI, checking some inputs and loading 2 scenes. Imo, it can be as big as you want knowing the limitations of unity 2.x and the Wii (and I guess, no custom shaders). It's obvious that it is not the same as having the official playback engine, but there's no info at all about this either so x)

1759063928354.png


In addition, it would be nice to have a list of games made in Unity for Wii. The ones I confirmed were:
  • Jumpstart Pet Rescue (unity 2.5)
  • El chavo (unity 3.3 with 2.5 addon, before the 3.5 update)
  • Lead the meerkats (unity 2.6)
  • Big time rush (unity 3.5.6)-> this one is limiting as Unity 3 does not export for PPC excepting the Nintendo Wii.
 
Last edited by Manurocker95,
Excellent achievement, well done! I previously searched for the official Unity Wii and found nothing.

I followed your tutorial, and it works on both the emulator and the Wii, but I have a two problem:

1. I can't get your UnityEngine_Wii.cs file to work to create Wii Remote inputs. I imported your script and tried to call a variable named after this script, and I got this message.

C#:
Assets/test/NewBehaviourScript.cs(10,8): error CS0246: The type or namespace name `UnityEngine_Wii' could not be found. Are you missing a using directive or an assembly reference?

2. I can't get VisualStudio 2019 to work on this Unity 2.6.0. I entered it in preferences, but Unity opens UiCsiTE for me.
 
You were writing it's just possible for small games. Have you found the limitations where it doesn't work anymore? Like how big can the game be... I guess I will have to play around with that to test things out. Thanks for the information

Excellent achievement, well done! I previously searched for the official Unity Wii and found nothing.

I followed your tutorial, and it works on both the emulator and the Wii, but I have a two problem:

1. I can't get your UnityEngine_Wii.cs file to work to create Wii Remote inputs. I imported your script and tried to call a variable named after this script, and I got this message.

C#:
Assets/test/NewBehaviourScript.cs(10,8): error CS0246: The type or namespace name `UnityEngine_Wii' could not be found. Are you missing a using directive or an assembly reference?

2. I can't get VisualStudio 2019 to work on this Unity 2.6.0. I entered it in preferences, but Unity opens UiCsiTE for me.

1. No class is called UnityEngine_Wii, all the wii stuff is included (excepting WiiAudioStream, but we can't play PCMs anyway). You need to use the classes that are inside. If you get more comfy, you can separate them into multiple files. As you prefer.

2. You can't use anything but UniSciTE or a simple text editor like Sublime Text or VS Code; and even with that, you won't have intellisense nor any "modern" feature. Unity 2.6 is 2008 era x)
 
  • Like
Reactions: bonkmaykr
for visual Studio it's ok

I noticed that I don't have an update function for the input in this Wii code, can you give an example of how I should use these classes inside the script with the Unity API
 
for visual Studio it's ok

I noticed that I don't have an update function for the input in this Wii code, can you give an example of how I should use these classes inside the script with the Unity API

Something like


Code:
WiiRemote controllerState = WiiInput.GetControllerState(0U);
if (controllerState.GetButtonDown(WiiButton.ButtonA))
{
    Debug.Log("Player pressed (A) button");
}
 
Last edited by Manurocker95,
I tried this line inside the class
and I have these errors
public struct WiiClassic

C#:
WiiRemote controllerState = WiiInput.GetControllerState(0U);

        if (controllerState.GetButtonDown(WiiButton.ButtonA)){



        }

Code:
Assets/UnityEngine_Wii.cs(197,17): error CS1041: Identifier expected: `if' is a keyword
Assets/UnityEngine_Wii.cs(197,50): error CS1518: Expected `class', `delegate', `enum', `interface', or `struct'
Assets/UnityEngine_Wii.cs(202,29): error CS0116: A namespace can only contain types and namespace declarations
Assets/UnityEngine_Wii.cs(210,29): error CS0116: A namespace can only contain types and namespace declarations
Assets/UnityEngine_Wii.cs(216,29): error CS0116: A namespace can only contain types and namespace declarations
 
I tried this line inside the class
and I have these errors
public struct WiiClassic

C#:
WiiRemote controllerState = WiiInput.GetControllerState(0U);

        if (controllerState.GetButtonDown(WiiButton.ButtonA)){



        }

Code:
Assets/UnityEngine_Wii.cs(197,17): error CS1041: Identifier expected: `if' is a keyword
Assets/UnityEngine_Wii.cs(197,50): error CS1518: Expected `class', `delegate', `enum', `interface', or `struct'
Assets/UnityEngine_Wii.cs(202,29): error CS0116: A namespace can only contain types and namespace declarations
Assets/UnityEngine_Wii.cs(210,29): error CS0116: A namespace can only contain types and namespace declarations
Assets/UnityEngine_Wii.cs(216,29): error CS0116: A namespace can only contain types and namespace declarations

No, I mean, you need to call from your scripts the one in the Unity_Wii.cs... That code goes in your MonoBehaviour, in the Update method. Basically what you would do in any other Unity project.
 
ok a little better, what I don't understand Unity API is not working, I tried that and got this error

C#:
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.CompilerServices;


public class NewBehaviourScript : MonoBehaviour {

    // Use this for initialization

    WiiRemote controllerState = WiiInput.GetControllerState(0U);
    public GameObject objet;


    void Start () {
        objet = GameObject.Find ("Cube");
    }
    
    // Update is called once per frame
    void Update () {


        if (controllerState.GetButtonDown(WiiButton.ButtonA)){           
            objet.SetActive (false);
        }
    }
}


Code:
Assets/test/NewBehaviourScript.cs(27,31): error CS0117: `UnityEngine.GameObject' does not contain a definition for `SetActive'

, I developed my games on unity2017.1.3p3 under visual studio, I never encountered these API problems just at the beginning, I wonder why that and it's the same engine and above all the same C# language
 
ok a little better, what I don't understand Unity API is not working, I tried that and got this error

C#:
using UnityEngine;
using System.Collections;
using System;
using System.Runtime.CompilerServices;


public class NewBehaviourScript : MonoBehaviour {

    // Use this for initialization

    WiiRemote controllerState = WiiInput.GetControllerState(0U);
    public GameObject objet;


    void Start () {
        objet = GameObject.Find ("Cube");
    }
 
    // Update is called once per frame
    void Update () {


        if (controllerState.GetButtonDown(WiiButton.ButtonA)){    
            objet.SetActive (false);
        }
    }
}


Code:
Assets/test/NewBehaviourScript.cs(27,31): error CS0117: `UnityEngine.GameObject' does not contain a definition for `SetActive'

, I developed my games on unity2017.1.3p3 under visual studio, I never encountered these API problems just at the beginning, I wonder why that and it's the same engine and above all the same C# language
I dont want to sound rude, but that is not how it works… you are not using modern C# nor funcs in this version (which btw, it is limited to C# 2). Unity 2.x doesnt have SetActive (you can check this within the documentation in Help > Scripting reference). You need to do .active = false.

P.d: you dont need to declare the WiiRemote controllerState in class/object scope. You are not gonna reuse it outside Update method. And don’t call the getcontrollerstate there, that value needs to be updated every frame.
In addition, you should not use Find when you are declaring the variable as public to see it through inspector (you should use SerializeField and private anyway). Its quite cpu consuming when it performs the bsp search and you know the reference beforehand. Just drag it to the inspector.
 
Last edited by Manurocker95,
thank you very much it works

I have two questions

1-when I run my game on Wii, the home button doesn't work, I get stuck in the game

2- I heard in your tutorial that the 3D models do not work if they are not in FBX 2010, they disappear, or the animations do not work, what can I do to make them compatible
 

Site & Scene News

Popular threads in this forum