不需要加在遊戲物件上,會自動作用。
[BoltGlobalBehaviour("test-net-game")]
public class TestNetGame : GlobalEventListener
{
public float circleLangth = 4;
public override void SceneLoadLocalDone(string scene)
{
print(scene);
if (scene == "test-net-game")
{
Vector2 spawn = stochastic.Cicle(circleLangth);
BoltNetwork.Instantiate(BoltPrefabs.cp1, spawn, Quaternion.identity);
}
}
}
動態網路建立物件方法
BoltNetwork.Instantiate(BoltPrefabs.cp1, spawn, Quaternion.identity);
BoltPrefabs.XXX為自動產生的,只要在專案內附有entity編譯後就會自動產生,極其方便。
State為要同步的狀態,在blot asset設定好了要編譯過才可以用,Bolt Entity在裡面設定後可以用,加完Bolt Entity後就可以再開一個EntityEventListener<IState>就可以做下一步而IState就是設定完的I+State名稱
entity.IsOwner 可以用來判定是否是這個玩家建立的物件
CrazyEvent crazyEvent = CrazyEvent.Create(entity);
用new只會得到null,務必使用Create();
EntityEventListener<T>的public override void OnEvent(CrazyEvent evnt)編譯自動產生,可以藉由這個方法得到事件監聽
Attached大概只會執行一次,所以只有參考物件可以直接set其他要用AddCallback(path/callback)的方法同步
state.AddCallback("CubeColor", ColorChanged);
state.hp = hp;
state.color = spriteRenderer.color;
在自己的方法內要手動更新state的值...而且AddCallback只會在值變動時發動,(建立者玩家值變動更新給其他人,其他人改了只會改到自己的)
using UnityEngine;
using Bolt;
public class TestBgwCircle2 : EntityEventListener<IBgwCircleState>
{
// Start is called before the first frame update
void Start()
{
}
public override void Attached()
{
state.SetTransforms(state.transform, transform);
state.AddCallback("hp", ()=> { hp = state.hp; });
state.AddCallback("color", ()=> { spriteRenderer.color = state.color; });
}
public float speed = 4f;
public override void SimulateOwner()
{
state.hp = hp;
state.color = spriteRenderer.color;
var movement = Vector3.zero;
if (Input.GetKey(KeyCode.W)) { movement.y += 1; }
if (Input.GetKey(KeyCode.S)) { movement.y -= 1; }
if (Input.GetKey(KeyCode.A)) { movement.x -= 1; }
if (Input.GetKey(KeyCode.D)) { movement.x += 1; }
if (Input.GetKeyDown(KeyCode.Return))
{
CrazyEvent crazyEvent = CrazyEvent.Create(entity);
crazyEvent.talk = "Hello " + System.DateTime.Now.ToString();
crazyEvent.Send();
}
if (movement != Vector3.zero)
{
transform.position = transform.position + (movement.normalized * speed * BoltNetwork.FrameDeltaTime);
}
}
}
Bolt 可在Asset自訂同步物件型別,也可以傳送帶大小陣列
state.SetAnimator(GetComponent<Animator>());
也可以set動畫,但匯入動畫要import在手動優化調整