unity怎么把脚本拖给物体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity怎么把脚本拖给物体相关的知识,希望对你有一定的参考价值。

参考技术A 如果脚本是绑定在Light上面:
把灯的颜色改为红色
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour

GameObject obj;
Light light;
void Start()

Debug.Log("Start...");
obj = new GameObject("NewOBJ");
light = GetComponent<Light>();
light.color = Color.red;


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
如果脚本还是想绑定在相机上,可以把Light类的实例转换为public类型,然后把Unity的Light拖拽到脚本的public参数上,这样我们就不需要GetComponent去寻找这个Light了

我想写个unity3D C#脚本用鼠标拖动物体,该怎么办呀,

最好附带C#简易代码

1.新建工程,创建测试物体并赋予材质。

2.插入如图所示代码。

3.将脚本绑定到测试物体上。

4.点击播放按钮,拖动鼠标测试。

参考技术A 这是目前我看到的最精简的,仅一个事件完成拖拽.

/*
* 用到了unity3d非常好的协同机制实现这一点,OnMouseDown事件表示鼠标已作了射线判断得到了对象。
* 拖拽时保持z轴不变,因为屏幕是xy二维的,空间是三维的。
* */
IEnumerator OnMouseDown ()


var camera = Camera.mainCamera;
if (camera)
//转换对象到当前屏幕位置
Vector3 screenPosition = camera.WorldToScreenPoint (transform.position);

//鼠标屏幕坐标
Vector3 mScreenPosition=new Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);
//获得鼠标和对象之间的偏移量,拖拽时相机应该保持不动
Vector3 offset = transform.position - camera.ScreenToWorldPoint( mScreenPosition);
print ("drag starting:"+transform.name);

//若鼠标左键一直按着则循环继续
while (Input.GetMouseButton (0))

//鼠标屏幕上新位置
mScreenPosition = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);

// 对象新坐标
transform.position=offset + camera.ScreenToWorldPoint (mScreenPosition);

//协同,等待下一帧继续
yield return new WaitForFixedUpdate ();


print ("drag compeleted");




---------------------------分割线

下面是unity自带的,在Scripts资源包里有拖拽代码,这个拖拽物体必须附加Rigidbody刚体组件。
DragRigidbody.js

var spring = 50.0;
var damper = 5.0;
var drag = 10.0;
var angularDrag = 5.0;
var distance = 0.2;
var attachToCenterOfMass = false;

private var springJoint : SpringJoint;

function Update ()

// Make sure the user pressed the mouse down
if (!Input.GetMouseButtonDown (0))
return;

var mainCamera = FindCamera();

// We need to actually hit an object
var hit : RaycastHit;
if (!Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), hit, 100))
return;
// We need to hit a rigidbody that is not kinematic
if (!hit.rigidbody || hit.rigidbody.isKinematic)
return;

if (!springJoint)

var go = new GameObject("Rigidbody dragger");
var body : Rigidbody = go.AddComponent ("Rigidbody") as Rigidbody;
springJoint = go.AddComponent ("SpringJoint");
body.isKinematic = true;


springJoint.transform.position = hit.point;
if (attachToCenterOfMass)

var anchor = transform.TransformDirection(hit.rigidbody.centerOfMass) + hit.rigidbody.transform.position;
anchor = springJoint.transform.InverseTransformPoint(anchor);
springJoint.anchor = anchor;

else

springJoint.anchor = Vector3.zero;


springJoint.spring = spring;
springJoint.damper = damper;
springJoint.maxDistance = distance;
springJoint.connectedBody = hit.rigidbody;

StartCoroutine ("DragObject", hit.distance);


function DragObject (distance : float)

var oldDrag = springJoint.connectedBody.drag;
var oldAngularDrag = springJoint.connectedBody.angularDrag;
springJoint.connectedBody.drag = drag;
springJoint.connectedBody.angularDrag = angularDrag;
var mainCamera = FindCamera();
while (Input.GetMouseButton (0))

var ray = mainCamera.ScreenPointToRay (Input.mousePosition);
springJoint.transform.position = ray.GetPoint(distance);
yield;

if (springJoint.connectedBody)

springJoint.connectedBody.drag = oldDrag;
springJoint.connectedBody.angularDrag = oldAngularDrag;
springJoint.connectedBody = null;



function FindCamera ()

if (camera)
return camera;
else
return Camera.main;
追问

前两天在上学路上,不好意思哈,我们加Q嘛,1554548129

本回答被提问者采纳
参考技术B 继续追问,如果我想把一个物体托放到另一个物体身上,此时删除原来的物体,用这个拖过来的物体替换它,怎么办 参考技术C 方法如下:
在鼠标的点击处使用一个射线(ScreenpointToRay),射线垂直投到三维空间里,如果射线接触到你要移动的物体,获得这个对象,鼠标移动时同时改变这个对象的坐标与射线的投射点一致即可,这样的结果就是,鼠标点到物体按住,鼠标到哪里,物体就到哪里。追问

要的就是这种效果,能否提供段代码,我初学unity3D,想看看几个简单的代码作为入门参考

以上是关于unity怎么把脚本拖给物体的主要内容,如果未能解决你的问题,请参考以下文章

unity3d如何通过一个按钮控制物体缩小和放大呢?

unity怎么把一个镜头下的多个脚本一次性复制给另一个镜头?右键弹出的复制功能只能单个复制!

unity3d我想把物体拖拽到脚本里为啥不行呢?如图

unity3d里用脚本改变一个物体的大小比例怎么写脚本谢谢?

unity怎么在脚本里获取hierarchy里的物体?

unity如何查找某个脚本挂在了哪些物体上