public void Initialize() { if (isInitialized) { return; } if (Parent != null && !Parent.IsInitialized) { return; } if (gameObject == null) { return; } if (SpriteData == null) { return; } Type = SpriteData.Type; var parent = gameObject.transform.parent; if (parent == null) { //var bb = gameObject.AddComponent<Billboard>(); } else { Parent = parent.gameObject.GetComponent <RoSpriteAnimator>(); if (Parent != null) { Controllable = Parent.Controllable; } } MeshFilter = gameObject.AddComponent <MeshFilter>(); MeshRenderer = gameObject.AddComponent <MeshRenderer>(); MeshRenderer.sortingOrder = SpriteOrder; MeshCollider = gameObject.AddComponent <MeshCollider>(); SortingGroup = gameObject.GetOrAddComponent <SortingGroup>(); MeshRenderer.receiveShadows = false; MeshRenderer.lightProbeUsage = LightProbeUsage.Off; MeshRenderer.shadowCastingMode = ShadowCastingMode.Off; if (shader == null) { shader = Shader.Find("Unlit/TestSpriteShader"); } if (shader == null) { Debug.LogError("Could not find shader Unlit/TestSpriteShader"); } mat = new Material(shader); mat.mainTexture = SpriteData.Atlas; SpriteData.Atlas.filterMode = !nextUseSmoothRender ? FilterMode.Bilinear : FilterMode.Point; if (Mathf.Approximately(0, SpriteOffset)) { mat.SetFloat("_Offset", SpriteData.Size / 125f); } else { mat.SetFloat("_Offset", SpriteOffset); } MeshRenderer.material = mat; if (Parent != null) { mat.SetFloat("_Offset", Parent.SpriteData.Size / 125f); } if (AudioSource == null && Parent == null) { var channel = AudioManager.Instance.Mixer.FindMatchingGroups("Sounds")[0]; AudioSource = gameObject.AddComponent <AudioSource>(); AudioSource.spatialBlend = 0.7f; AudioSource.priority = 60; AudioSource.maxDistance = 40; AudioSource.rolloffMode = AudioRolloffMode.Linear; AudioSource.volume = 1f; AudioSource.dopplerLevel = 0; AudioSource.outputAudioMixerGroup = channel; } if (Type == SpriteType.Player && State == SpriteState.Idle) { isPaused = true; } if (ChildrenSprites.Count > 0) { foreach (var child in ChildrenSprites) { child.Initialize(); } } meshCache = SpriteMeshCache.GetMeshCacheForSprite(SpriteData.Name); colliderCache = SpriteMeshCache.GetColliderCacheForSprite(SpriteData.Name); spriteName = SpriteData.Name; Color = Color.white; Alpha = 1; isInitialized = true; ChangeMotion(CurrentMotion, true); if (parent == null) { UpdateShade(); CurrentShade = TargetShade; //skip fade in at first spawn } isDirty = true; }
public void Update() { if (Target == null) { return; } if (controllable == null) { controllable = Target.GetComponent <ServerControllable>(); } if (ListenerProbe != null) { var forward = Camera.main.transform.forward; var dist = Vector3.Distance(Camera.main.transform.position, Target.transform.position); ListenerProbe.transform.localPosition = new Vector3(0f, 0f, dist - 10f); } if (WalkProvider == null) { WalkProvider = GameObject.FindObjectOfType <RoWalkDataProvider>(); } if (Screen.height != lastHeight) { UpdateCameraSize(); } if (Input.GetKeyDown(KeyCode.Insert)) { if (controllable.SpriteAnimator.State == SpriteState.Idle || controllable.SpriteAnimator.State == SpriteState.Standby) { NetworkManager.Instance.ChangePlayerSitStand(true); } if (controllable.SpriteAnimator.State == SpriteState.Sit) { NetworkManager.Instance.ChangePlayerSitStand(false); } } if (Input.GetKeyDown(KeyCode.S)) { controllable.SpriteAnimator.Standby = true; } if (Input.GetKeyDown(KeyCode.Space)) { //Debug.Log(controllable.IsWalking); //if(controllable.IsWalking) NetworkManager.Instance.StopPlayer(); } if (Input.GetKeyDown(KeyCode.F4)) { NetworkManager.Instance.SkillAttack(); } if (Input.GetMouseButtonDown(1)) { if (Time.timeSinceLevelLoad - LastRightClick < 0.3f) { if (Input.GetKey(KeyCode.LeftShift)) { Height = 50; } else { TargetRotation = 0f; } } LastRightClick = Time.timeSinceLevelLoad; } if (Input.GetMouseButton(1)) { if (Input.GetMouseButton(1) && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))) { Height -= Input.GetAxis("Mouse Y") / 4; Height = Mathf.Clamp(Height, 0f, 90f); } else { var turnSpeed = 200; TargetRotation += Input.GetAxis("Mouse X") * turnSpeed * Time.deltaTime; } } #if !DEBUG if (Height > 80) { Height = 80; } if (Height < 35) { Height = 35; } #endif DoScreenCast(); //Rotation += Time.deltaTime * 360; if (TargetRotation > 360) { TargetRotation -= 360; } if (TargetRotation < 0) { TargetRotation += 360; } if (Rotation > 360) { Rotation -= 360; } if (Rotation < 0) { Rotation += 360; } Rotation = Mathf.LerpAngle(Rotation, TargetRotation, 7.5f * Time.deltaTime); var ctrlKey = Input.GetKey(KeyCode.LeftControl) ? 10 : 1; Distance += Input.GetAxis("Mouse ScrollWheel") * 20 * ctrlKey; #if !DEBUG if (Distance > 90) { Distance = 90; } if (Distance < 30) { Distance = 30; } #endif TargetFollow = Vector3.Lerp(TargetFollow, Target.transform.position, Time.deltaTime * 5f); CurLookAt = TargetFollow; var targetHeight = Mathf.Lerp(Target.transform.position.y, WalkProvider.GetHeightForPosition(Target.transform.position), Time.deltaTime * 20f); Target.transform.position = new Vector3(Target.transform.position.x, targetHeight, Target.transform.position.z); var pos = Quaternion.Euler(Height, Rotation, 0) * Vector3.back * Distance; transform.position = CurLookAt + pos; transform.LookAt(CurLookAt, Vector3.up); if (Input.GetKeyDown(KeyCode.F5)) { NetworkManager.Instance.RandomTeleport(); } if (Input.GetKeyDown(KeyCode.F3)) { UseTTFDamage = !UseTTFDamage; } if (Input.GetKeyDown(KeyCode.Tab)) { var chunks = GameObject.FindObjectsOfType <RoMapChunk>(); foreach (var c in chunks) { if (c.gameObject.layer == LayerMask.NameToLayer("WalkMap")) { var r = c.gameObject.GetComponent <MeshRenderer>(); r.enabled = !r.enabled; } } } }