Three运营后

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


public class PlayerControl : MonoBehaviour {


SkinnedMeshRenderer[] skin;
[SerializeField]
SkinnedMeshRenderer head;
[SerializeField]
SkinnedMeshRenderer hand;
[SerializeField]
SkinnedMeshRenderer foot;
[SerializeField]
ETCJoystick joyStick;
[SerializeField]
ETCButton attack,a3;
Animator ani;
[SerializeField]
Slider slider;
CharacterController cc;
AnimatorStateInfo stateInfo;
float time,time1,time2,time3;
// Use this for initialization
void Start () {
ani=GetComponent<Animator>();
cc=GetComponent<CharacterController>();
joyStick.onMoveStart.AddListener (onMoveStart);
//joyStick.onMove.AddListener (onMove);
joyStick.onMoveEnd.AddListener (onMoveEnd);
attack.onDown.AddListener (onAttackBtnDown);
a3.onDown.AddListener (onA3BtnDown);
skin=GetComponentsInChildren<SkinnedMeshRenderer>();
foreach (var item in skin) {
item.material.color=Info.color;
}
head.sharedMesh = Info.head;
hand.sharedMesh = Info.hand;
foot.sharedMesh = Info.foot;
}
void onMoveStart()
{
ani.SetBool ("Run",true);
}
void onMove(Vector2 v2)
{


if(stateInfo.IsName("Run")){
transform.LookAt(transform.position+new Vector3(v2.x,0,v2.y));
cc.SimpleMove(transform.forward*250f*Time.deltaTime);
Vector3 currentPos=transform.position;
currentPos.x=Mathf.Clamp(currentPos.x,-10,10);
currentPos.z=Mathf.Clamp(currentPos.z,-10,10);
transform.position=currentPos;


}
}
void onMoveEnd()
{
ani.SetBool ("Run",false);
}
void onAttackBtnDown()
{
if(time>1)
{
ani.SetTrigger("Attack");
Invoke("Attacking",0.7f);
time=0;
}
}
// Update is called once per frame
private void Update () {
time += Time.deltaTime;
time1 += Time.deltaTime;
time2 += Time.deltaTime;
time3 += Time.deltaTime;
stateInfo = ani.GetCurrentAnimatorStateInfo (0);
}
void onA3BtnDown()
{
stateInfo = ani.GetCurrentAnimatorStateInfo(0);
if (stateInfo.IsName("Stand") || stateInfo.IsName("Run")) {
if (time1 > 1f)
{
ani.SetTrigger("a1");
Invoke("A1", 0.1f);
time1 = 0;
}
ani.ResetTrigger("a3");
}
if (stateInfo.IsName("a1") &&stateInfo.normalizedTime>0.5f) {
if (time2 > 1f)
{
ani.SetTrigger("a2");
Invoke("A2", 0.7f);
time2 = 0;
}
ani.ResetTrigger("a1");
}
if (stateInfo.IsName("a2")&&stateInfo.normalizedTime>0.5f) {
if (time3 > 1)
{
ani.SetTrigger("a3");
Invoke("A3", 0.5f);
time3 = 0;
}
ani.ResetTrigger("a2");
}
}
void Attacking() {
foreach (GameObject obj in EnemyManger.Instance.enemies) {
float dis = Vector3.Distance(transform.position,obj.transform.position);
if (dis <= Info.Attackdis) {
obj.GetComponent<EnemyControl>().DamagedByPlayer(10f);
}
}
}
public void Damaged(float DamagedValue) {
if (slider.value <= 0)
{
return;
}
else
{
slider.value -= DamagedValue;
if (slider.value <= 0)
{
ani.SetTrigger("Die");
Invoke("HasDied", 1f);
}
}
}
void HasDied() {
Destroy(slider);
Time.timeScale = 0;
}
void A1() {
foreach (GameObject obj in EnemyManger.Instance.enemies)
{
float dis = Vector3.Distance(transform.position, obj.transform.position);
if (dis <= Info.Attackdis)
{
obj.GetComponent<EnemyControl>().DamagedByPlayer(12f);
}
}
}
void A2() {
foreach (GameObject obj in EnemyManger.Instance.enemies)
{
float dis = Vector3.Distance(transform.position, obj.transform.position);
if (dis <= Info.Attackdis)
{
obj.GetComponent<EnemyControl>().DamagedByPlayer(13f);
}
}
}
void A3() {
foreach (GameObject obj in EnemyManger.Instance.enemies)
{
float dis = Vector3.Distance(transform.position, obj.transform.position);
if (dis <= Info.Attackdis)
{
obj.GetComponent<EnemyControl>().DamagedByPlayer(15f);
}
}
}
private void OnTriggerEnter(Collider other)
{
Destroy(other.gameObject);
}
}
### 使用Three.js 创建智慧园区 #### 构建基础环境 为了创建一个基于Three.js的智慧园区,首先需要设置开发环境。这通常涉及安装Node.js以及通过npm或yarn来管理依赖项。对于前端框架的选择,Vue是一个不错的选择,因为它能够很好地与Three.js集成[^2]。 #### 初始化项目结构 建立一个新的Vue项目,并引入Three.js作为主要渲染引擎。可以通过CDN链接快速加载Three.js库,也可以使用npm/yarn将其添加到项目的`package.json`文件中以便更好地管理和版本控制。 #### 加载和显示基本几何体 一旦有了合适的开发平台,在场景里加入简单的几何形状如立方体、球体等是非常好的起点。这些对象可以帮助熟悉Three.js API的核心概念——网格(Mesh)、材质(Materials) 和光源(Lights)[^1]。 ```javascript // 导入必要的模块 import * as THREE from 'three'; // 设置场景 const scene = new THREE.Scene(); // 定义相机参数 const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = 5; // 渲染器配置 const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // 添加物体至场景 var geometry = new THREE.BoxGeometry(); // 或者其他类型的几何形狀 var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); var cube = new THREE.Mesh(geometry, material); scene.add(cube); function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); } animate(); ``` #### 场景复杂化:导入建筑模型 随着对API的理解加深,下一步就是尝试更复杂的操作,比如从外部文件导入建筑物或其他大型结构物的3D模型。可以考虑使用OBJLoader或者GLTFLoader加载由Blender导出的对象[^4]。 #### 实现互动特性 为了让虚拟空间更加生动有趣,应该给它增加一些交互性的元素。例如允许用户改变视点位置、放大缩小查看细节或是触发特定事件时播放动画效果等等。这部分可能涉及到Raycasting技术用于检测鼠标悬停或点击动作下的碰撞测试。 #### 集成真实数据流 最后一步也是最重要的部分之一是在模拟环境中融入实际运营产生的实时信息。这样不仅可以让参观者看到静态图像,还能体验到动态变化的过程,从而真正感受到所谓的“智慧城市”。此过程往往需要用到WebSocket或者其他形式的数据推送服务[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值