c# - 具有相同脚本的 2 个对象中的 1 个会破坏 Unity
问题描述
我在 Unity 中有一个 C# 脚本如果我将脚本添加到一个对象,一切都很好,但是当我添加两个或多个具有相同脚本的对象并且我运行游戏时,只有一个具有相同脚本的对象留下了具有相同脚本的其他对象破坏。我不明白为什么。该项目是 3D
这是脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Linq;
using DiscordUnity;
using DiscordUnity.API;
using DiscordUnity.State;
using System.Threading.Tasks;
public class Player : MonoBehaviour, IDiscordServerEvents, IDiscordMessageEvents, IDiscordStatusEvents
{
#region Singleton
public static Player Singleton { get; private set; }
protected virtual void Awake()
{
if (Singleton != null)
{
Destroy(gameObject);
return;
}
Singleton = this;
DontDestroyOnLoad(gameObject);
}
private void OnDestroy()
{
if (Singleton == this)
{
DiscordAPI.UnregisterEventsHandler(this);
DiscordAPI.Stop();
Singleton = null;
}
}
#endregion
public string botToken;
public DiscordLogLevel logLevel = DiscordLogLevel.None;
public Vector3 x1;
public Vector3 x2;
public Vector3 z1;
public Vector3 z2;
public string userid;
protected virtual async void Start()
{
DiscordAPI.Logger = new DiscordLogger(logLevel);
DiscordAPI.RegisterEventsHandler(this);
await DiscordAPI.StartWithBot(botToken);
Debug.Log("DiscordUnity started.");
}
private void Update()
{
DiscordAPI.Update();
}
public async void OnServerJoined(DiscordServer server)
{
}
public void OnServerUpdated(DiscordServer server)
{
}
public void OnServerLeft(DiscordServer server)
{
}
public void OnServerBan(DiscordServer server, DiscordUser user)
{
}
public void OnServerUnban(DiscordServer server, DiscordUser user)
{
}
public void OnServerEmojisUpdated(DiscordServer server, DiscordEmoji[] emojis)
{
}
public void OnServerMemberJoined(DiscordServer server, DiscordServerMember member)
{
}
public void OnServerMemberUpdated(DiscordServer server, DiscordServerMember member)
{
}
public void OnServerMemberLeft(DiscordServer server, DiscordServerMember member)
{
}
public void OnServerMembersChunk(DiscordServer server, DiscordServerMember[] members, string[] notFound, DiscordPresence[] presences)
{
}
public void OnServerRoleCreated(DiscordServer server, DiscordRole role)
{
}
public void OnServerRoleUpdated(DiscordServer server, DiscordRole role)
{
}
public void OnServerRoleRemove(DiscordServer server, DiscordRole role)
{
}
//message events
public async void OnMessageCreated(DiscordMessage message)
{
}
public void OnMessageUpdated(DiscordMessage message)
{
}
public void OnMessageDeleted(DiscordMessage message)
{
}
public void OnMessageDeletedBulk(string[] messageIds)
{
}
public async void OnMessageReactionAdded(DiscordMessageReaction messageReaction)
{
if (messageReaction.Member.User.Bot == null || messageReaction.Member.User.Bot == false)
{
if (messageReaction.UserId == userid)
{
if (messageReaction.Emoji.Name == "◀️")
{
transform.Translate(x1);
}
if (messageReaction.Emoji.Name == "▶️")
{
transform.Translate(x2);
}
if (messageReaction.Emoji.Name == "")
{
transform.Translate(z1);
}
if (messageReaction.Emoji.Name == "")
{
transform.Translate(z2);
}
}
}
}
public void OnMessageReactionRemoved(DiscordMessageReaction messageReaction)
{
if (messageReaction.UserId == userid)
{
if (messageReaction.Emoji.Name == "◀️")
{
transform.Translate(x1);
}
if (messageReaction.Emoji.Name == "▶️")
{
transform.Translate(x2);
}
if (messageReaction.Emoji.Name == "")
{
transform.Translate(z1);
}
if (messageReaction.Emoji.Name == "")
{
transform.Translate(z2);
}
}
}
public void OnMessageAllReactionsRemoved(DiscordMessageReaction messageReaction)
{
}
public void OnMessageEmojiReactionRemoved(DiscordMessageReaction messageReaction)
{
}
// discord status events
public void OnPresenceUpdated(DiscordPresence presence)
{
}
public void OnTypingStarted(DiscordChannel channel, DiscordUser user, DateTime timestamp)
{
}
public void OnServerTypingStarted(DiscordChannel channel, DiscordServerMember member, DateTime timestamp)
{
}
public void OnUserUpdated(DiscordUser user)
{
}
private async Task AddEmoji(string ChannelId,string messageId, string emoji)
{
await DiscordAPI.CreateReaction(ChannelId, messageId, emoji);
}
#region Logger
public enum DiscordLogLevel
{
None = 0,
Error = 1,
Warning = 2,
Debug = 3
}
private class DiscordLogger : DiscordUnity.ILogger
{
private readonly DiscordLogLevel level;
public DiscordLogger(DiscordLogLevel level)
{
this.level = level;
}
public void Log(string log)
{
if (level >= DiscordLogLevel.Debug)
Debug.Log(log);
}
public void LogWarning(string log)
{
if (level >= DiscordLogLevel.Warning)
{
Debug.LogWarning(log);
}
}
public void LogError(string log, Exception exception = null)
{
if (level >= DiscordLogLevel.Error)
{
Debug.LogError(log);
Debug.LogError(exception);
}
}
}
#endregion
}
请帮忙。
解决方案
protected virtual void Awake()
{
if (Singleton != null)
{
Destroy(gameObject);
return;
}
Singleton = this;
DontDestroyOnLoad(gameObject);
}
您正在摧毁除第一个对象之外的所有对象。如果您想要多个对象,则需要更改单例模式
推荐阅读
- python - 使用具有与 Windows 中的 & 一样的参数的子进程运行命令
- oracle - Oracle 云删除实例?
- regex - 匹配以@开头的单词
- python - 多对象定位损失的python实现(tensorflow)
- elixir - 查看是否在 elixir phoenix 中创建或更新子变更集
- jquery - :first in jquery 在脚本中不起作用
- amazon-web-services - 无法通过 IntelliJ 中的 aws 云调试来调试代码
- android - app:assembleDebug 与 assmbleDebug 有什么区别?
- android - 错误:找不到参数[目录'libs']的方法实现()
- javascript - chrome-extension:// 页面内的 Chrome 扩展