Commit c17469af by alsunj

Merge branch 'fix/refactor-pickuping-and-saving-object-reference-by-server' into 'main'

refactor interactables

See merge request alsunj/loputoo!15
parents abd25d17 3a5a4e15
Showing with 702 additions and 132 deletions
...@@ -24,3 +24,13 @@ MonoBehaviour: ...@@ -24,3 +24,13 @@ MonoBehaviour:
SourcePrefabToOverride: {fileID: 0} SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0 SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0} OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 334567762338569054, guid: dc502d59cef13ed40b07aa18bd1a4167, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 2142678194451976319, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
fileFormatVersion: 2
guid: 829aa7243d618c64dbb4d69139b249d0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
using Unity.Netcode;
using UnityEngine;
public class Explosive : Pickupable, IExplosive
{
private ExplosiveSettings _explosiveSettings;
private BoxCollider _boxCollider;
private void Awake()
{
_boxCollider = GetComponent<BoxCollider>();
}
public void Explode()
{
throw new System.NotImplementedException();
}
public override void Pickup()
{
_boxCollider.isTrigger = true;
}
public override void PutDown()
{
_boxCollider.isTrigger = false;
// transform.position = position;
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: 84af6268af84ad74da0d3c2323dd7b8f
\ No newline at end of file
using UnityEngine;
[CreateAssetMenu(fileName = "ExplosiveSettings", menuName = "Scriptable Objects/ExplosiveSettings")]
public class ExplosiveSettings : ScriptableObject
{
}
fileFormatVersion: 2
guid: 66230a11c233a404da90c824e752674d
\ No newline at end of file
using UnityEngine;
public interface IExplosive
{
public void Explode();
}
\ No newline at end of file
fileFormatVersion: 2
guid: acc20f98fc865e74098ff28629f1e93c
\ No newline at end of file
...@@ -22,11 +22,8 @@ public class Chest : NetworkBehaviour, IInteractable ...@@ -22,11 +22,8 @@ public class Chest : NetworkBehaviour, IInteractable
[ServerRpc(RequireOwnership = false)] [ServerRpc(RequireOwnership = false)]
private void ChestFoundServerRpc() private void ChestFoundServerRpc()
{ {
if (!_chestFound.Value) ChestFoundClientRpc();
{ _chestFound.Value = true;
ChestFoundClientRpc();
_chestFound.Value = true;
}
} }
[ClientRpc] [ClientRpc]
...@@ -38,8 +35,14 @@ public class Chest : NetworkBehaviour, IInteractable ...@@ -38,8 +35,14 @@ public class Chest : NetworkBehaviour, IInteractable
} }
public void Interact() public bool Interact()
{ {
if (_chestFound.Value)
{
return false;
}
ChestFoundServerRpc(); ChestFoundServerRpc();
return true;
} }
} }
\ No newline at end of file
...@@ -34,9 +34,10 @@ public class Door : NetworkBehaviour, IInteractable ...@@ -34,9 +34,10 @@ public class Door : NetworkBehaviour, IInteractable
.SetEase(Ease.OutBounce); .SetEase(Ease.OutBounce);
} }
public void Interact() public bool Interact()
{ {
RequestOpenDoorServerRpc(); RequestOpenDoorServerRpc();
return true;
} }
[ServerRpc(RequireOwnership = false)] [ServerRpc(RequireOwnership = false)]
......
...@@ -2,5 +2,5 @@ using UnityEngine; ...@@ -2,5 +2,5 @@ using UnityEngine;
public interface IInteractable public interface IInteractable
{ {
public void Interact(); public bool Interact();
} }
\ No newline at end of file
...@@ -2,6 +2,6 @@ using UnityEngine; ...@@ -2,6 +2,6 @@ using UnityEngine;
public interface IPickupable public interface IPickupable
{ {
public void Pickup(GameObject targetobject); public void Pickup();
public void PutDown(Vector3 position); public void PutDown();
} }
\ No newline at end of file
...@@ -4,34 +4,23 @@ using UnityEngine; ...@@ -4,34 +4,23 @@ using UnityEngine;
public class Key : Pickupable, IPickupable public class Key : Pickupable, IPickupable
{ {
private Quaternion _startingRotation; // private Quaternion _startingRotation;
private FollowTransform _followTransform;
private BoxCollider _boxCollider; private BoxCollider _boxCollider;
private void Awake() private void Awake()
{ {
_followTransform = GetComponent<FollowTransform>();
_boxCollider = GetComponent<BoxCollider>(); _boxCollider = GetComponent<BoxCollider>();
} }
private void Start()
{
_startingRotation = gameObject.transform.rotation;
}
public override void Pickup(GameObject pickupingTarget) public override void Pickup()
{ {
GameObject placeHolder = pickupingTarget.GetComponent<PlayerPlacements>().playerRightHand;
_followTransform.SetTargetTransform(placeHolder.transform);
_boxCollider.isTrigger = true; _boxCollider.isTrigger = true;
} }
public override void PutDown(Vector3 position) public override void PutDown()
{ {
_followTransform.SetTargetTransform(null);
_boxCollider.isTrigger = false; _boxCollider.isTrigger = false;
transform.position = position;
transform.rotation = _startingRotation;
} }
} }
\ No newline at end of file
using System;
using Unity.Netcode; using Unity.Netcode;
using UnityEngine; using UnityEngine;
public abstract class Pickupable : NetworkBehaviour public abstract class Pickupable : NetworkBehaviour, IEquatable<Pickupable>, IPickupable
{ {
private NetworkVariable<bool> isObjectPickedup = new NetworkVariable<bool>(); private NetworkVariable<bool> isObjectPickedup = new NetworkVariable<bool>();
private FollowTransform _followTransform;
private Quaternion _startingRotation;
private void Start()
{
_followTransform = GetComponent<FollowTransform>();
if (_followTransform == null)
{
Debug.LogError("FollowTransform component not found on the GameObject.");
}
_startingRotation = transform.rotation;
}
public void RequestPutDownObject(Vector3 position) public void RequestPutDownObject(NetworkObjectReference pickupingTarget)
{ {
RequestPutDownObjectServerRpc(position); RequestPutDownObjectServerRpc(pickupingTarget);
} }
[ServerRpc(RequireOwnership = false)] [ServerRpc(RequireOwnership = false)]
private void RequestPutDownObjectServerRpc(Vector3 position) private void RequestPutDownObjectServerRpc(NetworkObjectReference pickupingTarget)
{ {
if (isObjectPickedup.Value) if (isObjectPickedup.Value)
{ {
isObjectPickedup.Value = false; isObjectPickedup.Value = false;
PutDownObjectClientRpc(position); Vector3 newPosition = Vector3.zero;
if (pickupingTarget.TryGet(out NetworkObject target))
{
newPosition = target.transform.position + target.transform.forward;
PlayerPlacements playerPlacements = target.GetComponent<PlayerPlacements>();
if (playerPlacements != null)
{
playerPlacements.ClearPlayerRightHandItem();
}
}
// Notify all clients to update their visuals
PutDownObjectClientRpc(newPosition);
} }
} }
[ClientRpc] [ClientRpc]
private void PutDownObjectClientRpc(Vector3 position) private void PutDownObjectClientRpc(Vector3 newPosition)
{ {
PutDown(position); _followTransform.SetTargetTransform(null);
transform.position = newPosition;
transform.rotation = _startingRotation;
// Update the visuals on the client
PutDown();
} }
public void RequestPickupObject(NetworkObjectReference pickupingTarget) public void RequestPickupObject(NetworkObjectReference pickupingTarget)
...@@ -38,6 +67,18 @@ public abstract class Pickupable : NetworkBehaviour ...@@ -38,6 +67,18 @@ public abstract class Pickupable : NetworkBehaviour
if (!isObjectPickedup.Value) if (!isObjectPickedup.Value)
{ {
isObjectPickedup.Value = true; isObjectPickedup.Value = true;
if (pickupingTarget.TryGet(out NetworkObject target))
{
PlayerPlacements playerPlacements = target.GetComponent<PlayerPlacements>();
if (playerPlacements != null)
{
playerPlacements.SetPlayerRightHandItem(new NetworkObjectReference(this.NetworkObject));
_followTransform.SetTargetTransform(playerPlacements.playerRightHand.transform);
}
}
// Notify all clients to update their visuals
PickupObjectClientRpc(pickupingTarget); PickupObjectClientRpc(pickupingTarget);
} }
} }
...@@ -47,14 +88,38 @@ public abstract class Pickupable : NetworkBehaviour ...@@ -47,14 +88,38 @@ public abstract class Pickupable : NetworkBehaviour
{ {
if (pickupingTarget.TryGet(out NetworkObject target)) if (pickupingTarget.TryGet(out NetworkObject target))
{ {
Pickup(target.gameObject); PlayerPlacements playerPlacements = target.GetComponent<PlayerPlacements>();
if (playerPlacements != null)
{
_followTransform.SetTargetTransform(playerPlacements.playerRightHand.transform);
}
} }
Pickup();
} }
public abstract void PutDown(Vector3 position); public abstract void PutDown();
public abstract void Pickup();
public abstract void Pickup(GameObject pickupingTarget); public bool Equals(Pickupable other)
{
if (other == null) return false;
return NetworkObjectId == other.NetworkObjectId;
}
public override bool Equals(object obj)
{
if (obj is Pickupable other)
{
return Equals(other);
}
return false;
}
public override int GetHashCode()
{
return NetworkObjectId.GetHashCode();
}
} }
\ No newline at end of file
using System; using System;
using UnityEngine; using UnityEngine;
using UnityEngine.Serialization;
public class FollowTransform : MonoBehaviour public class FollowTransform : MonoBehaviour
{ {
private Transform targetTransform; private Transform targetTransform;
[SerializeField] private FollowTransformSettings _followTransformSettings; [SerializeField] private FollowTransformSettings followTransformSettings;
public void SetTargetTransform(Transform targetTransform) public void SetTargetTransform(Transform targetTransform)
{ {
...@@ -19,8 +20,8 @@ public class FollowTransform : MonoBehaviour ...@@ -19,8 +20,8 @@ public class FollowTransform : MonoBehaviour
return; return;
} }
transform.position = targetTransform.position; transform.position = targetTransform.position + followTransformSettings.targetPositionOffset;
Vector3 targetEulerAngles = targetTransform.rotation.eulerAngles + _followTransformSettings.keyRotation; Vector3 targetEulerAngles = targetTransform.rotation.eulerAngles + followTransformSettings.targetRotationOffset;
transform.rotation = Quaternion.Euler(targetEulerAngles); transform.rotation = Quaternion.Euler(targetEulerAngles);
} }
} }
\ No newline at end of file
...@@ -10,6 +10,8 @@ public class PlayerController : NetworkBehaviour ...@@ -10,6 +10,8 @@ public class PlayerController : NetworkBehaviour
[SerializeField] private PlayerInteractionSettings playerInteractionSettings; [SerializeField] private PlayerInteractionSettings playerInteractionSettings;
[SerializeField] private float speed = 2f; [SerializeField] private float speed = 2f;
[SerializeField] private InputReader inputReader; [SerializeField] private InputReader inputReader;
private PlayerPlacements _playerPlacements;
private PlayerManager _playerManager; private PlayerManager _playerManager;
private PlayerAnimator _playerAnimator; private PlayerAnimator _playerAnimator;
private Rigidbody _rb; private Rigidbody _rb;
...@@ -140,6 +142,16 @@ public class PlayerController : NetworkBehaviour ...@@ -140,6 +142,16 @@ public class PlayerController : NetworkBehaviour
{ {
Debug.LogError("Rigidbody is null"); Debug.LogError("Rigidbody is null");
} }
else
{
_rb.isKinematic = false;
}
_playerPlacements = GetComponent<PlayerPlacements>();
if (_playerPlacements == null)
{
Debug.LogError("PlayerPlacements is null");
}
} }
private void OnSprint(bool state) private void OnSprint(bool state)
...@@ -155,9 +167,7 @@ public class PlayerController : NetworkBehaviour ...@@ -155,9 +167,7 @@ public class PlayerController : NetworkBehaviour
private void OnAttack() private void OnAttack()
{ {
if (_attackCooldownTimer > 0) return; if (_attackCooldownTimer > 0) return;
CheckForWeapons();
Debug.Log("attack started");
HitObject();
_attackCooldownTimer = attackCooldown; // Set cooldown duration _attackCooldownTimer = attackCooldown; // Set cooldown duration
} }
...@@ -324,91 +334,88 @@ public class PlayerController : NetworkBehaviour ...@@ -324,91 +334,88 @@ public class PlayerController : NetworkBehaviour
private void CheckForPickupableAndInteractableCollision() private void CheckForPickupableAndInteractableCollision()
{ {
CheckForInteractableCollision(); if (CheckForInteractableCollision()) return;
CheckForPickupables(); CheckForPickupables();
} }
private void CheckForInteractableCollision()
private bool CheckForInteractableCollision()
{ {
Collider[] hitColliders = Physics.OverlapSphere(transform.position, Collider closestCollider = FindClosestCollider(transform.position,
playerInteractionSettings.interactableRadius, playerInteractionSettings.interactableRadius,
playerInteractionSettings.interactableLayer); playerInteractionSettings.interactableLayer);
foreach (var hitCollider in hitColliders)
if (closestCollider != null)
{ {
switch (hitCollider.GetComponent<IInteractable>()) var interactable = closestCollider.GetComponent<IInteractable>();
if (interactable != null)
{ {
case Chest chest: RotatePlayerTowardsTarget(closestCollider);
RotatePlayerTowardsTarget(hitCollider); if (interactable.Interact())
_playerManager.playerEvents.PlayerInteract(); {
chest.Interact();
break;
case Door door:
RotatePlayerTowardsTarget(hitCollider);
_playerManager.playerEvents.PlayerInteract(); _playerManager.playerEvents.PlayerInteract();
door.Interact(); return true;
break; }
} }
} }
return false;
} }
private void CheckForPickupables() private void CheckForPickupables()
{ {
Collider[] hitColliders = Physics.OverlapSphere(transform.position, Collider closestCollider = FindClosestCollider(transform.position,
playerInteractionSettings.interactableRadius, playerInteractionSettings.interactableRadius,
playerInteractionSettings.pickupableLayer); playerInteractionSettings.pickupableLayer);
foreach (var hitCollider in hitColliders)
if (closestCollider != null)
{ {
switch (hitCollider.GetComponent<IPickupable>()) switch (closestCollider.GetComponent<Pickupable>())
{ {
case Key key: case Key key:
if (!isRightHandFull) PickupObject(key);
{ break;
key.RequestPickupObject( case Explosive explosive:
new NetworkObjectReference(gameObject.GetComponent<NetworkObject>())); PickupObject(explosive);
isRightHandFull = !isRightHandFull;
}
else
{
key.RequestPutDownObject(transform.position + transform.forward);
isRightHandFull = !isRightHandFull;
}
break; break;
} }
} }
} }
private void HitObject() private void PickupObject(Pickupable pickupable)
{ {
Collider[] hitColliders = Physics.OverlapSphere(transform.position, if (!_playerPlacements.IsRightHandFull())
{
pickupable.RequestPickupObject(
new NetworkObjectReference(gameObject.GetComponent<NetworkObject>()));
}
else
{
pickupable.RequestPutDownObject(
new NetworkObjectReference(gameObject.GetComponent<NetworkObject>()));
}
}
private void CheckForWeapons()
{
HitObject(hitDamage);
}
private void HitObject(float weaponHitDamage)
{
Collider closestCollider = FindClosestCollider(transform.position,
playerInteractionSettings.interactableRadius, playerInteractionSettings.interactableRadius,
playerInteractionSettings.destructableLayer); playerInteractionSettings.destructableLayer);
if (hitColliders.Length > 0) if (closestCollider != null)
{ {
Collider closestCollider = null; switch (closestCollider.GetComponent<IDestrucable>())
float closestDistance = float.MaxValue;
foreach (var hitCollider in hitColliders)
{
float distance = Vector3.Distance(transform.position, hitCollider.transform.position);
if (distance < closestDistance)
{
closestDistance = distance;
closestCollider = hitCollider;
}
}
if (closestCollider != null)
{ {
switch (closestCollider.GetComponent<IDestrucable>()) case Barrel barrel:
{ RotatePlayerTowardsTarget(closestCollider);
case Barrel barrel: _playerManager.playerEvents.PlayerAttack();
RotatePlayerTowardsTarget(closestCollider); barrel.TakeDamage(weaponHitDamage);
_playerManager.playerEvents.PlayerAttack(); break;
barrel.TakeDamage(hitDamage);
break;
}
} }
} }
else else
...@@ -417,6 +424,25 @@ public class PlayerController : NetworkBehaviour ...@@ -417,6 +424,25 @@ public class PlayerController : NetworkBehaviour
} }
} }
private Collider FindClosestCollider(Vector3 position, float radius, LayerMask layerMask)
{
Collider[] hitColliders = Physics.OverlapSphere(position, radius, layerMask);
Collider closestCollider = null;
float closestDistance = float.MaxValue;
foreach (var hitCollider in hitColliders)
{
float distance = Vector3.Distance(position, hitCollider.transform.position);
if (distance < closestDistance)
{
closestDistance = distance;
closestCollider = hitCollider;
}
}
return closestCollider;
}
private void RotatePlayerTowardsTarget(Collider hit) private void RotatePlayerTowardsTarget(Collider hit)
{ {
Vector3 direction = (hit.transform.position - transform.position).normalized; Vector3 direction = (hit.transform.position - transform.position).normalized;
......
using Unity.Netcode;
using UnityEngine; using UnityEngine;
public class PlayerPlacements : MonoBehaviour public class PlayerPlacements : NetworkBehaviour
{ {
public GameObject playerRightHand; public GameObject playerRightHand;
public GameObject playerLeftHand; public GameObject playerLeftHand;
private NetworkVariable<NetworkObjectReference> playerRightHandItem = new NetworkVariable<NetworkObjectReference>();
private NetworkVariable<NetworkObjectReference> playerLeftHandItem = new NetworkVariable<NetworkObjectReference>();
void Start() void Start()
{ {
playerRightHand = transform.Find("PlayerVisual/Skeleton_Minion/Rig/root/handIK.r/EquippedItemR") playerRightHand = transform.Find("PlayerVisual/Skeleton_Minion/Rig/root/handIK.r/EquippedItemR")?.gameObject;
?.gameObject;
if (playerRightHand == null) if (playerRightHand == null)
{ {
Debug.LogError("EquippedItemR not found in player rig"); Debug.LogError("EquippedItemR not found in player rig");
} }
playerLeftHand = transform.Find("PlayerVisual/Skeleton_Minion/Rig/root/handIK.l/EquippedItemL") playerLeftHand = transform.Find("PlayerVisual/Skeleton_Minion/Rig/root/handIK.l/EquippedItemL")?.gameObject;
?.gameObject;
if (playerLeftHand == null) if (playerLeftHand == null)
{ {
Debug.LogError("EquippedItemL not found in player rig"); Debug.LogError("EquippedItemL not found in player rig");
} }
} }
public void SetPlayerRightHandItem(NetworkObjectReference newItem)
{
SetPlayerRightHandItemServerRpc(newItem);
}
[ServerRpc(RequireOwnership = false)]
private void SetPlayerRightHandItemServerRpc(NetworkObjectReference newItem)
{
if (newItem.TryGet(out NetworkObject networkObject))
{
Pickupable pickupable = networkObject.GetComponent<Pickupable>();
if (pickupable != null)
{
playerRightHandItem.Value = newItem;
// UpdatePlayerRightHandItemClientRpc(newItem);
}
}
}
public void ClearPlayerRightHandItem()
{
ClearPlayerRightHandItemServerRpc();
}
[ServerRpc(RequireOwnership = false)]
private void ClearPlayerRightHandItemServerRpc()
{
playerRightHandItem.Value = new NetworkObjectReference();
// UpdatePlayerRightHandItemClientRpc(playerRightHandItem.Value);
}
public bool IsRightHandFull()
{
if (playerRightHandItem.Value.TryGet(out NetworkObject networkObject))
{
return networkObject.GetComponent<Pickupable>() != null;
}
return false;
}
} }
\ No newline at end of file
using UnityEngine; using UnityEngine;
using UnityEngine.Serialization;
[CreateAssetMenu(fileName = "FollowTransformSettings", menuName = "Scriptable Objects/FollowTransformSettings")] [CreateAssetMenu(fileName = "FollowTransformSettings", menuName = "Scriptable Objects/FollowTransformSettings")]
public class FollowTransformSettings : ScriptableObject public class FollowTransformSettings : ScriptableObject
{ {
public Vector3 keyRotation = new Vector3(180, 180, 0); public Vector3 targetRotationOffset = new Vector3(180, 0, 0);
public Vector3 targetPositionOffset = new Vector3(0f, 0, 0);
} }
\ No newline at end of file
fileFormatVersion: 2
guid: 7be27618549ff0a4dbe13b265dcf5514
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2142678194451976319
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7737315830459736898}
- component: {fileID: 163114042722539874}
- component: {fileID: 783618015449435042}
- component: {fileID: 8877540788060270672}
- component: {fileID: 2810168411361310003}
m_Layer: 8
m_Name: ExplosiveB
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7737315830459736898
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2142678194451976319}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.16, y: 0, z: -5.62}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5365762707953752018}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &163114042722539874
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2142678194451976319}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
m_Name:
m_EditorClassIdentifier:
GlobalObjectIdHash: 1023450164
InScenePlacedSourceGlobalObjectIdHash: 0
DeferredDespawnTick: 0
Ownership: 1
AlwaysReplicateAsRoot: 0
SynchronizeTransform: 1
ActiveSceneSynchronization: 0
SceneMigrationSynchronization: 1
SpawnWithObservers: 1
DontDestroyWithOwner: 0
AutoObjectParentSync: 1
SyncOwnerTransformWhenParented: 1
AllowOwnerToParent: 0
--- !u!114 &783618015449435042
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2142678194451976319}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 84af6268af84ad74da0d3c2323dd7b8f, type: 3}
m_Name:
m_EditorClassIdentifier:
ShowTopMostFoldoutHeaderGroup: 1
--- !u!114 &8877540788060270672
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2142678194451976319}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 357ddf00dbde76441827eb57fd190bf8, type: 3}
m_Name:
m_EditorClassIdentifier:
followTransformSettings: {fileID: 11400000, guid: 28235d84f1cad684594e8fce9f404b5d, type: 2}
--- !u!65 &2810168411361310003
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2142678194451976319}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 0.43, y: 0.93, z: 0.47}
m_Center: {x: 0, y: 0.45, z: 0}
--- !u!1001 &5619856531658010681
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 7737315830459736898}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
propertyPath: m_Name
value: bottle_B_green
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
--- !u!4 &5365762707953752018 stripped
Transform:
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 7e3b0ec4662bc1f419b4aeb3bd8c9751, type: 3}
m_PrefabInstance: {fileID: 5619856531658010681}
m_PrefabAsset: {fileID: 0}
fileFormatVersion: 2
guid: 835d789898f8f3a4d97189425e75e8f6
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
...@@ -54,8 +54,8 @@ BoxCollider: ...@@ -54,8 +54,8 @@ BoxCollider:
m_ProvidesContacts: 0 m_ProvidesContacts: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 3 serializedVersion: 3
m_Size: {x: 1, y: 1.9, z: 1} m_Size: {x: 1.54, y: 1, z: 1.06}
m_Center: {x: 0, y: 0, z: 0} m_Center: {x: 0, y: 0.5, z: 0}
--- !u!114 &3719657908984160168 --- !u!114 &3719657908984160168
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
......
...@@ -9,10 +9,10 @@ GameObject: ...@@ -9,10 +9,10 @@ GameObject:
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 1667863745995374288} - component: {fileID: 1667863745995374288}
- component: {fileID: 3668773499323874180}
- component: {fileID: 3196686290097198713} - component: {fileID: 3196686290097198713}
- component: {fileID: 5155192956440818289} - component: {fileID: 5155192956440818289}
- component: {fileID: 9087763765203173466} - component: {fileID: 9087763765203173466}
- component: {fileID: 3668773499323874180}
m_Layer: 8 m_Layer: 8
m_Name: Key m_Name: Key
m_TagString: Untagged m_TagString: Untagged
...@@ -36,6 +36,31 @@ Transform: ...@@ -36,6 +36,31 @@ Transform:
- {fileID: 7749746802626306604} - {fileID: 7749746802626306604}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!114 &3668773499323874180
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8050255731901760503}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
m_Name:
m_EditorClassIdentifier:
GlobalObjectIdHash: 2284586459
InScenePlacedSourceGlobalObjectIdHash: 2284586459
DeferredDespawnTick: 0
Ownership: 1
AlwaysReplicateAsRoot: 0
SynchronizeTransform: 1
ActiveSceneSynchronization: 0
SceneMigrationSynchronization: 1
SpawnWithObservers: 1
DontDestroyWithOwner: 0
AutoObjectParentSync: 1
SyncOwnerTransformWhenParented: 1
AllowOwnerToParent: 0
--- !u!114 &3196686290097198713 --- !u!114 &3196686290097198713
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -82,32 +107,7 @@ MonoBehaviour: ...@@ -82,32 +107,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 357ddf00dbde76441827eb57fd190bf8, type: 3} m_Script: {fileID: 11500000, guid: 357ddf00dbde76441827eb57fd190bf8, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_followTransformSettings: {fileID: 11400000, guid: 5f3f18b211ea1704fbb884929d9cf33d, type: 2} followTransformSettings: {fileID: 11400000, guid: 5f3f18b211ea1704fbb884929d9cf33d, type: 2}
--- !u!114 &3668773499323874180
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8050255731901760503}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
m_Name:
m_EditorClassIdentifier:
GlobalObjectIdHash: 2868596387
InScenePlacedSourceGlobalObjectIdHash: 2284586459
DeferredDespawnTick: 0
Ownership: 1
AlwaysReplicateAsRoot: 0
SynchronizeTransform: 1
ActiveSceneSynchronization: 0
SceneMigrationSynchronization: 1
SpawnWithObservers: 1
DontDestroyWithOwner: 0
AutoObjectParentSync: 1
SyncOwnerTransformWhenParented: 1
AllowOwnerToParent: 0
--- !u!1001 &7783936310330246599 --- !u!1001 &7783936310330246599
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
......
...@@ -1220,6 +1220,11 @@ PrefabInstance: ...@@ -1220,6 +1220,11 @@ PrefabInstance:
insertIndex: -1 insertIndex: -1
addedObject: {fileID: 1768812363} addedObject: {fileID: 1768812363}
m_SourcePrefab: {fileID: 100100000, guid: 2abc46d65f2e2d7439c7689b3c2142c4, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 2abc46d65f2e2d7439c7689b3c2142c4, type: 3}
--- !u!4 &506108082 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
m_PrefabInstance: {fileID: 1741617890852014166}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &525142603 --- !u!1001 &525142603
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -2025,6 +2030,38 @@ PrefabInstance: ...@@ -2025,6 +2030,38 @@ PrefabInstance:
insertIndex: -1 insertIndex: -1
addedObject: {fileID: 1763219176} addedObject: {fileID: 1763219176}
m_SourcePrefab: {fileID: 100100000, guid: 6cdf95d64713790459b9ebea4dd28535, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 6cdf95d64713790459b9ebea4dd28535, type: 3}
--- !u!1 &993885651
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 993885652}
m_Layer: 0
m_Name: Explosives
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &993885652
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 993885651}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 506108082}
m_Father: {fileID: 1591624653}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1044931419 stripped --- !u!1 &1044931419 stripped
GameObject: GameObject:
m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 2abc46d65f2e2d7439c7689b3c2142c4, type: 3} m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 2abc46d65f2e2d7439c7689b3c2142c4, type: 3}
...@@ -3035,6 +3072,7 @@ Transform: ...@@ -3035,6 +3072,7 @@ Transform:
- {fileID: 549995642} - {fileID: 549995642}
- {fileID: 1132077849} - {fileID: 1132077849}
- {fileID: 473138433} - {fileID: 473138433}
- {fileID: 993885652}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1605121339 stripped --- !u!1 &1605121339 stripped
...@@ -4631,6 +4669,83 @@ Transform: ...@@ -4631,6 +4669,83 @@ Transform:
m_CorrespondingSourceObject: {fileID: 8681228075763733043, guid: 525df842114a50742b87e2282140ad02, type: 3} m_CorrespondingSourceObject: {fileID: 8681228075763733043, guid: 525df842114a50742b87e2282140ad02, type: 3}
m_PrefabInstance: {fileID: 365097653882966823} m_PrefabInstance: {fileID: 365097653882966823}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1001 &1741617890852014166
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 993885652}
m_Modifications:
- target: {fileID: 163114042722539874, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: GlobalObjectIdHash
value: 1837939063
objectReference: {fileID: 0}
- target: {fileID: 163114042722539874, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: InScenePlacedSourceGlobalObjectIdHash
value: 1023450164
objectReference: {fileID: 0}
- target: {fileID: 2142678194451976319, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_Name
value: ExplosiveB
objectReference: {fileID: 0}
- target: {fileID: 2810168411361310003, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_Center.y
value: -0.16
objectReference: {fileID: 0}
- target: {fileID: 5365762707953752018, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalPosition.y
value: -0.6
objectReference: {fileID: 0}
- target: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalPosition.x
value: 0.16
objectReference: {fileID: 0}
- target: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalPosition.z
value: -5.62
objectReference: {fileID: 0}
- target: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7737315830459736898, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8877540788060270672, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
propertyPath: followTransformSettings
value:
objectReference: {fileID: 11400000, guid: 28235d84f1cad684594e8fce9f404b5d, type: 2}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 835d789898f8f3a4d97189425e75e8f6, type: 3}
--- !u!1001 &2257826592388196585 --- !u!1001 &2257826592388196585
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -4687,6 +4802,10 @@ PrefabInstance: ...@@ -4687,6 +4802,10 @@ PrefabInstance:
propertyPath: m_Name propertyPath: m_Name
value: Key value: Key
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 9087763765203173466, guid: 1d9ae894a89fd38449f1ce889f52d1ad, type: 3}
propertyPath: followTransformSettings
value:
objectReference: {fileID: 11400000, guid: 5f3f18b211ea1704fbb884929d9cf33d, type: 2}
m_RemovedComponents: [] m_RemovedComponents: []
m_RemovedGameObjects: [] m_RemovedGameObjects: []
m_AddedGameObjects: [] m_AddedGameObjects: []
......
fileFormatVersion: 2
guid: 722e5151599b73a4daaea8098a5a241d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 66230a11c233a404da90c824e752674d, type: 3}
m_Name: ExplosiveSettings
m_EditorClassIdentifier:
fileFormatVersion: 2
guid: 20bb5c8cfaaf529499b561cc27ff27e5
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ab7df33a53f46df4e9ecdcf785116f66, type: 3}
m_Name: ExplosiveBTransformSettings
m_EditorClassIdentifier:
targetRotationOffset: {x: 180, y: 0, z: 0}
targetPositionOffset: {x: 0, y: 0, z: 0}
fileFormatVersion: 2
guid: 28235d84f1cad684594e8fce9f404b5d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
...@@ -12,4 +12,5 @@ MonoBehaviour: ...@@ -12,4 +12,5 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ab7df33a53f46df4e9ecdcf785116f66, type: 3} m_Script: {fileID: 11500000, guid: ab7df33a53f46df4e9ecdcf785116f66, type: 3}
m_Name: KeyTransformSettings m_Name: KeyTransformSettings
m_EditorClassIdentifier: m_EditorClassIdentifier:
keyRotation: {x: 180, y: 180, z: 0} targetRotationOffset: {x: 180, y: 180, z: 0}
targetPositionOffset: {x: 0, y: 0, z: 0}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment