hello again and as the title says im again having an issue with an KassetSpawnable
I can spawn it fine with no issues but as soon i start moving or rotating it will dissapear at some angles as example if i rotate to my right the model will dissapear but then if i keep going until i rotated to my back the model will appear again in the perfect spot its like it just becomes invisible but keeps following the player rotation and movement
So far this is what i got
to spawn the kassetCode:class SV_Campfire extends KAssetSpawnable; var string BuildingName; var MaterialInstanceConstant matInst; var MaterialInstanceConstant MMat,RMat; var PhysicsAsset RPA,MPA; var bool bPlaceable,bReady,bSpawned; var int BuildPC; var SkeletalMesh MMesh,RMesh; function SetCollisionOff() { bCollideWorld = false; bBlockActors = false; } function SetCollisionOn() { bCollideWorld = true; bBlockActors = true; } function CheckLocation(vector NewLoc) { local Actor Actor; bPlaceable = true; SetPlaceable(); ForEach VisibleCollidingActors(class'Actor', Actor, 2.0, NewLoc, true,, true) { SetUnPlaceable(); bPlaceable = false; break; } } function SetUnPlaceable() { matInst = new(None) Class'MaterialInstanceConstant'; matInst.SetParent(MaterialInstanceConstant'SV_Buildings.Materials.Building_UnPlacebleMat_INST'); //SkeletalMeshComponent.SetMaterial(0, matInst); } function SetPlaceable() { matInst = new(None) Class'MaterialInstanceConstant'; matInst.SetParent(MaterialInstanceConstant'SV_Buildings.Materials.Building_PlacebleMat_INST'); // SkeletalMeshComponent.SetMaterial(0, matInst); } function setDefaultMat(MaterialInstanceConstant Mat) { matInst = new(None) Class'MaterialInstanceConstant'; matInst.SetParent(Mat); //SkeletalMeshComponent.SetMaterial(0, matInst); } simulated event TakeDamage (int DamageAmount, Controller EventInstigator, Object.Vector HitLocation, Object.Vector Momentum, class<DamageType> DamageType, optional TraceHitInfo HitInfo, optional Actor DamageCauser) { BuildPC = BuildPC + DamageAmount; if(BuildPC >= 50) { SetMeshAndPhysAsset(MMesh,MPA); MMat = new(None) Class'MaterialInstanceConstant'; MMat.SetParent(MMat); //SkeletalMeshComponent.SetMaterial(0, MMat); } if(BuildPC >= 100) { SetMeshAndPhysAsset(RMesh,RPA); RMat = new(None) Class'MaterialInstanceConstant'; RMat.SetParent(RMat); //SkeletalMeshComponent.SetMaterial(0, RMat); bReady = true; } } defaultproperties { Begin Object Name=KAssetSkelMeshComponent //SkeletalMesh=SkeletalMesh'phystest_resources.RemadePhysBarrel' Scale=1.0f BlockRigidBody = true End Object BuildPC = 0 bCollideWorld=true bHidden=false BuildingName = "nopo" bCollideActors=true //bWakeOnLevelStart=true bDamageAppliesImpulse=true }
Code:if(Building.bIsCampfire == true) { Pawn.Mesh.GetSocketWorldLocationAndRotation(BuildSocketStart, StartLoc); EndLoc = vector(Pawn.Rotation) * 100+ StartLoc; Trace(HitLocation, HitNormal, StartLoc, EndLoc,true,,, //TraceHitActor = TRACEFLAG_Bullet); PA = PhysicsAsset(DynamicLoadObject(Building.campfirePA, class'PhysicsAsset')); RPA = PhysicsAsset(DynamicLoadObject(Building.campfireRPA, class'PhysicsAsset')); MPA = PhysicsAsset(DynamicLoadObject(Building.campfireMPA, class'PhysicsAsset')); Mesh2 = SkeletalMesh(DynamicLoadObject(Building.campfireModel, class'SkeletalMesh')); HalfMesh = SkeletalMesh(DynamicLoadObject(Building.campfireMModel, class'SkeletalMesh')); ReadyMesh = SkeletalMesh(DynamicLoadObject(Building.campfireRModel, class'SkeletalMesh')); CampfireToSpawn = Spawn(class'SV_Campfire', self,, EndLoc); //pawn.location bIsBuilding = true; bCanBuild = true; tfpPawn(Pawn).bSpawnedBuilding = false; CampfireToSpawn.SetMeshAndPhysAsset(Mesh2,PA); CampfireToSpawn.MMesh = HalfMesh; CampfireToSpawn.RMesh = ReadyMesh; CampfireToSpawn.RPA = RPA; CampfireToSpawn.MPA = MPA; CampfireToSpawn.BuildingName = Building.buildingName; Mat = MaterialInstanceConstant(DynamicLoadObject(Building.campfireMat, class'MaterialInstanceConstant')); HalfMat = MaterialInstanceConstant(DynamicLoadObject(Building.CampfireMMat, class'MaterialInstanceConstant')); ReadyMat = MaterialInstanceConstant(DynamicLoadObject(Building.CampfireRMat, class'MaterialInstanceConstant')); CampfireToSpawn.MMat = HalfMat; CampfireToSpawn.RMat = ReadyMat; // CampfireToSpawn.SetPhysics(PHYS_Flying); // if i try to change its physics it stops following the player movement }
and to update the position
Code:function UpdateBuildPosition() { local Vector BuildPos,dir; P = tfpPawn(Pawn); dir = Vector(Pawn.Rotation); BuildPos = tfpPawn(Pawn).GetPawnViewLocation() + dir * BDDistance * PerDistance; BuildPos.Z = BuildPos.Z - 75; if(CampfireToSpawn.bPlaceable == true) { CampfireToSpawn.SetLocation(BuildPos); CampfireToSpawn.CheckLocation(BuildPos); CampfireToSpawn.SetCollisionOff(); } if(P.bSpawnedBuilding == true) { bIsBuilding = false; bCanBuild = true; CampfireToSpawn.setDefaultMat(Mat); CampfireToSpawn.SetCollisionOn(); HUDClass.CloseBDUI(); } if(CampfireToSpawn.bPlaceable == false) { CampfireToSpawn.SetLocation(BuildPos); CampfireToSpawn.CheckLocation(BuildPos); CampfireToSpawn.SetCollision(false,false,false); } } }



Reply With Quote
There are a couple of ideas you could investigate to solve this.



Bookmarks