Merge pull request 'feature/else-player' (#45) from feature/else-player into develop
Reviewed-on: https://git.brew.monster/Unity/perfect-world-unity/pulls/45
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using ModelRenderer.Scripts.Common;
|
||||
|
||||
namespace BrewMonster
|
||||
@@ -67,6 +68,34 @@ namespace BrewMonster
|
||||
public float attack_short_range; // Minimum attack range, for melee weapons = 0.0
|
||||
|
||||
public uint action_type; // Action type for attack animation
|
||||
// ------------------------------
|
||||
// Helper methods
|
||||
// ------------------------------
|
||||
|
||||
public string GetName()
|
||||
{
|
||||
// Convert UTF-16 ushort[] -> string
|
||||
if (name == null) return string.Empty;
|
||||
int len = Array.IndexOf(name, (ushort)0);
|
||||
if (len < 0) len = name.Length;
|
||||
return Encoding.Unicode.GetString(MemoryMarshal.AsBytes(name.AsSpan(0, len)));
|
||||
}
|
||||
|
||||
public string GetFileHitGfx()
|
||||
{
|
||||
if (file_hitgfx == null) return string.Empty;
|
||||
int len = Array.IndexOf(file_hitgfx, (byte)0);
|
||||
if (len < 0) len = file_hitgfx.Length;
|
||||
return Encoding.ASCII.GetString(file_hitgfx, 0, len);
|
||||
}
|
||||
|
||||
public string GetFileHitSfx()
|
||||
{
|
||||
if (file_hitsfx == null) return string.Empty;
|
||||
int len = Array.IndexOf(file_hitsfx, (byte)0);
|
||||
if (len < 0) len = file_hitsfx.Length;
|
||||
return Encoding.ASCII.GetString(file_hitsfx, 0, len);
|
||||
}
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
|
||||
@@ -15,8 +15,7 @@ public class CECAttacksMan : MonoSingleton<CECAttacksMan>
|
||||
#if UNITY_EDITOR
|
||||
public List<CECAttackEvent> m_AttackList = new List<CECAttackEvent>();
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
private void Update()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
@@ -174,7 +173,7 @@ public class CECAttackEvent
|
||||
m_timeToBeFired = 0;
|
||||
|
||||
// Fire here
|
||||
//DoFire();
|
||||
DoFire();
|
||||
}
|
||||
else
|
||||
m_timeToBeFired -= dwDeltaTime;
|
||||
@@ -196,6 +195,241 @@ public class CECAttackEvent
|
||||
|
||||
return true;
|
||||
}
|
||||
bool DoFire()
|
||||
{
|
||||
float vFlyScale = 1.0f;
|
||||
float vHitScale = 1.0f;
|
||||
|
||||
m_bDoFired = true;
|
||||
|
||||
if( GPDataTypeHelper.ISPLAYERID(m_idHost) )
|
||||
{
|
||||
if( m_idSkill != 0 )
|
||||
{
|
||||
// const A3DSkillGfxComposer* pComposer = NULL;
|
||||
//
|
||||
// // we use skill composed gfx to present the skill effect
|
||||
// if (m_nSkillSection>0) // ¶à¶Î¼¼ÄÜ
|
||||
// {
|
||||
// CECMultiSectionSkillMan pMan = m_pManager.GetMultiSkillGfxComposerMan();
|
||||
// if(pMan)
|
||||
// {
|
||||
// pMan->Play(m_idSkill, m_nSkillSection,m_idHost, m_idCastTarget, m_targets,GNET::ElementSkill::IsGoblinSkill(m_idSkill));
|
||||
// pComposer = pMan->GetSkillGfxComposer(m_idSkill, m_nSkillSection);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if(GNET::ElementSkill::IsGoblinSkill(m_idSkill))
|
||||
// m_pManager->GetSkillGfxComposerMan()->Play(m_idSkill, m_idHost, m_idCastTarget, m_targets, true);
|
||||
// else
|
||||
// m_pManager->GetSkillGfxComposerMan()->Play(m_idSkill, m_idHost, m_idCastTarget, m_targets);
|
||||
// pComposer = m_pManager->GetSkillGfxComposerMan()->GetSkillGfxComposer(m_idSkill);
|
||||
// }
|
||||
//
|
||||
// if (pComposer && pComposer->m_dwFlyTime == 0) // ¼¼ÄÜgfxûÓзÉÐÐʵ¼Ê£¬ÔòÂíÉÏÍ·¶¥Ã°×Ö
|
||||
// {
|
||||
// m_timeToDoDamage = 1;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// A3DVECTOR3 vecHost, vecTarget;
|
||||
// // now we estimated a time to do damage
|
||||
// if( m_targets.size() && _get_pos_by_id(m_idHost, vecHost) && _get_pos_by_id(m_targets[0].idTarget, vecTarget) )
|
||||
// {
|
||||
// m_timeToDoDamage = int(Magnitude(vecHost - vecTarget) / 20.0f * 1000.0f);
|
||||
// a_ClampFloor(m_timeToDoDamage, 10ul);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
else if( m_idWeapon != 0 )
|
||||
{
|
||||
// first determine gfx used
|
||||
// const char * szFlyGFX = NULL;
|
||||
// const char * szHitGFX = NULL;
|
||||
//
|
||||
// // using weapon gfx
|
||||
// DATA_TYPE dt;
|
||||
// const void * pData = g_pGame->GetElementDataMan()->get_data_ptr(
|
||||
// m_idWeapon, ID_SPACE_ESSENCE, dt);
|
||||
// ASSERT(dt == DT_WEAPON_ESSENCE || dt == DT_PROJECTILE_ESSENCE);
|
||||
//
|
||||
// if( dt == DT_PROJECTILE_ESSENCE )
|
||||
// {
|
||||
// // Ô¶³ÌÎäÆ÷£¬Ê¹Óõ¯Ò©µÄЧ¹û
|
||||
// PROJECTILE_ESSENCE * pProjectile = (PROJECTILE_ESSENCE *) pData;
|
||||
//
|
||||
// szFlyGFX = pProjectile->file_firegfx + 4; // skip gfx/
|
||||
// szHitGFX = pProjectile->file_hitgfx + 4; // skip gfx/
|
||||
// }
|
||||
// else if (dt == DT_WEAPON_ESSENCE)
|
||||
// {
|
||||
// // ½ü³ÌÎïÀí¹¥»÷£¬Ê¹ÓÃÎäÆ÷µÄЧ¹û
|
||||
// WEAPON_ESSENCE * pWeapon = (WEAPON_ESSENCE *) pData;
|
||||
// WEAPON_SUB_TYPE * pWeaponType = (WEAPON_SUB_TYPE*) g_pGame->GetElementDataMan()->get_data_ptr(pWeapon->id_sub_type, ID_SPACE_ESSENCE, dt);
|
||||
// ASSERT(dt == DT_WEAPON_SUB_TYPE);
|
||||
// szFlyGFX = NULL;
|
||||
// szHitGFX = pWeaponType->file_hitgfx + 4; // skip gfx/
|
||||
// }
|
||||
//
|
||||
// bool bHideFlyGfx = !CECOptimize::Instance().GetGFX().CanShowFly(m_idHost);
|
||||
// bool bHideHitGfx = !CECOptimize::Instance().GetGFX().CanShowHit(m_idHost);
|
||||
// int nNumTargets = m_targets.size();
|
||||
// for(int i=0; i<nNumTargets; i++)
|
||||
// {
|
||||
// const TARGET_DATA& data = m_targets[i];
|
||||
//
|
||||
// const char * pszFlyGFX = szFlyGFX;
|
||||
// const char * pszHitGFX = szHitGFX;
|
||||
//
|
||||
// if( data.dwModifier & MOD_NULLITY )
|
||||
// pszHitGFX = "³ÌÐòÁªÈë\\»÷ÖÐ\\ÎÞЧ¹¥»÷»÷ÖÐ.gfx";
|
||||
//
|
||||
// if (bHideFlyGfx) pszFlyGFX = NULL;
|
||||
// if (bHideHitGfx) pszHitGFX = NULL;
|
||||
//
|
||||
// g_pGame->GetGameRun()->GetWorld()->GetSkillGfxMan()->AddSkillGfxEvent(m_idHost, data.idTarget,
|
||||
// pszFlyGFX, pszHitGFX, m_timeToDoDamage, false, enumLinearMove, 1, 0, NULL, vFlyScale, vHitScale, data.dwModifier);
|
||||
// }
|
||||
}
|
||||
else
|
||||
{
|
||||
// without weapon
|
||||
// ʹÓÃÈÌ×ÀàµÄ»÷ÖÐЧ¹û
|
||||
DATA_TYPE dt = DATA_TYPE.DT_INVALID;
|
||||
var pData = ElementDataManProvider.GetElementDataMan().get_data_ptr(183, ID_SPACE.ID_SPACE_ESSENCE, ref dt);
|
||||
WEAPON_SUB_TYPE pWeaponType = (WEAPON_SUB_TYPE) pData;
|
||||
|
||||
bool bHideHitGfx = false;//!CECOptimize::Instance().GetGFX().CanShowHit(m_idHost);
|
||||
string szGFX= null;
|
||||
int nNumTargets = m_targets.Count();
|
||||
for(int i=0; i<nNumTargets; i++)
|
||||
{
|
||||
TARGET_DATA data = m_targets[i];
|
||||
|
||||
// szGFX = pWeaponType->file_hitgfx + 4; // skip gfx/
|
||||
string fullGfx = pWeaponType.GetFileHitGfx();
|
||||
szGFX = fullGfx.Length > 4 ? fullGfx.Substring(4) : string.Empty;
|
||||
if ((data.dwModifier & (int)MOD.MOD_NULLITY) != 0)
|
||||
szGFX = "程序联入\\击中\\无效攻击击中.gfx";//Program link\Hit\InvalidAttackHit.gfx
|
||||
if (bHideHitGfx) szGFX = null;
|
||||
|
||||
// g_pGame->GetGameRun()->GetWorld()->GetSkillGfxMan()->AddSkillGfxEvent(m_idHost, data.idTarget, NULL,
|
||||
// szGFX, m_timeToDoDamage, false, GfxMoveMode.enumLinearMove, 1, 0, NULL, vFlyScale, vHitScale, data.dwModifier);
|
||||
var target = EC_ManMessageMono.Instance?.GetObject(data.idTarget, 0)?.gameObject.transform;
|
||||
if (target == null)
|
||||
{
|
||||
BMLogger.LogError("Target is null!");
|
||||
return false;
|
||||
}
|
||||
var vfx = GameController.Instance.GetTestVfx();
|
||||
vfx.transform.position = target.position;
|
||||
GameController.Instance.DestroyTestVfx(vfx, 1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if( GPDataTypeHelper.ISNPCID(m_idHost) )
|
||||
{
|
||||
// if( m_idSkill != 0 )
|
||||
// {
|
||||
// const A3DSkillGfxComposer* pComposer = NULL;
|
||||
// // we use skill composed gfx to present the skill effect
|
||||
// if (m_nSkillSection>0) // ¶à¶Î¼¼ÄÜ
|
||||
// {
|
||||
// CECMultiSectionSkillMan* pMan = m_pManager->GetMultiSkillGfxComposerMan();
|
||||
// if(pMan)
|
||||
// {
|
||||
// pMan->Play(m_idSkill, m_nSkillSection,m_idHost, m_idCastTarget, m_targets);
|
||||
// pComposer = pMan->GetSkillGfxComposer(m_idSkill, m_nSkillSection);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// m_pManager->GetSkillGfxComposerMan()->Play(m_idSkill, m_idHost, m_idCastTarget, m_targets);
|
||||
// pComposer = m_pManager->GetSkillGfxComposerMan()->GetSkillGfxComposer(m_idSkill);
|
||||
// }
|
||||
//
|
||||
// if (pComposer && pComposer->m_dwFlyTime == 0) // ¼¼ÄÜûÓзÉÐÐʱ¼ä£¬ÔòÖ±½ÓÍ·¶¥Ã°×Ö
|
||||
// {
|
||||
// m_timeToDoDamage = 1;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// A3DVECTOR3 vecHost, vecTarget;
|
||||
// // now we estimated a time to do damage
|
||||
// if( m_targets.size() && _get_pos_by_id(m_idHost, vecHost) && _get_pos_by_id(m_targets[0].idTarget, vecTarget) )
|
||||
// {
|
||||
// m_timeToDoDamage = int(Magnitude(vecHost - vecTarget) / 20.0f * 1000.0f);
|
||||
// a_ClampFloor(m_timeToDoDamage, 10ul);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// CECNPC * pNPC = g_pGame->GetGameRun()->GetWorld()->GetNPCMan()->GetNPC(m_idHost);
|
||||
// if (!pNPC)
|
||||
// return true;
|
||||
//
|
||||
// const char * szFlyGFX = NULL;
|
||||
// const char * szHitGFX = NULL;
|
||||
//
|
||||
// if (pNPC->IsMonsterNPC())
|
||||
// {
|
||||
// const MONSTER_ESSENCE * pEssence = ((CECMonster *)pNPC)->GetDBEssence();
|
||||
//
|
||||
// szFlyGFX = pEssence->file_gfx_short + 4; // skip gfx/
|
||||
// szHitGFX = pEssence->file_gfx_short_hit + 4; // skip gfx/
|
||||
// }
|
||||
// else if (pNPC->IsPetNPC())
|
||||
// {
|
||||
// //szFlyGFX = "";
|
||||
// const PET_ESSENCE* pEssence = ((CECPet*)pNPC)->GetDBEssence();
|
||||
//
|
||||
// szFlyGFX = pEssence->file_gfx_short + 4; //"²ß»®ÁªÈë\\ͨÓ÷ÉÐÐ\\¹¼ý·ÉÐÐ.gfx";
|
||||
//
|
||||
// szHitGFX = "²ß»®ÁªÈë\\¹ÖÎï»÷ÖÐ\\¹ÖÎïÈⲫ»÷ÖÐ.gfx";
|
||||
// }
|
||||
// else
|
||||
// return false;
|
||||
//
|
||||
// if( !szFlyGFX[0] )
|
||||
// szFlyGFX = NULL;
|
||||
//
|
||||
// if( !szHitGFX[0] )
|
||||
// szHitGFX = NULL;
|
||||
//
|
||||
// bool bHideFlyGfx = !CECOptimize::Instance().GetGFX().CanShowFly(m_idHost);
|
||||
// bool bHideHitGfx = !CECOptimize::Instance().GetGFX().CanShowHit(m_idHost);
|
||||
// int nNumTargets = m_targets.size();
|
||||
// for(int i=0; i<nNumTargets; i++)
|
||||
// {
|
||||
// const TARGET_DATA& data = m_targets[i];
|
||||
//
|
||||
// const char * pszFlyGFX = szFlyGFX;
|
||||
// const char * pszHitGFX = szHitGFX;
|
||||
// if( data.nDamage <= 0 )
|
||||
// {
|
||||
// pszHitGFX = NULL;
|
||||
// }
|
||||
// else if( data.dwModifier & MOD_NULLITY )
|
||||
// {
|
||||
// pszHitGFX = "³ÌÐòÁªÈë\\»÷ÖÐ\\ÎÞЧ¹¥»÷»÷ÖÐ.gfx";
|
||||
// }
|
||||
//
|
||||
// if (bHideFlyGfx) pszFlyGFX = NULL;
|
||||
// if (bHideHitGfx) pszHitGFX = NULL;
|
||||
//
|
||||
// g_pGame->GetGameRun()->GetWorld()->GetSkillGfxMan()->AddSkillGfxEvent(m_idHost, data.idTarget,
|
||||
// pszFlyGFX, pszHitGFX, m_timeToDoDamage, false, enumLinearMove, 1,
|
||||
// 0, NULL, vFlyScale, vHitScale, data.dwModifier);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
else
|
||||
return true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool DoDamage()
|
||||
{
|
||||
@@ -371,4 +605,18 @@ enum MOD
|
||||
MOD_ATTACK_AURA = 0x1000, // ¹â»·¹¥»÷
|
||||
MOD_REBOUND = 0x2000, // ·´µ¯
|
||||
MOD_BEAT_BACK = 0x4000, // ·´»÷
|
||||
};
|
||||
enum GfxMoveMode
|
||||
{
|
||||
enumLinearMove = 0, // Linear
|
||||
enumParabolicMove, // Parabolic
|
||||
enumMissileMove, // Missile
|
||||
enumMeteoricMove, // Meteoric (shooting star)
|
||||
enumHelixMove, // Helix (spiral)
|
||||
enumCurvedMove, // Curved
|
||||
enumAccMove, // Accelerated
|
||||
enumOnTarget, // Targeted
|
||||
enumLink, // Linked
|
||||
enumRandMove, // Random movement
|
||||
enumMoveModeNum
|
||||
};
|
||||
@@ -601,12 +601,12 @@ public abstract class CECPlayer : CECObject
|
||||
|
||||
/* var pRightHandWeapon = GetRightHandWeapon();
|
||||
bool bHideFX = !CECOptimize.Instance.GFX.CanShowAttack(GetCharacterID(), GetClassID());*/
|
||||
|
||||
// ==============================
|
||||
// Ground Attack
|
||||
// ==============================
|
||||
if (GetMoveEnv() == (int)MoveEnvironment.MOVEENV_GROUND)
|
||||
{
|
||||
|
||||
// “起” 动作(挥起)
|
||||
szAct = EC_Utility.BuildActionName(action, weapon_type, "Æð");
|
||||
EventBus.PublishChannel(m_PlayerInfo.cid, new PlayActionEvent(szAct));
|
||||
@@ -717,6 +717,9 @@ public abstract class CECPlayer : CECObject
|
||||
|
||||
public int GetShowingWeaponType()
|
||||
{
|
||||
//todo: mr Hoang should double check it
|
||||
return 10;
|
||||
|
||||
int weapon_type = 0;
|
||||
if (CanShowFashionWeapon((int)m_uAttackType, m_iFashionWeaponType) &&
|
||||
m_aEquips[(int)IndexOfIteminEquipmentInventory.EQUIPIVTR_FASHION_WEAPON] != 0)
|
||||
@@ -801,7 +804,7 @@ public abstract class CECPlayer : CECObject
|
||||
BMLogger.LogError("CECPlayer::GetFashionConfig, Failed to load fashion weapon config");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
int fashion_weapon_mask = (int)pConfig.Value.action_mask[fashion_weapon_type];
|
||||
return (fashion_weapon_mask & (1 << GetWeaponType(weapon_type))) != 0;
|
||||
}
|
||||
|
||||
@@ -505,8 +505,7 @@ namespace CSNetwork
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERATKRESULT, MANAGER_INDEX.MAN_PLAYER, -1,
|
||||
pDataBuf, pCmdHeader);
|
||||
else if (ISNPCID(pCmdAtk.attacker_id))
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCATKRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
|
||||
pCmdHeader);
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCATKRESULT, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
|
||||
break;
|
||||
case CommandID.HOST_ATTACKRESULT:
|
||||
_logger.Info($"HOST_ATTACKRESULT: " + pCmdHeader);
|
||||
@@ -856,10 +855,7 @@ namespace CSNetwork
|
||||
{
|
||||
return id != 0 && (id & 0x80000000) == 0;
|
||||
}
|
||||
|
||||
public bool ISNPCID(int id) => ((id & unchecked((int)0x80000000)) != 0)
|
||||
&& ((id & 0x40000000) == 0);
|
||||
|
||||
public bool ISNPCID(int id) => ((id & 0x80000000) != 0) && ((id & 0x40000000) == 0);
|
||||
private byte[] GetBytes(byte[] bytes, int length, int index)
|
||||
{
|
||||
byte[] arrByteData = new byte[length];
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2282869967233380084
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4793130207391123121}
|
||||
- component: {fileID: 2444832684984909144}
|
||||
- component: {fileID: 5574609718764827284}
|
||||
m_Layer: 0
|
||||
m_Name: TestVfx
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4793130207391123121
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2282869967233380084}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 2, y: 2, z: 2}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &2444832684984909144
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2282869967233380084}
|
||||
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &5574609718764827284
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2282869967233380084}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: f3479fe588d0d48bdb0958c3d12beaac, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 88e840e5dac12ed4383d994c7fadfef1
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -14,6 +14,7 @@ public class GameController : MonoBehaviour
|
||||
[SerializeField] private CECMonster monsterPrefab;
|
||||
[SerializeField] private CECNPCServer npcServerPrefab;
|
||||
[SerializeField] private CinemachineCamera cinemachineCamera;
|
||||
[SerializeField] private GameObject _testVfxPrefab;
|
||||
//[SerializeField] private Transform ground;
|
||||
CECHostPlayer hostPlayer;
|
||||
|
||||
@@ -83,6 +84,14 @@ public class GameController : MonoBehaviour
|
||||
{
|
||||
return Instantiate(npcServerPrefab, transform);
|
||||
}
|
||||
public GameObject GetTestVfx()
|
||||
{
|
||||
return Instantiate(_testVfxPrefab, transform);
|
||||
}
|
||||
public void DestroyTestVfx(GameObject go, float delayTime)
|
||||
{
|
||||
Destroy(go,delayTime);
|
||||
}
|
||||
public GameObject InitCharacter(info_player_1 info)
|
||||
{
|
||||
if (characterPrefab == null)
|
||||
|
||||
Reference in New Issue
Block a user