2

Unity3D で C# を使用してメールを送信する必要があります。これを実行しましたが、ランタイム警告に悩まされています。以下の警告を解決するのを手伝ってください。

警告:「Program」という名前のスクリプト ファイルで定義されているクラスは、MonoBehaviour または ScriptableObject から派生したものではありません

私のコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;

namespace EMail
 {
  class Program 
   {
     static void Main(string[] args)
      {
       try
       {
        MailMessage mail = new MailMessage();
        SmtpClient smtpC = new SmtpClient("smtp.gmail.com");
        //From address to send email
        mail.From = new MailAddress("From@gmail.com");
        //To address to send email
        mail.To.Add("To@gmail.com");
        mail.Body = "This is a test mail from C# program";
        mail.Subject = "TEST";
        smtpC.Port = 587;
       //Credentials for From address
        smtpC.Credentials =(System.Net.ICredentialsByHost) new System.Net.NetworkCredential("EmailID", "password");
         smtpC.EnableSsl = true;
         smtpC.Send(mail);
        Console.WriteLine("Message sent successfully");
       Console.ReadLine();
      }
   catch (Exception e)
    {
     Console.WriteLine(e.GetBaseException());
      Console.ReadLine();
    }
   }  
  }
 }
4

2 に答える 2

1

エラーメッセージを実際に読む必要があります。答えが示されています。

warning:The class defined in the script file named 'Program' is not derived from MonoBehaviour or ScriptableObject

Unity でカスタム オブジェクトを作成するには、それらをゲーム エンジンで使用するために ScriptableObject または MonoBehaviour オブジェクトのいずれかから拡張する必要があります。ScriptableObject は、ゲーム内オブジェクトにアタッチする必要がないコード用ですが、MonoBehaviour はアタッチする必要があります。

この場合、電子メール ハンドラーとしてスクリプト可能なオブジェクトを使用する必要があります。これは、シーン オブジェクトにアタッチされないためです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using UnityEngine;
//^Make sure to include UnityEngine if you will connect to other game objects

//Extend ScriptableObject to use custom code 
public class EmailHandler extends ScriptableObject
{
    public void SendEmail()
    {
        try
        {
            MailMessage mail = new MailMessage();
            SmtpClient smtpC = new SmtpClient("smtp.gmail.com");
            //From address to send email
            mail.From = new MailAddress("From@gmail.com");
            //To address to send email
            mail.To.Add("To@gmail.com");
            mail.Body = "This is a test mail from C# program";
            mail.Subject = "TEST";
            smtpC.Port = 587;
            //Credentials for From address
            smtpC.Credentials =(System.Net.ICredentialsByHost) new System.Net.NetworkCredential("EmailID", "password");
            smtpC.EnableSsl = true;
            smtpC.Send(mail);

            //Change Console.Writeline to Debug.Log 
            Debug.Log ("Message sent successfully");
        }
        catch (Exception e)
        {
            Debug.Log(e.GetBaseException());
            //You don't need or use Console.ReadLine();
        }
    }  
}

これを使用すると、質問の問題が解決し、クラスを完了するのに役立ちます。

于 2013-08-13T08:40:45.537 に答える