打箱子&地形&鼠标点击移动总结

地形案例总结

变换 Transform
1 变换组件决定了场景中所有物体的方位,旋转和缩放。每个物体都有一个变换组件。
2 //获取游戏对象的子物体
ston = GameObject.Find("Capsule").transform.FindChild("skeleton");
在Unity中父子化是一个非常重要的概念。当一个游戏对象是另一个游戏对象的父物体时,其子游戏对象会随着它移动、旋转和缩放,就像你的胳膊属于你的身体,当你旋转身体时,你的胳膊也会跟着旋转一样。任何物体都可以有多个子物体,但只能有一个父物体。

if (Input.GetKey(KeyCode.W))
{
ston.animation["run"].speed = 1;
ston.animation.Play("run");
transform.Translate(new Vector3(0, 0, 1));
}

射线和碰撞检测
碰撞检测:
需要注意:
1 需要给找到的游戏对象添加name属性:
//给物体添加name属性
cubeLon.name = "cubeLon";
2 脚本应该添加给要碰撞检测的物体
#region 碰撞检测
//碰撞检测有三个函数enter,stay,exit
void OnCollisionEnter(Collision collision)
{
//通过物体的名称找到碰撞物体并销毁
if (collision.gameObject.name == "cubeLon")
{
Destroy(collision.gameObject);
Debug.Log("碰撞到的物体的名字是:" + collision.gameObject.name);
}
}
#endregion

射线
射线是一个无穷的线,开始于origin并沿着direction方向。

Camera.ScreenPointToRay 屏幕位置转射线
返回一条射线从摄像机通过一个屏幕点。

产生的射线是在世界空间中,从相机的近裁剪面开始并穿过屏幕position(x,y)像素坐标(position.z被忽略)。

if (Input.GetMouseButtonUp(0))
{
//cube.rigidbody.AddForce(new Vector3(1, 0, 0) * speed, ForceMode.Impulse);

#region 射线
//找到摄像机和鼠标位置
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
//如果点击物体存在
if (Physics.Raycast(ray, out hit))
{
Destroy(hit.collider.gameObject);
}

#endregion

}

使用鼠标点击实现物体移动
Vector3.ClampMagnitude 限制长度
static function ClampMagnitude (vector : Vector3, maxLength : float) : Vector3
返回向量的长度,最大不超过maxLength所指示的长度。

Vector3.Distance 距离
static function Distance (a : Vector3, b : Vector3) : float
返回a和b之间的距离。

if (Input.GetMouseButton(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray,out hit))
{
target = hit.point;
}
float distance = Vector3.Distance(target, transform.position);
if (distance>=2)
{
Vector3 step = Vector3.ClampMagnitude((target - transform.position), speed);
chara1.Move(step);
}
}

打箱子代码(打箱子游戏)
记录时间
Time.realtimeSinceStartup;

using UnityEngine;
using System.Collections;

public class boxHit : MonoBehaviour {
public GameObject box;
public float power = 15.0f;
public GameObject fire;
//public Texture2D
public Texture2D Cursor;
public Texture2D bg;
public Texture2D fg;

private float pressTime;
private float now;

// Use this for initialization

生产箱子:

void Start () {
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
GameObject box1 = GameObject.Instantiate(box) as GameObject;
box1.name = "boxHit";
box1.transform.position=new Vector3(j,0.5f+i,0);

}
}
// Screen.showCursor = false;
}

// Update is called once per frame

void Update () {
按下时记录时间
if (Input.GetMouseButtonDown(0))
{
pressTime = Time.realtimeSinceStartup;
}

if (Input.GetMouseButtonUp(0))
{
pressTime = 0;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray,out hit))
{
GameObject bullet = GameObject.CreatePrimitive(PrimitiveType.Sphere);
bullet.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
bullet.renderer.material.color = Color.blue;
bullet.transform.position = Camera.main.transform.position;

Vector3 len = hit.point - Camera.main.transform.position;

Rigidbody rb = bullet.AddComponent<Rigidbody>();
//rb.AddForce()
rb.AddForce(len*power, ForceMode.Impulse);
boxRender br = bullet.AddComponent<boxRender>();//相当于new了一个对象
br.fire = fire;

//bullet.AddComponent<DestroyInVisible>();
bullet.AddComponent<destoryBox1>();
}
power = 15.0f;
}

}

void OnGUI()
{
float left = Input.mousePosition.x-Cursor.width/2;
float top = Screen.height - Input.mousePosition.y-Cursor.height/2;
GUI.DrawTexture(new Rect(left, top, Cursor.width, Cursor.height), Cursor);

if (pressTime>0)
{
now = Time.realtimeSinceStartup;
float len = now - pressTime;
float percent = len / 10.0f;
GUI.DrawTexture(new Rect(0, 0, 100, 20), bg);
if (percent>1)
{
percent = 1;
}
GUI.DrawTexture(new Rect(0, 0, 100 * percent, 20), fg);

power = 15.0f + percent* 10.0f;
}

}
}

打箱子之火花类
using UnityEngine;
using System.Collections;

public class boxRender : MonoBehaviour {
public GameObject fire;
void OnCollisionEnter(Collision collision)
{
if (collision.collider.gameObject.name=="boxHit")
{
GameObject fire1 = GameObject.Instantiate(fire) as GameObject;
fire1.name = "fireBullet";
fire1.transform.position = collision.collider.gameObject.transform.position;
Destroy(fire1, 1);
}

}

}

时间: 2024-11-05 13:04:17

打箱子&地形&鼠标点击移动总结的相关文章

用iTween实现一个鼠标点击一个地方平面中间出现一个向上抛然后下落的球

首先我们创建一个平面, 就用Cube来创建把,来X和Z设置成10,然后我们就有了一个地形了,然后我们创建需要生成的球,然后我们创建一个空物体,把我们的这个球放到这个空物体下面,然后制作成prefabs,然后我们建一个图标,这里我们就用Cube来代替这个图标,把颜色修改为红色,我们还需要创建一个空物体,让他离我们的地形Y为0.5f,主要是为了在这个地方实例化出球,然后我们在这个空物体上写一个C#脚本, 代码如下: using UnityEngine;using System.Collections

利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI

原文:利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew 密码:1te1 地图数据包(sqlserver2008R2版本,也可以不下载):? https://pan.baidu.com/s/1PjcNamad7OVpCrsVJ7dwFQ密码:uw9r 下载 核心SDK升级包:https://pan.baidu.com/s/1Q3dlM-Va-RmlE

JavaScript获取鼠标点击坐标

如何用JavaScript获取鼠标点击时在canvas画布上的坐标呢: 代码如下: -------------------------------------------------------------- 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>demo</title> 6

处理鼠标点击物体事件

如果需要处理鼠标点击物体的情况: using UnityEngine; using System.Collections; public class example : MonoBehaviour { void OnMouseOver() { renderer.material.color -= new Color(0.1F, 0, 0) * Time.deltaTime; } }

html5中canvas的使用 获取鼠标点击页面上某点的RGB

1.html5中的canvas在IE9中可以跑起来.在IE8则跑不起来,这时候就需要一些东西了. 我推荐这种方法,这样显得代码不乱. <!--[if lt IE9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> 需要谷歌的一个html5.js的文件即可. 注意:必须插入在<head></he

Canvas---Canvas事件处理、Canvas元素的鼠标点击事件处理、实现一个元素管理器

由于Canvas的 "忘记式" 绘图机制(就是它没有维护一份绘制元素的列表). 如果仅仅检测用户是否点击整个canvas元素,只需在canvas上注册事件就好. 如果是要分别检测canvas里绘制的不同元素的鼠标点击事件,则要用下面的做法,实现一个元素管理器. 一.原理分析 1.canvas元素能提供的一个api是,context.isPointInPath(x,y),它可以判断参数的点是否在当前路径内. 2.当前路径指的是最近一次调用context.beginPath();当前路径c

WEBBROWSER中模拟鼠标点击(SendMessage/PostMessage)

好久没有写文章,发一篇顶顶博客访问量.别人建议转一些比较好的代码也贴过来,但是我打算这里主要发自己原创的代码,所以么..流量该多少就多少吧... 回到主题,在webbrowser中点击某链接网上几乎都是用document对象模拟点击,这个方法基本能应对一般的情况,但是例如广告联盟的点击XXX就有检测机制(不多解释,你们懂的).所以完全模拟鼠标的点击事件就比较完美.于是我用了最常见的SendMessage. 接下来就要解决一个问题,webbrowser的句柄问题.从控件本身得到的句柄不是真正的浏览

unity中让物体移动到鼠标点击位置(单击移动和双击暂停移动)

private bool IsMove;//移动 //鼠标双击的参数(第一种方式的参数) private float delay = 0.5f; private float firstClickTime = 0; private bool oneClick = false; //点击了第一下 //双击(第二种方式的参数) private float endtime = 0; private float Doubletime = 0.5f; //响应时间 public void Start(Gam

模拟鼠标点击键盘按下

#include <Windows.h> #include <stdlib.h> //打开程序或网页 void open(char *str) { ShellExecuteA(0, "open", str, 0, 0, 1); } //关闭程序 void close() { system("http://taskkill /f /im liebao.exe"); } //模拟键盘按下实现输入 void search() { keybd_eve