private void Start() { playerPortal.SetActive(true); MessageBroadcaster.Instance.BroadcastAnnouncement("Level " + (SceneManager.GetActiveScene().buildIndex - 2)); // Add the portal to the cameraFollow CinemachineTargetGroup groupComp = cameraFollowGroup.GetComponent <CinemachineTargetGroup>(); List <CinemachineTargetGroup.Target> group = new List <CinemachineTargetGroup.Target>(groupComp.m_Targets); CinemachineTargetGroup.Target newTarget = new CinemachineTargetGroup.Target(); newTarget.target = playerPortal.transform; newTarget.weight = 1.0f; group.Add(newTarget); }
/// <summary> /// 组物体对象集合 /// </summary> /// <param name="groups"></param> public void SetTargetGroup(List <GameObject> groups) { List <CinemachineTargetGroup.Target> targets = new List <CinemachineTargetGroup.Target>(); foreach (GameObject o in groups) { CinemachineTargetGroup.Target t = new CinemachineTargetGroup.Target(); t.target = o.transform; t.weight = 1; t.radius = 1; targets.Add(t); } cinemachineTargetGroup.m_Targets = targets.ToArray(); }
private void UpdateTargets() { CinemachineTargetGroup.Target[] targets = new CinemachineTargetGroup.Target[players.Count]; var indexer = 0; for (indexer = 0; indexer < players.Count; indexer++) { targets[indexer] = new CinemachineTargetGroup.Target() { radius = 3f, target = players[indexer].transform, weight = 1 }; } CinemachineTargetGroup.m_Targets = targets; }
IEnumerator StartGame() { yield return(new WaitForSeconds(1)); readyText.text = "Starting game in 2.. "; yield return(new WaitForSeconds(1)); readyText.text = "Starting game in 1.. "; yield return(new WaitForSeconds(1)); foreach (GameObject go in MenuObjects) { go.SetActive(false); } foreach (GameObject go in GameObjects) { go.SetActive(true); } int i = 0; foreach (PoubelleIdentifier pb in poubelles) { pb.gameObject.transform.position = playerSpawnPos[pb.ID - 1].position; CinemachineTargetGroup.Target ctgt = new CinemachineTargetGroup.Target(); ctgt.target = pb.gameObject.transform; ctgt.radius = 1; ctgt.weight = 1; ctg.m_Targets[i] = ctgt; i++; } while (i < 4) { CinemachineTargetGroup.Target ctgt = new CinemachineTargetGroup.Target(); ctgt.radius = 0; ctgt.weight = 0; ctg.m_Targets[i] = ctgt; i++; } spUI.DisplayUiForXPlayers(playersNumber); hasGameStarted = true; // DESACTIVER TOUT LE RESTE // TODO: EMpecher les poubelles de bouger si game a pas commencé }
private void OnPlayerDied(PlayerDiedEvent e) { int totalTargets = _group.m_Targets.Length; int addedPlayers = 0; CinemachineTargetGroup.Target[] newTargets = new CinemachineTargetGroup.Target[totalTargets - 1]; for (int i = 0; i < totalTargets; i++) { if (_group.m_Targets[i].target != e.Player.transform) { newTargets[addedPlayers] = _group.m_Targets[i]; addedPlayers++; } } _group.m_Targets = newTargets; }
/// <summary> /// 设置目标 /// </summary> /// <param name="targets">目标列表</param> public void SetTargets(params Transform[] targets) { if (targets.Length <= 0) { return; } cmTargets = new CinemachineTargetGroup.Target[targets.Length]; for (int i = 0; i < targets.Length; i++) { cmTargets[i] = new CinemachineTargetGroup.Target() { target = targets[i], weight = 1f, radius = 1f } } ; targetGroup.m_Targets = cmTargets; } }
public override bool StartUp(Vector3Int position, ITilemap tilemap, GameObject go) { if (!Application.isPlaying || go == null) { return(base.StartUp(position, tilemap, go)); } var townController = go.GetComponent <TownController>(); go.name = "Town(" + position + ")"; //GridDataContainer.Instance.RoadTilesData.Remove(position); //we try to remove existing road tile from new town position if (!GridDataContainer.Instance.Towns.ContainsKey(position)) { townController.Position = position; townController.Level = 1; townController.SatisfactionBar = SatisfactionFabric.Instance.CreateSatisfaction(go.transform); townController.SatisfactionBar.name = "Satisfaction at " + townController.name; GridDataContainer.Instance?.Towns.Add(position, townController); } else //нужно копировать все поля из старого в новый контроллер, можно исопльзовать рефлексию но пока что так. https://answers.unity.com/questions/458207/copy-a-component-at-runtime.html { var oldController = GridDataContainer.Instance.Towns[position]; townController.Level = oldController.Level; townController.Position = oldController.Position; townController.SatisfactionBar = oldController.SatisfactionBar; townController.SatisfactionBar.AssociatedObject = townController.transform; GridDataContainer.Instance.Towns[position] = townController; RefreshTile(position, tilemap); } townController.SatisfactionBar.MaxSatisfaction = townController.SatisfactionBar.StartSatisfactionAmount * townController.Level; townController.SatisfactionBar.Satisfaction = townController.SatisfactionBar.MaxSatisfaction; var target = new CinemachineTargetGroup.Target { weight = 1, radius = 1, target = townController.transform }; GameObject.Find("TargetGroup")?.GetComponent <CinemachineTargetGroup>().m_Targets.Add(target); return(base.StartUp(position, tilemap, go)); }
public void FrameDraw() { int targetsDraw = drawindex + drawperframe; for ( ; drawindex < targetsDraw && drawindex < dataPositions.Length; drawindex++) { dataPositions[drawindex] = new Vector3(xvalues[drawindex], yvalues[drawindex], zvalues[drawindex]); dataobjects.Add(Instantiate(dataPoint, dataPositions[drawindex], dataPoint.transform.rotation, Parent.transform)); targets[drawindex] = new CinemachineTargetGroup.Target() { target = dataobjects[drawindex].transform, weight = 1f, radius = 1f }; if (colnames[4].Length == 0) { dataobjects[drawindex].GetComponent <Renderer>().material.color = Color.red; } else { dataobjects[drawindex].GetComponent <Renderer>().material.color = new Color(1 - colorvalues[drawindex] / maxColor, 1 - colorvalues[drawindex] / maxColor, 1 - colorvalues[drawindex] / maxColor); } if (colnames[3].Length != 0) { float scale = sizevalues[drawindex] / maxSize * sizeMaxScale; dataobjects[drawindex].transform.localScale = new Vector3(scale, scale, scale); } } if (drawindex >= dataPositions.Length) { AutoAdjustAxies(); uc.sliderInit = true; drawStart = false; TargetGroup.m_Targets = targets; } }
public override void AssignCameraPosition(JSONNode json) { orient = json["orient"].AsFloat; if (json["agentOrient"] != null) { agentOrient = json["agentOrient"].AsFloat; } var ctg = target_go.AddComponent <CinemachineTargetGroup>(); var ctgt = new CinemachineTargetGroup.Target(); ctgt.target = starting_location.transform; ctgt.weight = 1f; var ctgt2 = new CinemachineTargetGroup.Target(); ctgt2.target = OtherTarget.transform; ctgt2.weight = 1f; ctg.m_Targets = new CinemachineTargetGroup.Target[] { ctgt, ctgt2 }; // this line worked: //var directionTowardsSecondTarget = OtherTarget.transform.position - target_go.transform.position; //target_go.transform.position = target_go.transform.position + new Vector3(directionTowardsSecondTarget.x, 0f, directionTowardsSecondTarget.z) / 2; float camDist = CinematographyAttributes.CalcCameraDistance(target_go, frame_type); //cva.m_LookAt = ctg.transform; Debug.Log("camera Distance: " + camDist.ToString()); Debug.Log("goalDirection: " + (orient).ToString()); cbod.FocusDistance = camDist; var goalDirection = DegToVector3(orient + agentOrient); host_go.transform.position = target_go.transform.position + goalDirection * camDist; host_go.transform.rotation.SetLookRotation(starting_location.transform.position); if (Physics.Raycast(target_go.transform.position, -goalDirection, camDist - 2)) { cva.m_Lens.NearClipPlane = FindNearPlane(target_go.transform.position, goalDirection, camDist); } }
// Add a controller to the list of initialized controls //TODO: Some of this may be reduntant to happen in every scene. private void AddPlayer(int playerID) { GameObject pFab = Instantiate(playerPrefab); PlayerControl pControl = pFab.GetComponent <PlayerControl>(); pControl.player = ReInput.players.GetPlayer(playerID); pControl.player.isPlaying = true; //playerObject.GetComponent<Player> ().myDisplay = playerDisplays [info.playerNumber]; // Add the player to the group of objects to be tracked by the camera // while keeping the other targets CinemachineTargetGroup groupComp = cameraFollowGroup.GetComponent <CinemachineTargetGroup>(); List <CinemachineTargetGroup.Target> group = new List <CinemachineTargetGroup.Target>(groupComp.m_Targets); CinemachineTargetGroup.Target newTarget = new CinemachineTargetGroup.Target(); newTarget.target = pFab.transform; newTarget.weight = 1.0f; group.Add(newTarget); groupComp.m_Targets = group.ToArray(); }
private void UpdateLockOn(bool lockOnEnabled) { if (!lockOnEnabled) { ToggleLockOnCamera(false); lockOnStopEvent.Raise(); cycleTargetRight = null; cycleTargetLeft = null; currentCycleRightAngle = Mathf.Infinity; currentCycleLeftAngle = Mathf.NegativeInfinity; lockedOn.Value = false; return; } //Don't LockOn if no current target if (currentTarget == null) { ToggleLockOnCamera(false); lockOnStopEvent.Raise(); lockedOn.Value = false; return; } ToggleLockOnCamera(true); lockOnStartEvent.Raise(); lockedOn.Value = true; //Update target groups transforms CinemachineTargetGroup.Target playerTarget = new CinemachineTargetGroup.Target(); playerTarget.weight = 1f; playerTarget.radius = 0f; playerTarget.target = lockOnCamTarget; CinemachineTargetGroup.Target enemyTarget = new CinemachineTargetGroup.Target(); enemyTarget.weight = 1f; enemyTarget.radius = 0f; enemyTarget.target = currentTarget.transform; targetGroup.m_Targets = new[] { playerTarget, enemyTarget }; }
// Use this for initialization void Start() { List <CinemachineTargetGroup.Target> targets = new List <CinemachineTargetGroup.Target>(); foreach (ItemInTree treeObject in objectsToPutInTree) { for (int i = 0; i < treeObject.numberOfItems; i++) { ObjectFallFromTree newObject = Instantiate(treeObject.objectPrefab, transform).GetComponent <ObjectFallFromTree>(); //Change position to match tree... Vector2 position = new Vector2(newObject.transform.position.x, newObject.transform.position.y + offsetYArea); newObject.transform.position = position; newObject.transform.position += Random.insideUnitSphere * sizeOfObjectArea; listOfObjects.Add(newObject); CinemachineTargetGroup.Target targetObject = new CinemachineTargetGroup.Target(); targetObject.target = newObject.transform; targetObject.radius = 2f; targetObject.weight = 1; targets.Add(targetObject); } } targetGroup.m_Targets = targets.ToArray(); }
private void Update() { for (int i = 1; i < group.m_Targets.Length; i++) { CinemachineTargetGroup.Target t = group.m_Targets[i]; float dist = Mathf.Abs(Vector3.SqrMagnitude(t.target.position - main.position)); if (!tracked.Contains(t.target) && dist <= distThreshold) { tracked.Add(t.target); int i2 = i; DOTween.To(() => GetKik(i2), x => SetKik(i2, x), 1f, 3.5f).SetEase(Ease.InOutQuad); } else if (tracked.Contains(t.target)) { if (dist >= distThreshold) { tracked.Remove(t.target); int i2 = i; DOTween.To(() => GetKik(i2), x => SetKik(i2, x), 0f, 3.5f).SetEase(Ease.InOutQuad); } } } }
public void LoadPlayers() { Debug.Log("Trying to load players"); // Instaniate characters based on their character name if (!GlobalControl.instance) { return; } for (int i = 0; i < GlobalControl.instance.savedPlayerData.Length; i++) { if (GlobalControl.instance.savedPlayerData[i] != null && !string.IsNullOrEmpty(GlobalControl.instance.savedPlayerData[i].characterName)) { // Run through the list of character names and instaniate the prefab that matches // Doing this since we only have 4 characters. Otherwise we could do something more generic Debug.Log("Iteration " + i); GameObject playerObject = null; Debug.Log("Instanciating " + GlobalControl.instance.savedPlayerData[i].characterName + " prefab from PlayerManager"); switch (GlobalControl.instance.savedPlayerData[i].characterName) { case "Anix": playerObject = Instantiate(anixPrefab); break; case "Dennis": playerObject = Instantiate(dennisPrefab); break; case "Revdioc": playerObject = Instantiate(revdiocPrefab); break; case "Zerandi": playerObject = Instantiate(zerandiPrefab); break; } // Return with an error if the player name doesn't match any of the cases above if (!playerObject) { Debug.LogError("Player object name could not find a prefab to spawn!"); return; } GameObject portrait = Instantiate(portraitPrefab, playerPortraitGroup.transform); // Assign the character portrait image and name portrait.transform.Find("Portrait").GetComponent <Image>().sprite = playerObject.GetComponent <Player>().characterPortraitImage; portrait.transform.Find("Name").GetComponent <Image>().sprite = playerObject.GetComponent <Player>().characterNameImage; //Assign the playerNumber and the text display object to the player for its use. playerObject.GetComponent <Player>().playerNumber = GlobalControl.instance.savedPlayerData[i].playerNumber; playerObject.GetComponent <Player>().setDisplay(portrait); playerObject.GetComponent <PlayerControl>().player = ReInput.players.GetPlayer(GlobalControl.instance.savedPlayerData[i].controllerID); // Spawn the players in a row based on their player number int playerNum = playerObject.GetComponent <Player>().playerNumber; playerObject.transform.position = new Vector2(playerPortal.transform.position.x + playerNum - 2, playerPortal.transform.position.y - 2); // We want to be able to keep track of the players that are spawned during this run so that we can do things like check if they are dead. activePlayers.Add(playerObject); // Add the player to the group of objects to be tracked by the camera // while keeping the other targets CinemachineTargetGroup groupComp = cameraFollowGroup.GetComponent <CinemachineTargetGroup>(); List <CinemachineTargetGroup.Target> group = new List <CinemachineTargetGroup.Target>(groupComp.m_Targets); CinemachineTargetGroup.Target newTarget = new CinemachineTargetGroup.Target(); newTarget.target = playerObject.transform; newTarget.weight = 1.0f; group.Add(newTarget); // Remove the portal if it is there. foreach (CinemachineTargetGroup.Target target in group) { if (target.target == playerPortal.transform) { group.Remove(target); } } // Reassign the group as an array groupComp.m_Targets = group.ToArray(); if (playerPortal) { playerPortal.GetComponent <Animator>().SetTrigger("Close"); } } } }
public void SetTarget(MonoBehaviour target) { this.target.target = target.transform; this.target.weight = targetWeight; TargetGroup.m_Targets[1] = this.target; }
private void SetupTargetList() { float vSpace = 2; var floatFieldWidth = EditorGUIUtility.singleLineHeight * 3f; var hBigSpace = EditorGUIUtility.singleLineHeight * 2 / 3; mTargetList = new ReorderableList( serializedObject, FindProperty(x => x.m_Targets), true, true, true, true); // Needed for accessing field names as strings var def = new CinemachineTargetGroup.Target(); mTargetList.drawHeaderCallback = rect => { rect.width -= EditorGUIUtility.singleLineHeight + 2 * (floatFieldWidth + hBigSpace); var pos = rect.position; pos.x += EditorGUIUtility.singleLineHeight; rect.position = pos; EditorGUI.LabelField(rect, "Target"); pos.x += rect.width + hBigSpace; rect.width = floatFieldWidth; rect.position = pos; EditorGUI.LabelField(rect, "Weight"); pos.x += rect.width + hBigSpace; rect.position = pos; EditorGUI.LabelField(rect, "Radius"); }; mTargetList.drawElementCallback = (rect, index, isActive, isFocused) => { var elemProp = mTargetList.serializedProperty.GetArrayElementAtIndex(index); rect.y += vSpace; rect.height = EditorGUIUtility.singleLineHeight; var pos = rect.position; //rect.width -= hSpace + 2 * EditorGUIUtility.singleLineHeight; rect.width -= 2 * (floatFieldWidth + hBigSpace); EditorGUI.PropertyField(rect, elemProp.FindPropertyRelative(() => def.target), GUIContent.none); var oldWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = EditorGUIUtility.singleLineHeight; pos.x += rect.width; rect.width = floatFieldWidth + hBigSpace; rect.position = pos; EditorGUI.PropertyField(rect, elemProp.FindPropertyRelative(() => def.weight), new GUIContent(" ")); pos.x += rect.width; rect.position = pos; EditorGUI.PropertyField(rect, elemProp.FindPropertyRelative(() => def.radius), new GUIContent(" ")); EditorGUIUtility.labelWidth = oldWidth; }; mTargetList.onAddCallback = l => { var index = l.serializedProperty.arraySize; ++l.serializedProperty.arraySize; var elemProp = mTargetList.serializedProperty.GetArrayElementAtIndex(index); elemProp.FindPropertyRelative(() => def.weight).floatValue = 1; }; }
void OnTriggerEnter2D(Collider2D collision) { if (isGameOver) { return; } GameObject collided = collision.transform.root.gameObject; if (collided.tag == "Player") { isGameOver = true; Debug.Log("Un joueur a gagné !"); waterLevel.setSpeed(0); // Focus the camera on the winner and the helicopter CinemachineTargetGroup targetGroupComponent = FindObjectOfType <CinemachineTargetGroup>(); CinemachineTargetGroup.Target newTargetWinner = new CinemachineTargetGroup.Target(); newTargetWinner.target = collided.transform; newTargetWinner.radius = 10; newTargetWinner.weight = 1; CinemachineTargetGroup.Target newTargetHelicopter = new CinemachineTargetGroup.Target(); newTargetHelicopter.target = helicopter; newTargetHelicopter.radius = 15; newTargetHelicopter.weight = 1.1f; List <CinemachineTargetGroup.Target> targetList = new List <CinemachineTargetGroup.Target>(); targetList.Add(newTargetWinner); targetList.Add(newTargetHelicopter); targetGroupComponent.m_Targets = targetList.ToArray(); // Disable player control collided.GetComponentInParent <PlayerController2>().SetPlayerState(PlayerController2.PlayerState.DontMove); // Disable collisions with the object being attached BoxCollider2D collider = collided.GetComponentInParent <BoxCollider2D>(); if (collider != null) { collider.enabled = false; } // Don't allow physics to affect the object Rigidbody2D rigidBody = collided.GetComponentInParent <Rigidbody2D>(); if (rigidBody != null) { rigidBody.isKinematic = true; } List <Vector3> waypoints = new List <Vector3>(); foreach (Transform waypoint in helicopterWayPoints) { waypoints.Add(waypoint.position); } waypoints.Add(pickUpPoint.position); DOTween.Sequence() // Move helicopter to the landing spot .Append(helicopter.DOPath(waypoints.ToArray(), 4, PathType.CatmullRom).SetEase(Ease.OutQuad)) .AppendInterval(0.25f) // Attach winner to helicopter .AppendCallback(() => { collided.transform.SetParent(helicopterPlayerPoint.transform); collided.transform.localPosition = Vector3.zero; collided.GetComponentInParent <PlayerController2>().SetPlayerState(PlayerController2.PlayerState.Hooked); }) // Helicopter landing off .Append(helicopter.transform.DOMove(pickUpPoint.position + new Vector3(0, 15), 2).SetEase(Ease.InQuad)) // When finished show end game menu .AppendCallback(() => { Debug.Log("complete animation"); GameManager.Instance.GameOver(collider.GetComponent <PlayerController2>().gamePlayerId); }); } }